Scrapy:如何捕获下载错误并尝试重新下载

2024-01-12

在我的爬行过程中,一些页面由于意外重定向而失败并且没有返回响应。如何捕获此类错误并使用原始 url(而不是重定向的 url)重新安排请求?

在我问这里之前,我用谷歌做了很多搜索。看起来有两种方法可以解决这个问题。一种是在下载中间件中捕获异常,另一种是在spider请求的errback中处理下载异常。对于这两个问题,我有一些疑问。

  • 对于方法1,我不知道如何将原始url传递给process_exception函数。下面是我尝试过的示例代码。
class ProxyMiddleware(object):

    def process_request(self, request, spider):
        request.meta['proxy'] = "http://192.168.10.10"
        log.msg('>>>> Proxy %s'%(request.meta['proxy'] if request.meta['proxy'] else ""), level=log.DEBUG)
    def process_exception(self, request, exception, spider):
        log_msg('Failed to request url %s with proxy %s with exception %s' % (request.url, proxy if proxy else 'nil', str(exception)))
        #retry again.
        return request
  • 对于方法2,我不知道如何将外部参数传递给spider中的errback函数。我不知道如何从此 errback 函数检索原始 url 以重新安排请求。

    下面是我尝试使用方法 2 的示例:

class ProxytestSpider(Spider):

    name = "proxytest"
    allowed_domains = ["baidu.com"]
    start_urls = (
        'http://www.baidu.com/',
        )
    def make_requests_from_url(self, url):
        starturl = url
        request = Request(url, dont_filter=True,callback = self.parse, errback = self.download_errback)
        print "make requests"
        return request
    def parse(self, response):
        pass
        print "in parse function"        
    def download_errback(self, e):
        print type(e), repr(e)
        print repr(e.value)
        print "in downloaderror_callback"

对此重新抓取问题的任何建议都将受到高度赞赏。提前致谢。

Regards

Bing


您可以将 lambda 作为 errback 传递:

request = Request(url, dont_filter=True,callback = self.parse, errback = lambda x: self.download_errback(x, url))

这样你就可以访问 errback 函数中的 url:

