網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)爬取百度圖片貓的圖片為案例演示(圖) )
優(yōu)采云 發(fā)布時(shí)間: 2022-03-15 00:00網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)爬取百度圖片貓的圖片為案例演示(圖)
)
網(wǎng)絡(luò )爬蟲(chóng)主要分為4大板塊:
分析具有明確目標的網(wǎng)頁(yè)結構,
在網(wǎng)頁(yè)中查找信息的地址,
抓取信息,
保存信息
以下以網(wǎng)絡(luò )爬蟲(chóng)抓取百度圖片貓的圖片為例進(jìn)行演示
項目案例:
爬取百度所有狗圖片網(wǎng)站
步驟分析:第一步:明確目標,我們將百度的狗圖片作為目標爬取,分析網(wǎng)頁(yè)結構
1、輸入以下網(wǎng)址
^00_1583X672&word=狗
2、選擇下一頁(yè)時(shí),只有pn和gsm值發(fā)生了變化。
到目前為止,我所知道的是:pn參數代表頁(yè)數; word參數自然是關(guān)鍵詞,需要轉換編碼格式。
gsm 的值,隨意更改似乎沒(méi)有任何作用。有句話(huà)說(shuō)gsm:代表pn的十六進(jìn)制值
3、可以拼接出頁(yè)面請求的URL,代碼如下
import sys
import urllib
import requests
def getPage(keyword, page, n):
page = page * n
keyword = urllib.parse.quote(keyword, safe='/')
url_begin = "http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word="
url = url_begin + keyword + "&pn=" + str(page) + "&gsm=" + str(hex(page)) + "&ct=&ic=0&lm=-1&width=0&height=0"
return url
第二步:在網(wǎng)頁(yè)中查找圖片地址
1、右鍵查看網(wǎng)頁(yè)源代碼,分析JSON數據可以看到objURL字段代表原圖的下載路徑
2、根據URL地址,獲取圖片地址的代碼為:
def get_onepage_urls(onepageurl):
try:
html = requests.get(onepageurl).text
except Exception as e:
print(e)
pic_urls = []
return pic_urls
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
return pic_urls
三、爬取圖片并保存
def down_pic(pic_urls):
"""給出圖片鏈接列表, 下載所有圖片"""
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = 'data2/'+str(i + 1) + '.jpg'
with open(string, 'wb') as f:
f.write(pic.content)
print('成功下載第%s張圖片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下載第%s張圖片時(shí)失敗: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
四、調用函數
if __name__ == '__main__':
keyword = '狗' # 關(guān)鍵詞, 改為你想輸入的詞即可, 相當于在百度圖片里搜索一樣
page_begin = 0
page_number = 30
image_number = 3
all_pic_urls = []
while 1:
if page_begin > image_number:
break
print("第%d次請求數據", [page_begin])
url = getPage(keyword, page_begin, page_number)
onepage_urls = get_onepage_urls(url)
page_begin += 1
all_pic_urls.extend(onepage_urls)
down_pic(list(set(all_pic_urls)))