这个程序不一定会报错,但是有可能会出现网络连接问题或者图片下载失败的情况。需要注意的是,如果下载的图片数量过多,有可能会因为百度图片搜索的反爬虫机制而导致程序无法继续下载。

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)

代码功能:

  1. 使用 requests 库发送 HTTP 请求,获取百度图片搜索结果页面的 HTML 代码。
  2. 使用 re 库从 HTML 代码中提取图片链接。
  3. 使用 os 库创建文件夹,将图片保存到指定目录。

注意:

  1. 该程序使用了百度图片搜索 API,可能受到百度反爬虫机制的限制。
  2. 程序中使用了 timeout=5 参数,如果图片下载时间过长,会抛出异常。
  3. 下载图片数量过多可能会导致程序运行时间过长。

优化建议:

  1. 增加用户代理池,防止被百度识别为爬虫。
  2. 添加延迟机制,降低访问频率,避免对服务器造成过大压力。
  3. 使用多线程或协程提高下载速度。
  4. 添加错误处理机制,提高程序稳定性。
Python 图片爬虫:百度图片下载脚本

原文地址: https://www.cveoy.top/t/topic/nMR0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录