def download_errback(self, e, url):
    print url
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scrapy:如何捕获下载错误并尝试重新下载 的相关文章

  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • android可扩展列表视图从firebase检索数据

    我该如何使用firebase检索我的数据Expandable listview my firebase节点是这样的 适配器类 public class CustomExpandableListViewAdapter extends Base
  • 等待进程结束

    您好 我必须编写必须打开一些系统属性的程序 例如 Process sound new Process sound StartInfo FileName mmsys cpl sound Start Place 1 Process device
  • numpy:沿新轴扩展数组?

    当然一定有办法做到这一点 我无法解决 我有一个 9 4 数组 我想沿第三轴重复它 4096 次 所以它变得简单 9 4 4096 9 4 数组中的每个值简单地重复 4096 次沿着新的轴线 如果我可疑的 3D 图有意义 对角线是 z 轴 4
  • 雅可比坐标系中的椭圆曲线加法

    我尝试在素数场上的椭圆曲线上添加两个点 将这些点从仿射 仿射坐标转换 但无法获得正确的结果 我正在测试的曲线有 a 0 任何人都可以看到出了什么问题吗 From Affine BigInteger X1 P x BigInteger Y1
  • SpringBoot应用程序发布并读取ActiveMQ主题

    我有两个应该从一个主题中读取的接收器 但只有一个随机接收者收到消息 就像它实际上是从队列而不是主题中读取的一样 我读了this https stackoverflow com questions 40144561 how to listen
  • 将图框与 PyCharm 结合使用

    我花了将近两天的时间在互联网上滚动 但无法解决这个问题 我正在尝试安装图形框架包 https spark packages org package graphframes graphframes 版本 0 2 0 spark2 0 s 2
  • Android 设备与本地主机服务器的连接[重复]

    这个问题在这里已经有答案了 我是安卓新手 我正在开发一个使用 MySQL 的应用程序 该应用程序在模拟器中运行良好 但现在我需要在 Android 设备中运行该应用程序 我能做些什么 正如第一条评论中所述 您应该检查文件 AndroidMa
  • jQuery:如何使用 live() 捕获按键

    我需要捕获某些动态输入上的选项卡按键事件 但使用按键事件的正常语法似乎无法捕获按键代码 input live keypress function e if e which 9 alert Tab pressed 当我在 firebug 中通
  • 在shell脚本中创建重复字符的字符串[重复]

    这个问题在这里已经有答案了 我需要生成一串点 字符 作为变量 即 在我的 Bash 脚本中 用于输入15我需要生成这个长度为 15 的字符串 我需要以不同的方式这样做 我尝试使用它作为基础 来自 Unix com http www unix
  • 如何限制EditText输入内容

    我正在尝试创建一个简单的计算器 它提供 EditText 供用户输入数字 允许输入的内容应该是 1 2 3 4 5 6 7 8 9 0 我知道可以使用以下代码来限制输入内容 android digits 1234567890 android
  • SQL Server 使用 union all 和分页

    当我们使用 union all 从两个表获取结果时 如何应用分页 下面是这里的代码 我在已用于分页的 row num 列中获取重复值 WITH resultSetCTE AS SELECT ROW NUMBER OVER ORDER BY
  • 动态更改 IOS 应用程序的自定义 URL 方案

    有没有办法在运行时动态更改 ios 应用程序的自定义 URL 方案 我只能找到有关如何静态定义自定义方案的信息 即 自定义方案是在配置文件中预定义的 我想知道这是否可以在运行时动态完成 不 您不能动态更改自定义 url 自定义 url 方案
  • 指定 Winhttp 必须使用哪个网卡/连接

    我有一个 C 应用程序 它利用 Winhttp 发出 Web 请求 有没有办法指定 WinHTTP 必须使用哪个网卡进行连接 WinHTTP 或 WinInet 没有公开可用的选项来执行接口关联 它似乎在 System Net 中通过请求的
  • JAX-RS 和长轮询

    我正在尝试将长轮询与 JAX RS 泽西实现 一起使用 但它无法按我的预期工作 也许我误解了什么 我将不胜感激任何建议 请注意 出于安全原因 不可以选择使用反向连接 例如 Atmosphere Comet 等 并不是说我目前正在使用 Tom
  • SonataAdmin 子管理路由在调试中可见但未找到

    php bin console debug router grep postboxmessage pt RG admin mea postbox postboxmessage list ANY ANY ANY admin mea postb
  • MyBatis SelectList 输出 CopyOnWriteArrayList

    请耐心解答新手问题 因为我正在尝试同时学习 MyBatis 和 java 我有一个应用程序需要使用线程安全变量 根据一些研究和我对如何使用应用程序的想法 我决定使用 CopyOnWriteArrayList 而不是 Vector 当我从 m
  • Matlab 将字符串“aaa”转换为[“a”,“a”,“a”]数组

    所以我在 Matlab 中工作 并且在尝试理解字符串在 Matlab 中如何工作时遇到了一个真正的问题 基本上我正在尝试将字符串加载到其二进制版本的双精度数组中 所以基本上我想加载 a 并获取 0 1 1 0 0 0 0 1 下面的内容将字
  • 多对多关系过滤器

    我需要使用与另一个表具有多对多关系的类别表来过滤查询 是否可以使用多对多关系过滤查询 Table res partner有many2many字段category id与表有关的res partner category res partner
  • C99 宏中的循环构造

    我想生成一个具有任意逻辑的数组初始值设定项 不幸的是需要一些循环 define RANDOM ARRAY n double array RANDOM ARRAY 10 假设上面的代码生成一个 10 元素数组的初始值设定项 是否可以在 C99
  • Scrapy:如何捕获下载错误并尝试重新下载

    在我的爬行过程中 一些页面由于意外重定向而失败并且没有返回响应 如何捕获此类错误并使用原始 url 而不是重定向的 url 重新安排请求 在我问这里之前 我用谷歌做了很多搜索 看起来有两种方法可以解决这个问题 一种是在下载中间件中捕获异常