Python 图片爬虫:百度图片下载脚本
这个程序不一定会报错,但是有可能会出现网络连接问题或者图片下载失败的情况。需要注意的是,如果下载的图片数量过多,有可能会因为百度图片搜索的反爬虫机制而导致程序无法继续下载。
import re
import os
import requests
from urllib.parse import quote
def download_pic(keyword, num=10):
url_template = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result&word={}&pn={}&rn=30'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
pic_urls = []
for i in range(num // 30 + 1):
url = url_template.format(quote(keyword), i * 30)
response = requests.get(url, headers=headers)
html = response.content.decode('utf-8')
pic_urls += re.findall('"thumbURL":"(.*?)",', html)
folder_path = './{}'.format(keyword)
if not os.path.exists(folder_path):
os.mkdir(folder_path)
for idx, pic_url in enumerate(pic_urls[:num]):
try:
pic = requests.get(pic_url, headers=headers, timeout=5)
img_name = '{}/{}_{}.jpg'.format(folder_path, keyword, idx)
with open(img_name, 'wb') as f:
f.write(pic.content)
print('[INFO] Successfully downloaded: {}'.format(img_name))
except Exception as e:
print('[ERROR] Failed to download {}: {}'.format(pic_url, e))
if __name__ == '__main__':
download_pic('cat', 50)
代码功能:
- 使用
requests库发送 HTTP 请求,获取百度图片搜索结果页面的 HTML 代码。 - 使用
re库从 HTML 代码中提取图片链接。 - 使用
os库创建文件夹,将图片保存到指定目录。
注意:
- 该程序使用了百度图片搜索 API,可能受到百度反爬虫机制的限制。
- 程序中使用了
timeout=5参数,如果图片下载时间过长,会抛出异常。 - 下载图片数量过多可能会导致程序运行时间过长。
优化建议:
- 增加用户代理池,防止被百度识别为爬虫。
- 添加延迟机制,降低访问频率,避免对服务器造成过大压力。
- 使用多线程或协程提高下载速度。
- 添加错误处理机制,提高程序稳定性。
原文地址: https://www.cveoy.top/t/topic/nMR0 著作权归作者所有。请勿转载和采集!