1. 程式人生 > >Python依據單個關鍵詞爬取百度圖片

Python依據單個關鍵詞爬取百度圖片

最近由於工作需要要使用大量的水果蔬菜圖片,故萌生使用爬蟲抓取百度圖片的想法,並未用於商業用途,只是為了測試資料。所以並未使用多執行緒、框架等技術。
由於百度圖片是動態載入的,發現搜尋關鍵詞後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.是否可以使用多執行緒框架提高抓取速度