爬虫实战:批量爬取京东内衣图片(自动爬取多页,非一页)
做下男生想做的事,爬取大量妹子內(nèi)衣圖。
作者: 電氣-余登武
準(zhǔn)備工作
假如我們想把京東內(nèi)衣類商品的圖片全部下載到本地,通過手工復(fù)制粘貼將是一項非常龐大的工程,此時,可以用python爬蟲實現(xiàn)。
第一步:分析網(wǎng)頁地址
起始網(wǎng)頁地址
起始網(wǎng)頁地址
https://search.jd.com/Search?keyword=%E5%86%85%E8%A1%A3%E5%A5%B3&suggest=4.def.0.base&wq=%E5%86%85%E8%A1%A3%E5%A5%B3&page=1&s=56&click=1(在這里你會看到,明明在瀏覽器URL欄看到的是中文,但是復(fù)制url,粘貼到記事本或代碼里面,就會變成如下這樣?)
在很多網(wǎng)站的URL中對一些get的參數(shù)或關(guān)鍵字進(jìn)行編碼,所以我們復(fù)制出來的時候,會出現(xiàn)問題。但復(fù)制過來的網(wǎng)址可以直接打開。本例子不用管這個。
那么,怎樣才能自動爬取第一頁以外的其他頁面,打開第三頁,網(wǎng)頁地址如下,分析發(fā)現(xiàn)和第一頁區(qū)別在于:第一頁最后&page=1,第三頁&page=3
我們可以想到自動獲取多個網(wǎng)頁的方法,可以for循環(huán)實現(xiàn),每次循環(huán)后,page+1
第三頁網(wǎng)址如圖
第二步:分析網(wǎng)頁圖片鏈接
在每頁中,我們都要提取對應(yīng)的圖片,可以使用正則表達(dá)式匹配源碼中圖片的鏈接部分,然后通過urllib.request.urlretrieve()將對應(yīng)鏈接的圖片保存到本地。
但是這里有一個問題,該網(wǎng)頁中的圖片不僅包括列表中的圖片,還包括旁邊一些無關(guān)圖片。所以我們可以進(jìn)行信息過濾。我們需要找到寶貝圖片所在區(qū)域
CTRL+F (搜索操作步驟1圖片的最后幾個字母)定位到寶貝1圖片所在部分
我們通過幾次定位,找到寶貝圖片源碼格式如下
圖片1源碼
圖片2源碼
<img width="220" height="220" data-img="1" data-lazy-img="//img10.360buyimg.com/n7/jfs/t1/62113/37/10114/445422/5d7a2269E8e2e7ed3/4b90428b88320241.jpg" />于是我們可以定義正則規(guī)則
pat1='<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)' 知識點.找到本機(jī)電腦網(wǎng)絡(luò)的headers
有的時候,我們無法爬取一些網(wǎng)頁,會出現(xiàn)403錯誤,因為這些網(wǎng)頁為了防止別人惡意采集信息所以進(jìn)行了一些反爬蟲的設(shè)置。
我們可以設(shè)置一些Headers信息,模擬成瀏覽器去訪問這些網(wǎng)站,就能解決這個問題。
首先,單擊網(wǎng)頁中的百度一下,即讓網(wǎng)頁發(fā)生一個動作,下方窗口出現(xiàn)了很多數(shù)據(jù),如圖。
此時單擊圖中的www.baidu.com,出現(xiàn)如圖
在Headers,往下拖動,找到User-agent
這一串信息就是我們下面模擬瀏覽器用到的信息,復(fù)制出來。
代碼實現(xiàn)
語言:python
from urllib.parse import quote import string import re from urllib import request import urllib.request#讀取網(wǎng)頁def craw(url,page):# 模擬成瀏覽器headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36")opener = urllib.request.build_opener()opener.addheaders = [headers]# 將opener安裝為全局urllib.request.install_opener(opener)url_request = request.Request(url)html1 = request.urlopen(url_request, timeout=10)html1 = html1.read().decode('utf-8') # 加編碼,重要!轉(zhuǎn)換為字符串編碼,read()得到的是byte格式的html=str(html1)#print(html)#定位圖片pat1='<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)'imagelist=re.compile(pat1).findall(html)#print(imagelist)x=1for each in imagelist:print(each)try:imagename='D:\\deeplearn\\xuexicaogao\\圖片\\'+str(page)+str(x)+'.jpg'imageurl="http://"+each #補(bǔ)全圖片網(wǎng)頁地址request.urlretrieve(imageurl, filename=imagename) # 爬下載的圖片放置在提前建好的文件夾里except Exception as e:print(e)x+=1finally:print('下載完成。')x+=1for i in range(1,30):#遍歷網(wǎng)頁1-29url="https://search.jd.com/Search?keyword=%E5%86%85%E8%A1%A3%E5%A5%B3&suggest=4.def.0.base&wq=%E5%86%85%E8%A1%A3%E5%A5%B3&page="+str(i)+"&s=56&click=1"craw(url,i) print('結(jié)束')結(jié)果文件夾
文件夾里有800多張圖
作者:電氣-余登武
總結(jié)
以上是生活随笔為你收集整理的爬虫实战:批量爬取京东内衣图片(自动爬取多页,非一页)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 循环油和液压油的区别?
- 下一篇: 克拉玛依去鹤岗萝北苇场野生水禽栖息地会经