日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 爬虫: 抓取花瓣网图片

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

?

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

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

1. 分析網站

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

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

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

?

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

在每次下拉刷新時,也是發送了一個get請求,在這個請求中有一個關鍵參數max,這個就是當前頁面中最后一個圖片的"pin_id",所以,需要抓取三個內容,分別是"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 抓取主頁面

直接發送get請求,得到html頁面

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

2.3 處理html頁面

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

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

再將這一行中的數據提取出來,直接生成一個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)

到此,圖片的信息都已經得到了。

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

?

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

轉載于:https://www.cnblogs.com/nan86150/p/4272452.html

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。