Python依據單個關鍵詞爬取百度圖片
阿新 • • 發佈:2019-02-05
最近由於工作需要要使用大量的水果蔬菜圖片,故萌生使用爬蟲抓取百度圖片的想法,並未用於商業用途,只是為了測試資料。所以並未使用多執行緒、框架等技術。
由於百度圖片是動態載入的,發現搜尋關鍵詞後action的引數很相似,故使用requests.get(url , params=)函式去獲取內容。並正則提取到所有的圖片連結,再將這些圖片寫入資料夾中。
開始和網上的資料中使用的獲取json字串,但是有些關鍵詞會提示無法解析json,多次嘗試後未果故放棄提取json改為正則匹配。
import requests
import re
import os
def getIntPages(keyword, pages) :
params = []
for i in range(30, 30*pages+30, 30):
params.append({
'tn':'resultjson_com',
'ipn': 'rj',
'ct':'201326592',
'is': '',
'fp': 'result',
'queryWord': keyword,
'cl': '2',
'lm': '-1',
'ie' : 'utf-8',
'oe': 'utf-8',
'st': '-1',
'ic': '0',
'word': keyword,
'face': '0',
'istype': '2',
'nc': '1',
'pn': i,
'rn': '30'
})
url = 'https://image.baidu.com/search/acjson'
urls = []
for i in params:
content = requests.get(url, params=i).text
img_urls = re.findall(r'"thumbURL":"(.*?)"', content)#正則獲取方法
urls.append(img_urls)
#urls.append(requests.get(url,params = i).json().get('data'))開始嘗試的json提取方法
#print("%d times : " % x, img_urls)
return urls
def fetch_img(path,dataList):
if not os.path.exists(path):
os.mkdir(path)
x = 0
for list in dataList:
for i in list:
print("=====downloading %d/1500=====" % (x + 1))
ir = requests.get(i)
open(path + '%d.jpg' % x, 'wb').write(ir.content)
x += 1
if __name__ == '__main__':
url = 'https://image.baidu.com/search/acjson'
dataList = getIntPages('蔬菜', 50)#依據蔬菜關鍵詞獲取50頁的圖片列表,每頁30張圖片
fetch_img("vegetable/", dataList)#存取圖片
該爬蟲還有很多地方可以改進,如 :
1.多個關鍵詞的搜尋嘗試
2.是否可以使用多執行緒框架提高抓取速度