Scrapy项目之twisted.internet.error.DNSLookupError

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

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

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

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

1 #allowed_domains = [‘www.163.com‘, ‘money.163.com‘, ‘mobile.163.com‘,
2 #                   ‘news.163.com‘, ‘tech.163.com‘]
3
4 allowed_domains = [‘163.com‘]

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

1 # Obey robots.txt rules
2 ROBOTSTXT_OBEY = False
3
4 # Disable cookies (enabled by default)
5 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中)。

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

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

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

原文地址:https://www.cnblogs.com/luo630/p/9308884.html

时间: 2024-11-05 21:40:22

Scrapy项目之twisted.internet.error.DNSLookupError的相关文章

同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)

试想一下,前面做的实验和例子都只有一个spider.然而,现实的开发的爬虫肯定不止一个.既然这样,那么就会有如下几个问题:1.在同一个项目中怎么创建多个爬虫的呢?2.多个爬虫的时候是怎么将他们运行起来呢? 说明:本文章是基于前面几篇文章和实验的基础上完成的.如果您错过了,或者有疑惑的地方可以在此查看: 安装python爬虫scrapy踩过的那些坑和编程外的思考 scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据 scrapy爬虫成长日记之将抓取内容写入mysql数据库 如何让

Scrapy项目实战

Date: 2019-07-15 Author: Sun Scrapy是一个为了爬取网站数据.提取结构化数据而编写的爬虫应用框架.Scrapy内部实现了包括并发请求.免登录.URL去重等很多复杂操作,用户不需要明白Scrapy内部具体的爬取策略,只需要根据自己的需要,编写小部分的代码,就能抓取到所需要的数据 此节我们学习下如何采用采用scrapy进行项目流程开发和配置 一 项目准备工作 1. 创建爬虫项目 使用startproject命令创建项目 scrapy startproject scra

如何在eclipse+pydev运行scrapy项目

参考链接:https://www.zhihu.com/question/28565716(eclipse+pydev配置) 参考链接:http://www.cnblogs.com/kongzhagen/p/6549053.html(scrapy爬虫简单实例) 1. 通过eclipse+pydev新建一个python工程 设置如图下图: 2. 可以通过scrapy命令行创建一个工程到刚建的eclipse项目下:/Users/it-0003005/Documents/workspace/testSc

抓取scrapy中文文档 第一个Scrapy项目实现

使用Scrapy这个python的网络爬虫框架抓取Scrapy中文文档 开发第一步:新建项目scrapy startproject myfirst 目录结构: myfirst │ scrapy.cfg Scrapy项目配置文件 │ └─myfirst Scrapy项目代码存放目录 │ items.py 存储从抓取的网页中需要保存的数据,再其中指定要存储的域 │ pipelines.py 管道文件,用于存储从抓取的网页中解析出的其他页面的url,相当于任务队列 │ settings.py 爬虫配置

在Pycharm下创建scrapy项目

1.打开Pycharm软件 2.指定scrapy项目待保存的路径 3.打开Pycharm的Terimnal,输入 scrapy startproject pro 自动生成pro项目 生成目录如下

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

最近在学习scrapy,就想着用pycharm调试,但不知道怎么弄,从网上搜了很多方法,这里总结一个我试成功了的. 首先当然是安装scrapy,安装教程什么的网上一大堆,这里推荐一个详细的:http://blog.csdn.net/php_fly/article/details/19364913,里面有安的东西的资源.有几点需要注意一下:1)Python配置环境变量最好把Scripts路径也加上,如我的是D:\Python27\Scripts.因为装scrapy要用到:2)装zope.inter

Python爬虫框架Scrapy 学习笔记 3 ------- 第一个Scrapy项目

开发环境PyCharm 目标网站和上一次一样,可参考:http://dingbo.blog.51cto.com/8808323/1597695 但是这次不是在单个文件中运行,而是创建一个scrapy项目 1.使用命令行工具创建scrapy项目的基本目录结构 2. 编辑items.py 3.在spiders目录下,新建spider1.py 报错很正常 我们按照scrapy project的目录结构导入了TorrentItem,而不是pyCharm project的目录结构 4.运行spider 抓

五十一 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目

scrapyd模块是专门用于部署scrapy项目的,可以部署和管理scrapy项目 下载地址:https://github.com/scrapy/scrapyd 建议安装 pip3 install scrapyd 首先安装scrapyd模块,安装后在Python的安装目录下的Scripts文件夹里会生成scrapyd.exe启动文件,如果这个文件存在说明安装成功,我们就可以执行命令了 启动scrapyd服务 在命令输入:scrapyd 如图说明启动成功,关闭或者退出命令窗口,因为我们正真的使用是

scrapy项目4:爬取当当网中机器学习的数据及价格(CrawlSpider类)

scrapy项目3中已经对网页规律作出解析,这里用crawlspider类对其内容进行爬取: 项目结构与项目3中相同如下图,唯一不同的为book.py文件 crawlspider类的爬虫文件book的生成命令为:scrapy genspider -t crawl book 'category.dangdang.com' book.py代码如下: # -*- coding: utf-8 -*- import scrapy # 创建用于提取响应中连接的对象 from scrapy.linkextra