defdownload(path, img_list, title_list): for i inrange(len(img_list)): img_url = img_list[i] title = title_list[i] img_url = img_url.replace('640', '1920').replace('480', '1080') pattern3 = re.compile(r'[()-/_]') title = re.sub(pattern3, '', title) print(f'正在爬取: {img_url}') img_floder = 'D:/图片/'+keyword ifnot os.path.exists(img_floder): os.makedirs(img_floder) withopen(f'{img_floder}/{title}.jpg', 'wb') as f: img_content = requests.get(img_url).content f.write(img_content) # 将爬取失败的删除 if os.path.getsize(img_path) < 50: os.remove(img_path)
if __name__ == '__main__': num = 20 keyword = '必应壁纸' path = 'D:/图片/' page_list = get_page(num) for page in page_list: html = get_html(page) img_list, title_list = parse_html(html) download(path, img_list, title_list)
根据搜索词爬取必应图片
这里需要注意: requests.get(url, headers=headers).text 会有很多 html 转义编码的字符,比如:引号变为",会影响使用正则
解决方法:
正则中加入"
使用 etree.HTML 重新加载一下,再用 xpath 定位到此处
出现问题:
请求超时
设置请求超时时间,防止长时间停留在同一个请求
socket.setdefaulttimeout(10)
1 2 3 4 5 6
requests.exceptions.ConnectionError: HTTPConnectionPool(host='www.iutour.cn', port=80): Max retries exceeded with url: /uploadfile/bjzb/20141126124539763.jpg (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001A46192EC50>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。',))