Python依据单个关键词爬取百度图片

来源:互联网 发布:淘宝联盟 有效订单 编辑:程序博客网 时间:2024/06/05 06:24

最近由于工作需要要使用大量的水果蔬菜图片,故萌生使用爬虫抓取百度图片的想法,并未用于商业用途,只是为了测试数据。所以并未使用多线程、框架等技术。
由于百度图片是动态加载的,发现搜索关键词后action的参数很相似,故使用requests.get(url , params=)函数去获取内容。并正则提取到所有的图片链接,再将这些图片写入文件夹中。
开始和网上的资料中使用的获取json字符串,但是有些关键词会提示无法解析json,多次尝试后未果故放弃提取json改为正则匹配。

import requestsimport reimport osdef 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 urlsdef 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 += 1if __name__ == '__main__':    url = 'https://image.baidu.com/search/acjson'    dataList = getIntPages('蔬菜', 50)#依据蔬菜关键词获取50页的图片列表,每页30张图片    fetch_img("vegetable/", dataList)#存取图片

该爬虫还有很多地方可以改进,如 :
1.多个关键词的搜索尝试
2.是否可以使用多线程框架提高抓取速度

原创粉丝点击