Python爬取mm131圖片
- 寫在前面的話
- 爬蟲第一步 安裝python環境
- 爬取圖片要用到的三方庫
- 創建一個py文件
- 代碼運行
- 遇到的過的問題
- 寫在后面的話
寫在前面的話
說起來來寫爬蟲這件事,不是心血來潮。我最近想讓自己的網站流量提升一下,所以就想著能不能搞點美女圖片來提高一下點擊量。一開始我是直接使用了干貨api里面的美女圖片接口在自己的網站上展示圖片,這樣一來我服務器的帶寬壓力會小很多,畢竟小水管服務器壓力還是蠻大的(阿里云服務器最低配置),后來使用發現,這個api接口提供的數據有時候圖片會被屏蔽(別人網站圖片做了防盜鏈)so 我需要自己爬取圖片放在網站上了,不過還是跟朋友聊了聊。這樣搞你的網站還是賣茶葉的網站么,后來我想想也是,還是沒有放上去。但是圖片是爬了,不得不說mm131網站上的圖片是真的多。其中遇到一個比較低級的錯誤卡了我一個小時,代碼寫到凌晨三點多,也是不容易?。∷圆幌矚g勿噴哦
爬蟲第一步 安裝python環境
這里不再贅述,需要學習的小伙伴自行修煉(廖雪峰的python教程)
https://www.liaoxuefeng.com/wiki/897692888725344/897692941155968
爬取圖片要用到的三方庫
這個三方庫其實類似我們java里面的okhttp框架,主要是做網絡請求的。它們分別是:
requests
urllib3
這兩個庫都可以爬mm131圖片,至于我為啥會提到這兩個庫。有經驗的小伙伴肯定會說,任意一個不都可以嗎?是的,只是我在使用第一個庫的時候誤以為無法做防盜鏈處理,其實是我還不熟悉啦!所以這里我們主要使用第二個庫 urllib3
創建一個py文件
我這里圖簡單就創建了另一個文件名叫hello.py的文件
代碼:
import
urllib3
startPage
=
4940
#開始頁
page
=
4941
#結束頁
http
=
urllib3
.
PoolManager
(
)
#網絡請求實例
#獲取圖片
def
getPicture
(
page
)
:
pic_num
=
1
#圖片
url_pic_num
=
1
all_num
=
page
-
startPage
#需要遍歷的所有組圖
for
i
in
range
(
startPage
,
page
)
:
print
(
"\r rage:{:}%"
.
format
(
(
i
-
startPage
)
*
100
/
all_num
)
)
while
True
:
url
=
"http://img1.mm131.me/pic/"
+
str
(
i
)
+
"/"
+
str
(
url_pic_num
)
+
".jpg"
# url ="http://img.51miz.com/Photo/2017/03/27/14/P221692_3f0c82bbcf579253d1218b5310969a0e.jpeg"
headers
=
{
'Upgrade-Insecure-Requests'
:
'1'
,
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36Name'
,
#針對防爬蟲網站需要設置
"Referer"
:
"http://www.mm131.com/"
#針對防爬蟲網站需要設置
}
print
(
url
)
try
:
response
=
http
.
request
(
'get'
,
url
,
headers
=
headers
)
res
=
response
.
data
if
response
.
status
!=
200
:
#判斷這個圖片路徑是否存在,不存在跳過
url_pic_num
=
1
#記得加一哦
break
#change path
path
=
"/Users/xxx/Desktop/code/yyy/beauty/"
+
str
(
i
)
+
str
(
pic_num
)
+
".jpg"
#指定文件全路徑名
with
open
(
path
,
'wb'
)
as
f
:
#將圖片文件寫入到指定目錄
f
.
write
(
res
)
f
.
close
(
)
pic_num
+=
1
url_pic_num
+=
1
except
:
url_pic_num
=
1
#失敗直接跳過
print
(
"error"
)
break
def
main
(
)
:
#程序入口
getPicture
(
page
)
if
__name__
==
'__main__'
:
main
(
)
代碼運行
按照上面的代碼寫好之后,接下來當然就是運行我們的代碼啦!
cd 進入到我們的代碼文件的路徑下
python hello.py
糟糕!
程序報錯了!
我們讀一下錯誤提示:
找不到urllib3?。?!
原因是我們引入了urllib3這個庫卻沒有安裝這個庫!
那接下來我們使用
pip install urllib3
使用mac的小伙伴要注意了!需要加入sudo 不然會提示安裝失敗原因是沒有權限
sudo pip install urllib3
安裝完成之后我們繼續使用python hello.py 跑一下我們的程序:
lalala大功告成!
遇到的過的問題
整個代碼實現過程中查了很多文檔和資料,雖然之前有python的開發經驗(2016年的時候為了生活,一周學會python上項目直接剛,剛不了滾蛋?。?。我之前是做android開發的在中軟國際做過,那時候團隊十多個人(開發加測試)每天的動作很輕松。所以后來感覺不想一直這樣,感覺是在混日子!出來以后進了一家小外包公司。兩個月一個app,每天都在coding。做了三個項目之后實在受不了了!主要是受不了那個十八年工作經驗的php leader,嘴比手厲害,別人做的東西都是low逼,自己沒有產出。就進了一家極客公司,他們主要業務是通過爬蟲獲取各類新聞資訊數據,然后利用機器人發推文到各大社交平臺網站。我當時是用Django做開發。從android 直接到 python,一周之內。我只依稀記得當時白天除了完成任務,晚上還要繼續學習python基礎知識。過的是真的慘,不過確實學到了很多東西,雖然現在都沒怎么用到。
言歸正傳!剛剛有點扯遠了。。。
在寫這個爬蟲的時候主要遇到的幾個坑就是sudo 那個地方卡了一下,還有主要是 反爬蟲那個地方 設置Referer 地址設錯了。這個地方還是看了別人的爬蟲程序才發現了。所以才有使用過requests 和 urllib3兩個庫的烏龍。
[參考的代碼](https://github.com/eqblog/mm131_spider_threading/blob/master/base_spider_threads.py)
這個代碼比我的高級,還用了多線程,但是代碼比較久遠,mm131已經做了一些調整了 so僅當參考!
還有個需要大家需要注意的地方就是,虛幻和設置postion的地方大家還需要仔細看看,代碼還是有很多可以優化的地方的。
寫在后面的話
如果你喜歡我的文章的話,就請關注一下吧!
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
