Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0,

提示:此文存在问题,真正测试, 请勿阅读,

07-14 14:26更新:

经过两个多小时的测试,发现此问题的原因是 昨天编写爬虫程序后,给爬虫程序添加了下面的属性:

download_timeout = 20

此属性的解释:

The amount of time (in secs) that the downloader will wait before timing out.

在获取某网站的子域名的robots.txt文件时,需要的时间远远超过20秒,因此,即便有三次重试的机会,也会最终失败。

此值默认为180,因为某网站是国内网站,因此,孤以为它的文件全部都会下载的很快,不需要180这么大,于是更改为20,谁知道,其下子域名的robots.txt却需要这么久:

测试期间更改为30时,状况好了,目前已取消设置此值,已能抓取到需要的数据。

可是,为什么robots.txt会下载这么慢呢?

删除Request中定义的errback进行测试,也可以获取到需要的数据。

那么,在Request中定义errback有什么用呢?

现在,再次在项目内、项目外执行下面的命令都不会发生DNSLookupError了(测试过)(可是,上午怎么就发生了呢?):

scrapy shell "http://money.163.com/18/0714/03/DML7R3EO002580S6.html"

--------可以忽略后面部分--------

昨日写了一个爬虫程序,用来抓取新闻数据,但在抓取某网站数据时发生了错误:超时、重试……开始是超过默认等待180秒的时间,后来自己在爬虫程序中改为了20秒,所以下图显示为20 seconds。

完全不知道怎么回事!上面是使用Scrapy项目内的基于CrawlerRunner编写的程序运行的,看不到更多数据!

尝试将爬虫中的allowed_domains改为下面两种形式(最后会使用第二种)进行测试——以为和子域名有关系:仍然失败。

 #allowed_domains = ['www.163.com', 'money.163.com', 'mobile.163.com',
# 'news.163.com', 'tech.163.com'] allowed_domains = ['163.com']

后来又在settings.py中关闭了robots.txt协议、开启了Cookies支持:仍然失败。

 # Obey robots.txt rules
ROBOTSTXT_OBEY = False # Disable cookies (enabled by default)
COOKIES_ENABLED = True

此时,依靠着之前的知识储备是无法解决问题的了!

使用scrapy shell对获取超时的网页进行测试,结果得到了twisted.internet.error.DNSLookupError的异常信息:

scrapy shell "http://money.163.com/18/0714/03/DML7R3EO002580S6.html"

但是,使用ping命令却可以得到上面失败的子域名的IP地址:

twisted作为一个很常用的Python库,怎么会发生这样的问题呢!完全不应该的!

求助网络吧!最终找到下面的文章:

How do I catch errors with scrapy so I can do something when I get User Timeout error?

最佳答案!中文什么意思:在Request实例中定义errback!(请读三遍

这么简单?和处理DNSLookupError错误有什么关系呢?为何定义了回调函数就可以了呢?

没想明白,不行动……

继续搜索,没有更多了……

好吧,试试这个方法,更改某网站的爬虫程序如下:

增加了errback = self.errback_163,其中,回调函数errback_163的写法和上面的参考文章中的一致(后来发现其来自Scrapy官文Requests and Responses中)。

 yield response.follow(item, callback = self.parse_a_new,
errback = self.errback_163)

准备就绪,使用scapy crawl测试最新程序(在将之前修改的配置还原后——遵守robots.txt协议、禁止Cookies、allowed_domains设置为163.com):成功抓取了想要的数据!

好了,问题解决了。可是,之前的疑问还是没有解决~后续再dig吧!~“神奇的”errback!~

Scrapy项目之User timeout caused connection failure(异常记录)的更多相关文章

  1. FTP上传文件,报错java.net.SocketException: Software caused connection abort: recv failed

    FTP上传功能,使用之前写的代码,一直上传都没有问题,今天突然报这个错误: java.net.SocketException: Software caused connection abort: re ...

  2. scrapy 项目实战(一)----爬取雅昌艺术网数据

    第一步:创建scrapy项目: scrapy startproject Demo 第二步:创建一个爬虫 scrapy genspider demo http://auction.artron.net/ ...

  3. java.net.SocketException: Software caused connection abort: socket write error

    用Java客户端程序访问Java Web服务器时出错: java.net.SocketException: Software caused connection abort: socket write ...

  4. 亲测——pycharm下运行第一个scrapy项目 ©seven_clear

    最近在学习scrapy,就想着用pycharm调试,但不知道怎么弄,从网上搜了很多方法,这里总结一个我试成功了的. 首先当然是安装scrapy,安装教程什么的网上一大堆,这里推荐一个详细的:http: ...

  5. java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&服务端代码

    java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12: ...

  6. Software caused connection abort: recv failed 错误介绍

    解决1: Software caused connection abort: recv failed java.net.SocketException: Software caused connect ...

  7. Software caused connection abort: socket write error

    Exception in thread "main" java.net.SocketException: Software caused connection abort: soc ...

  8. HttpUrlConnection java.net.SocketException: Software caused connection abort: recv failed

    最近做java swing程序在模拟httprequest请求的时候出现了这个错误 java.net.SocketException: Software caused connection abort ...

  9. 报错java.net.SocketException: Software caused connection abort: recv failed 怎么办

    产生这个异常的原因有多种方面,单就如 Software caused 所示, 是由于程序编写的问题,而不是网络的问题引起的. 已知会导致这种异常的一个场景如下: 客户端和服务端建立tcp的短连接,每次 ...

随机推荐

  1. easyui动态生成双列头

    实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...

  2. P4248 [AHOI2013]差异 解题报告

    P4248 [AHOI2013]差异 题目描述 给定一个长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \[\displaystyle \s ...

  3. 《Linux内核设计与实现》第7章读书笔记

    第七章 链接 一. 链接的概念 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程.可以执行于编译.加载和运行时,由叫做链接器(可实现分离编译)的程序自动执行. 二.静态链接 为了创建静态 ...

  4. 单点登录(二)----实战------简单搭建CAS---测试认证方式搭建CAS

    我们在上一篇文章中已经介绍了cas以及它的工作流程. 单点登录(一)-----理论-----单点登录SSO的介绍和CAS+选型 本章我们开始动手搭建一个完整的cas服务实现2个web之间的单点登录. ...

  5. Java之IO流(字节流,字符流)

    IO流和Properties IO流 IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键, 因而所有 I/O 的主体实际上是内置在操作系统中的.单独的 ...

  6. [SDOI2009] HH去散步 (矩阵乘法)

    link $solution:$ 将边化为点后重新建矩阵,跑$T-1$幂即可(因为跑的是新边). 最后直接找与$x,y$所相连的边即可. #include<iostream> #inclu ...

  7. Webpack 学习笔记总结

    Webpack安装 Linux系统默认已经安装了node&npm,但版本比较低,而且没法升级,可以重新下载Node然后通过软链接替换系统自带的node和npm; ln -s /path_to/ ...

  8. composer安装第三方库出现需要认证信息等原因

    最近,在学习使用thinkcmf的时候,使用composer安装第三方类库,遇到了需要输入验证码的问题,援引https://laravel-china.org/topics/17893该链接中的讨论, ...

  9. linux driver ------ 交叉工具链(cross toolchain)

    在 ARM Linux 的开发中,人们趋向于使用 Linaro(http://www.linaro.org/)工具链团队维护的 ARM 工具链,它以每月一次的形式发布新的版本,编译好的可执行文件可以网 ...

  10. django中django.conf.urls.url函数

    在urls.py文件中,我们经常会看到类似于这样的代码: urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_arc ...