Python爬百度图片并下载到本地实战
生活随笔
收集整理的這篇文章主要介紹了
Python爬百度图片并下载到本地实战
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
百度圖片是Ajax加載的,怎么判斷是不是Ajax呢?方法很簡單,我們在頁面進(jìn)行某種操作時(shí),網(wǎng)頁的鏈接不會變化,但是內(nèi)容變了,就可以判定網(wǎng)頁內(nèi)容是Ajax動(dòng)態(tài)加載出來的,例如在瀏覽百度圖片時(shí),鼠標(biāo)滾輪一直往下滑動(dòng),圖片會不斷加載出來,但是網(wǎng)頁的鏈接并沒有變化,百度圖片就是Ajax動(dòng)態(tài)加載出來的。
爬取Ajax動(dòng)態(tài)加載的內(nèi)容一般需要找到它的json接口,在瀏覽器開發(fā)者工具—>Network—>XHR可以找到,如果沒有找到就再選擇其他的看看。
import requests from urllib import parse from uuid import uuid4 import osheaders={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', } session=requests.session() session.headers=headers num=0 def getPage(url):page=session.get(url)print(page.status_code)# print(page.json())page.encoding=page.apparent_encodingdata=page.json()['data'] # 列表for i in data[:-1]: # 因?yàn)樽詈笠粋€(gè)是空的,所以取到倒數(shù)第二個(gè)元素img_url=i['hoverURL']print(img_url)imgDownload(img_url)# 下載圖片 def imgDownload(url):if not os.path.exists('06_imgs'):os.makedirs('06_imgs')global numtry:content=session.get(url)with open('06_imgs/{}.jpg'.format(uuid4()),'wb') as f:for chunk in content.iter_content(225): # 每次下載225字節(jié)if chunk:f.write(chunk)num += 1print(">>>第{}張爬取成功.".format(num))except:print(">>>爬取失敗.")if __name__ == '__main__':# num=0word=input("請輸入關(guān)鍵詞:")pages=input("請輸入要爬取的頁數(shù),每頁30張圖片:")for page in range(int(pages)):url='https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&word='+parse.quote(word)+'&pn='+str((page+1)*30)getPage(url)?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Python爬百度图片并下载到本地实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬取快代理IP并测试IP的可
- 下一篇: Python爬虫百度搜索