日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Python 爬虫: 抓取花瓣网图片

發(fā)布時間:2025/3/15 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 爬虫: 抓取花瓣网图片 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

接觸Python也好長時間了,一直沒什么機(jī)會使用,沒有機(jī)會那就自己創(chuàng)造機(jī)會!吶,就先從爬蟲開始吧,抓點美女圖片下來。

廢話不多說了,講講我是怎么做的。

1. 分析網(wǎng)站

想要下載圖片,只要知道圖片的地址就可以了,So,現(xiàn)在的問題是如何找到這些圖片的地址。

首先,直接訪問http://huaban.com/favorite/beauty/會看到頁面有20張所要抓取的圖片還有一些其他干擾的圖片信息(用戶的頭像、頁面的一些圖標(biāo)之類的)。當(dāng)點擊一張美女圖片時,頁面會跳轉(zhuǎn)到一個新的頁面,在這個頁面里,是之前那張圖片更清晰版本,我們要下當(dāng)然就要最好的了,就是點擊完圖片后新頁面中那張圖片啦。

下一步就是借助一些工具,如firefox的Firebug或者chrome的F12,分析網(wǎng)站。具體步驟有些繁瑣,我就不細(xì)說了。分析結(jié)果是,首先,發(fā)送一個get請求,請求url為http://huaban.com/favorite/beauty/,得到一個html頁面,在這個頁面中<script>標(biāo)簽下有一行以?app.page["pins"] 開頭的,就是我們要找的部分,等號后面是一個json字符串,格式化后如下:

?

每張要找的圖片對應(yīng)一個字典,圖片的url地址與"file"下的"key"有關(guān),圖片類型與"file"下的"type"有關(guān),只要得到這兩個值就可以下載到圖片了。

在每次下拉刷新時,也是發(fā)送了一個get請求,在這個請求中有一個關(guān)鍵參數(shù)max,這個就是當(dāng)前頁面中最后一個圖片的"pin_id",所以,需要抓取三個內(nèi)容,分別是"pin_id","file"."key"和"file"."type"。

?

2. 編寫爬蟲

2.1 requests

使用Python自帶的urllib和urllib2庫幾乎可以完成任何想要的http請求,但是就像requests所說的,Python’s standard?urllib2?module provides most of the HTTP capabilities you need, but the API is thoroughly?broken. 所以,我這里推薦使用的是requests庫,中文文檔在這里。

2.2 抓取主頁面

直接發(fā)送get請求,得到html頁面

req = requests.get(url = "http://huaban.com/favorite/beauty/") htmlPage = req.content

2.3 處理html頁面

分析html頁面,得到圖片的pin_id、url和圖片類型。首先,用正則處理頁面,得到頁面中<script>標(biāo)簽中?app.page["pins"] 開頭的一行

prog = re.compile(r'app\.page\["pins"\].*') appPins = prog.findall(htmlPage)

再將這一行中的數(shù)據(jù)提取出來,直接生成一個Python字典

null = None result = eval(appPins[0][19:-1])

注:由于javascript中null在Python中為None,所以要讓null=None,appPins中還有一個干擾用切片去掉。

之后就可以得到圖片的信息,將這些信息以字典形式存入一個列表中

images = [] for i in result:info = {}info['id'] = str(i['pin_id'])info['url'] = "http://img.hb.aicdn.com/" + i["file"]["key"] + "_fw658"info['type'] = i["file"]["type"][6:]images.append(info)

到此,圖片的信息都已經(jīng)得到了。

2.4 下載圖片

知道了圖片的url,下載圖片就變的非常簡單了,直接一個get請求,然后再將得到的圖片保存到硬盤。

for image in images:req = requests.get(image["url"])imageName = image["id"] + "." + image["type"]with open(imageName, 'wb') as fp:fp.write(req.content)

2.5 處理下拉刷新

?其實處理下拉刷新與之前講到的處理主頁面幾乎是一樣的,唯一不一樣的是每次下拉刷新是get請求的url中max的值不一樣,這個值就是我們得到的最后一張圖片信息的pin_id。

def make_ajax_url(No):""" 返回ajax請求的url """return "http://huaban.com/favorite/beauty/?i5p998kw&max=" + No + "&limit=20&wfl=1"htmlPage = requests.get(url = make_ajax_url(images[-1]['id'])).content

?

最終程序

最終程序見?Github

?

附注:花瓣網(wǎng)不需要登錄、沒有驗證碼,甚至網(wǎng)站都沒有做最基本的反爬蟲檢測,可以直接得到想要的內(nèi)容,相對來說還是比較容易處理,很適合剛開始接觸爬蟲的同學(xué)學(xué)習(xí)。唯一復(fù)雜點的是頁面下拉刷新是用的ajax,這個也不難,找到每次get請求的參數(shù)是怎么獲得的,就沒問題了。

轉(zhuǎn)載于:https://www.cnblogs.com/nan86150/p/4272452.html

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的Python 爬虫: 抓取花瓣网图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。