手把手帶你用python爬取小姐姐私房照
如何用Python搞到小姐姐私房照
本文純技術(shù)角度出發(fā),教你如何用Python爬蟲(chóng)獲取百度圖庫(kù)海量照片——技術(shù)無(wú)罪。
學(xué)會(huì)獲取小姐姐私房照同理可得也能獲取其他的照片,技術(shù)原理是一致的。
目標(biāo)站點(diǎn)
百度圖片使用關(guān)鍵字搜索 小姐姐私房照
https://image.baidu.com/
開(kāi)發(fā)環(huán)境
- 系統(tǒng):Windows10 64位
- Python版本:Python3.6.5(Python3以上版本即可)
- IDE:Pycharm(非必須,其實(shí)你完全可以記事本寫(xiě)代碼)
- 第三方庫(kù):requests、jsonpath
效果預(yù)覽
網(wǎng)頁(yè)私房照
代碼爬取效果
正式教程
一、第三方庫(kù)安裝
在確保你正確安裝了Python解釋器之后,我們還需要安裝幾個(gè)第三方庫(kù),命令如下**[在終端中安裝即可]**:
HTTP請(qǐng)求庫(kù):
pip3 install requests
JSON數(shù)據(jù)解析庫(kù):
pip3 install jsonpath
二、爬蟲(chóng)的基本套路
- 不管是爬取哪類網(wǎng)站,在爬蟲(chóng)中基本都遵循以下的基本套路:
請(qǐng)求數(shù)據(jù) → 獲取響應(yīng)內(nèi)容 → 解析內(nèi)容 → 保存數(shù)據(jù)
- 當(dāng)然,以上步驟是代碼的編寫(xiě)思路,實(shí)際操作中應(yīng)該還要添加一個(gè)前置步驟,所以完整流程如下:
分析目標(biāo)站點(diǎn) → 請(qǐng)求網(wǎng)站獲取數(shù)據(jù) → 解析內(nèi)容 → 保存數(shù)據(jù)
分析目標(biāo)站點(diǎn)
快速的分析目標(biāo)站點(diǎn)就很容易發(fā)現(xiàn)百度圖庫(kù)的圖片資源是通過(guò)AJAX加載的,所以我們要請(qǐng)求的鏈接并非瀏覽器地址欄鏈接,而是ajax加載的數(shù)據(jù)包的資源路徑,如圖:
那么問(wèn)題來(lái)了,如何獲取到這些數(shù)據(jù)包的地址?其實(shí)很簡(jiǎn)單,如圖所示:
請(qǐng)求網(wǎng)站獲取數(shù)據(jù)
編寫(xiě)代碼請(qǐng)求資源,這里有一點(diǎn)需要注意:請(qǐng)求頭必須攜帶,否則有可能請(qǐng)求失敗導(dǎo)致報(bào)錯(cuò)。
import requests # 導(dǎo)包 # 構(gòu)建請(qǐng)求頭,把爬蟲(chóng)程序偽裝成正常的瀏覽器用戶 headers = { 'sec-fetch-dest': 'image', 'Host': 'image.baidu.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Edg/89.0.774.50', } # 資源包的url鏈接 url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10913526997707526921&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%B0%8F%E5%A7%90%E5%A7%90%E7%A7%81%E6%88%BF%E7%85%A7&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&word=%E5%B0%8F%E5%A7%90%E5%A7%90%E7%A7%81%E6%88%BF%E7%85%A7&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=210&rn=30&gsm=d2&1616553658252=' # 構(gòu)建請(qǐng)求 response = requests.get(url,headers=headers) # 查看狀態(tài)碼 print(response.status_code) # 獲取原始數(shù)據(jù) response.json()
解析數(shù)據(jù)
上述代碼最終獲取到的數(shù)據(jù)是json數(shù)據(jù),也就是我們Python中常說(shuō)的字典,它長(zhǎng)這樣:
{ "queryEnc":"%D0%A1%BD%E3%BD%E3%CB%BD%B7%BF%D5%D5", "queryExt":"小姐姐私房照", "listNum":758, "displayNum":8392, "gsm":"f0", "bdFmtDispNum":"約8,390", "bdSearchTime":"", "isNeedAsyncRequest":0, "bdIsClustered":"1", "data":[ Object{...},# 沒(méi)張私房照對(duì)應(yīng)的詳細(xì)信息,其中就有圖片的URL Object{...}, ··· }
既然它是一個(gè)字典,我們當(dāng)然是可以使用Python中的鍵值索引方式獲取到想要的數(shù)據(jù),但是此方法太笨,這里介紹一種更加高明的方式,使用jsonpath解析數(shù)據(jù)
# 這一行代碼便可以獲取到所有圖片的URL,返回的是一個(gè)列表,遍歷即可拿到每一個(gè)URL imgs = jsonpath.jsonpath(json_data, '$..middleURL')
使用requests請(qǐng)求圖片URL,獲取圖片數(shù)據(jù)
image_data = requests.get(page_url).content
保存數(shù)據(jù)
使用Python中的文件對(duì)象,保存圖片,圖片名字使用時(shí)間戳命名,避免圖片重名
with open('imgs/' + datetime.now().strftime("%Y%m%d%H%M%S%f") + '.jpg', 'wb') as f: f.write(image_data)
寫(xiě)在最后
到這整個(gè)兒爬蟲(chóng)程序就寫(xiě)完了。
當(dāng)然,當(dāng)前的這個(gè)只能爬取一個(gè)資源包中的數(shù)據(jù),要爬取多個(gè)資源包或者說(shuō)全部資源包的數(shù)據(jù)也是很簡(jiǎn)單的,只需要分析分析資源包的URL變化規(guī)律就不難發(fā)現(xiàn)其中的某個(gè)關(guān)鍵字變化,靈活改變?cè)撽P(guān)鍵字就可以不斷爬取。
文章正文到這里已經(jīng)結(jié)束了,只是想感謝一些閱讀我文章的人。
我退休后一直在學(xué)習(xí)如何寫(xiě)文章,說(shuō)實(shí)在的,每次我在后臺(tái)看到一些讀者的回應(yīng)就會(huì)覺(jué)得很欣慰,于是我想把我收藏的一些編程干貨貢獻(xiàn)給大家,回饋每一個(gè)讀者,希望能幫到你們。
到此這篇關(guān)于手把手帶你用python爬取小姐姐私房照的文章就介紹到這了,更多相關(guān)python爬取圖片內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。