爬虫 一些爬取图片时出现的错误

在大规模爬取图片过程中,可能会遇到IP被封、HTTP连接数限制等问题。解决方法包括更换IP、设置代理、调整请求头,以及限制请求速度。例如,关闭持久连接可以减少资源占用,增加重试次数有助于应对网络不稳定。适当添加延时可以避免对服务器造成过大压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错

** 在爬取大量图片时遇到的报错**
在这里插入图片描述

解决方法:

  1. IP被封
    更换headers或者换代理IP
proxies = {"http": "http://101.132.111.208:8082"}

** 注:代理分为http和https两种,不能用混。**

  1. http的连接数超过最大限制。
    request的连接数过多而导致Max retries exceeded
    在header中不使用持久连接。
    headers的Connection参数默认为keep-alive,导致之前所有的链接都一直存在,占用了后续的链接请求。
requests.adapters.DEFAULT_RETRIES = 5  # 增加重连次数
s = requests.session()
s.keep_alive = False  # 关闭多余连接
  1. 网站服务器太差,爬取请求的速度太快。
    time.sleep(1)

就我个人的情况而言:第一种方法更适用。

### 使用 Python 编写爬虫抓取网页上片的方法 要使用 Python 抓取网页上的片链接并下载它们,可以按照以下方法实现。此过程涉及解析 HTML 页面、查找 `<img>` 标签以及提取 `src` 属性中的 URL 链接。 #### 方法概述 HTML 中的像通常由 `<img>` 标记表示,而其源地址则存储在 `src` 属性中。通过解析目标页面的 HTML 结构,可以找到所有的片链接,并进一步将其保存到本地磁盘或其他位置[^1]。 以下是具体的技术细节: 1. **发送 HTTP 请求获取网页内容** 可以借助 `requests` 库向指定网址发起请求,从而获得该网页的原始 HTML 数据。 2. **解析 HTML 文档** 利用第三方库 BeautifulSoup 或 lxml 对返回的数据进行解析,定位所有 `<img>` 元素及其对应的属性值。 3. **处理相对路径** 如果某些片链接是以相对形式给出,则需结合网站域名构建完整的绝对路径。 4. **下载片资源** 运用标准模块 urllib 下载远程文件至本地目录下。 下面是一份完整的代码示例用于演示上述流程: ```python import requests from bs4 import BeautifulSoup import os import urllib.request def fetch_images(url, save_dir="images"): """ 从给定URL中提取所有片链接并将它们下载到指定文件夹 参数: url (str): 要访问的目标网页地址. save_dir (str): 存储所下载片的位置,默认为当前工作区下的 'images' 文件夹. 返回: None """ # 创建保存片的文件夹如果不存在的话 if not os.path.exists(save_dir): os.makedirs(save_dir) try: response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') img_tags = soup.find_all('img') # 查找所有的<img>标签 total_downloaded = 0 for idx, tag in enumerate(img_tags): src = tag.get('src') # 处理可能存在的相对路径情况 if src.startswith("//"): src = f"http:{src}" elif src.startswith("/"): base_url = "{0.scheme}://{0.netloc}".format(urllib.parse.urlparse(url)) src = base_url + src filename = os.path.join(save_dir, str(idx) + ".jpg") try: with open(filename, 'wb') as handle: res_img = requests.get(src, stream=True) if not res_img.ok: continue for block in res_img.iter_content(1024): if not block: break handle.write(block) print(f"成功下载第 {idx+1} 张片 -> {filename}") total_downloaded += 1 except Exception as e: print(f"无法下载片 {src}, 错误原因: {e}") print(f"\n总计已下载 {total_downloaded}/{len(img_tags)} 张有效片.") except Exception as ex: print(f"发生错误:{ex}") if __name__ == "__main__": target_website = input("请输入您想抓取片的目标网站:") fetch_images(target_website) ``` 这段脚本定义了一个函数 `fetch_images()` 来完成整个任务链路——从网络请求直到最终存入硬盘的操作都封装其中。此外还加入了异常捕获机制以便更好地应对各种潜在问题的发生场景[^2]。 最后提醒一点,在执行任何类型的自动化程序之前,请务必查阅目标站点的服务条款或者查看是否存在 robots.txt 文件来确认是否允许此类活动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值