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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python3爬取百度图片

發(fā)布時(shí)間:2025/3/11 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3爬取百度图片 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python3爬取百度圖片

最終目的:能通過(guò)輸入關(guān)鍵字進(jìn)行搜索,爬取相應(yīng)的圖片存儲(chǔ)到本地或者數(shù)據(jù)庫(kù)

首先打開(kāi)百度圖片的網(wǎng)站,搜索任意一個(gè)關(guān)鍵字,比如說(shuō):水果,得到如下的界面

?

分析:

1、百度圖片搜索結(jié)果的頁(yè)面源代碼不包含需要提取的圖片信息,需要借助Chrome調(diào)試工具(F12調(diào)出)分析請(qǐng)求的URL地址

2、圖片顯示頁(yè)面沒(méi)有翻頁(yè)按鈕,但是頁(yè)面一直往下拉會(huì)生成新的圖片,這是典型的AJAX數(shù)據(jù)

?

F12打開(kāi)調(diào)試工具,刷新網(wǎng)頁(yè),點(diǎn)擊選中Network選項(xiàng)卡中的XHR標(biāo)簽(這個(gè)標(biāo)簽加載的就是AJAX請(qǐng)求),此時(shí)只能看到一條loginfo開(kāi)頭的信息,字面上可以理解為和登錄相關(guān)的內(nèi)容,先不管它

?

把網(wǎng)頁(yè)往下拖動(dòng),可以看到有新的信息加載出來(lái)

?

這些加載出來(lái)的都是以acjson開(kāi)頭的信息,點(diǎn)擊之后查看Headers、Preview、Response標(biāo)簽,可以看出來(lái)這里面包含了我們需要的圖片信息

?

?

對(duì)比一下這幾條信息的headers中Request URL可以得出參數(shù)中有三個(gè)值在變化,一個(gè)psm,一個(gè)pn,還有一個(gè)14。。。開(kāi)頭的數(shù)字,經(jīng)過(guò)測(cè)試可以發(fā)現(xiàn),實(shí)際上pn的值是最關(guān)鍵的,它影響翻頁(yè),其他兩個(gè)可有可無(wú)。(對(duì)比url建議用一些在線代碼對(duì)比工具,要不然眼睛要瞎)

?

下面開(kāi)始寫(xiě)代碼:

一、請(qǐng)求網(wǎng)頁(yè),獲取html文本(百度圖片有防盜鏈,加個(gè)Referer)

# 獲取動(dòng)態(tài)頁(yè)面返回的文本 def get_page_html(page_url):headers = {'Referer': 'https://image.baidu.com/search/index?tn=baiduimage','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}try:r = requests.get(page_url, headers=headers)if r.status_code == 200:r.encoding = r.apparent_encodingreturn r.textelse:print('請(qǐng)求失敗')except Exception as e:print(e)

二、使用正則表達(dá)式提取真實(shí)圖片的地址(選的是小圖,大圖在objURL里,需要經(jīng)過(guò)簡(jiǎn)單的解密)

# 從文本中提取出真實(shí)圖片地址 def parse_result(text):url_real = re.findall('"thumbURL":"(.*?)",', text)return url_real

三、請(qǐng)求圖片的url,返回content(圖片信息需要以二進(jìn)制寫(xiě)入)

# 獲取圖片的content def get_image_content(url_real):headers = {'Referer': url_real,'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}try:r = requests.get(url_real, headers=headers)if r.status_code == 200:r.encoding = r.apparent_encodingreturn r.contentelse:print('請(qǐng)求失敗')except Exception as e:print(e)

四、保存圖片(因?yàn)槭菧y(cè)試,我寫(xiě)的是絕對(duì)地址,正常需要用相對(duì)地址)

# 將圖片的content寫(xiě)入文件 def save_pic(url_real, content):root = 'D://baiduimage//'path = root + url_real.split('/')[-1]if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):with open(path, 'wb') as f:f.write(content)print('圖片{}保存成功,地址在{}'.format(url_real, path))else:pass

五、定義一個(gè)主函數(shù)(百度圖片每次最多請(qǐng)求30張,即使改了其他請(qǐng)求參數(shù)也最多60張)

# 主函數(shù) def main():keyword = input('請(qǐng)輸入你要查詢的關(guān)鍵字: ')'''按照標(biāo)準(zhǔn), URL 只允許一部分 ASCII 字符(數(shù)字字母和部分符號(hào)),其他的字符(如漢字)是不符合 URL 標(biāo)準(zhǔn)的。所以 URL 中使用其他字符就需要進(jìn)行 URL 編碼。python3中使用urllib.parse.quote進(jìn)行編碼'''keyword_quote = urllib.parse.quote(keyword)depth = int(input("請(qǐng)輸入要爬取的頁(yè)數(shù)(每頁(yè)30張圖): "))for i in range(depth):url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord+=&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&word={}&z=&ic=0&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&step_word={}&pn={}&rn=30&gsm=1e&1541136876386='.format(keyword_quote, keyword_quote, i * 30)html = get_page_html(url)real_urls = parse_result(html)for real_url in real_urls:content = get_image_content(real_url)save_pic(real_url, content)

六、最后寫(xiě)一個(gè)函數(shù)入口

# 函數(shù)入口 if __name__ == '__main__':main()

?

當(dāng)然,實(shí)現(xiàn)整個(gè)過(guò)程最好是先把整體的框架寫(xiě)好,那樣思路最清晰。

關(guān)于百度圖片的爬取就到這里,源代碼地址:傳送門(mén)

更多資訊或疑問(wèn)內(nèi)容請(qǐng)關(guān)注?微信公眾號(hào) “讓夢(mèng)飛起來(lái)”?或添加小編微信,?后臺(tái)回復(fù) “Python” ,領(lǐng)取更多資料哦

? ? ? ? ?? ?? ? ? ? ? ? ? ? ? ?? ?

?

總結(jié)

以上是生活随笔為你收集整理的python3爬取百度图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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