scrapy爬虫报错“Temporaty failure in name resolution”
来源:互联网 发布:单片机lcd1602插上重启 编辑:程序博客网 时间:2024/06/07 17:58
原因不明,根据一个帖子,进行了如下修改后,仍未解决该问题:
$ vim /etc/resolv.conf然后修改文件中的nameserver
该方法无效。
后连接vpn后再次运行该爬虫,就不报这个错误了。
而是报错:
参考了twisted.python.failure , 在命令窗口中运行了如下命令,以更新ssl:
$ apt-get update$ apt-get install openssl
现在报错内容不再是改错误了,不知道是否彻底解决,后期会继续更新。
2016.12.21
=====================================================================
运行后,报错 crawled (404),该错误的生成应该是爬虫被网站ban掉了。
在网络上查找了一些解决方法,最后参考如何让你的爬虫不再被ban,对程序添加了middlewares.py。
在scrapy爬虫中,仅修改settings.py中的DELAY、PROXY、USER_AGENT是不行的,需要通过middlewares.py来管理这些变量。
故将帖子中的中间件文件添加在项目中,文件内容如下:
[root@bogon cnblogs]# vi cnblogs/middlewares.pyimport randomimport base64from settings import PROXIESclass RandomUserAgent(object): """Randomly rotate user agents based on a list of predefined ones""" def __init__(self, agents): self.agents = agents @classmethod def from_crawler(cls, crawler): return cls(crawler.settings.getlist('USER_AGENTS')) def process_request(self, request, spider): #print "**************************" + random.choice(self.agents) request.headers.setdefault('User-Agent', random.choice(self.agents))class ProxyMiddleware(object): def process_request(self, request, spider): proxy = random.choice(PROXIES) if proxy['user_pass'] is not None: request.meta['proxy'] = "http://%s" % proxy['ip_port'] encoded_user_pass = base64.encodestring(proxy['user_pass']) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass print "**************ProxyMiddleware have pass************" + proxy['ip_port'] else: print "**************ProxyMiddleware no pass************" + proxy['ip_port'] request.meta['proxy'] = "http://%s" % proxy['ip_port']
根据参考帖子中的内容添加middlewares.py文件后,运行时报错:
File "/usr/lib/python2.7/random.py",line 273, in choice return seq[int(self.random() * len(seq))] # raises IndexError if seq is emptyIndexError: list index out of range进入该错误指明的文件中,choice函数的参数(seq)为空时就会报此错。
退回至自己middlewares.py文件中查看,在16行和20行使用了choice方法。而,20行中,choice方法的参数,是在文件头引入的settings文件中的PROXIES列表,并不为空,所以错误应该发生在16行。
16行中,choice方法的参数是在类初始化时定义的,而在语句:
self.agents = agents中,agents是未被定义的,所以是空。16行的目的,是在我们的USER_AGENT中随机选择,所以我们在头部的模块引用中,添加:
from settings import USER_AGENT并将类初始化中的语句改为:
self.agents = USER_AGENT
=====================================================================================
根据如上修改后,添加的中间件可以正常工作了。但是,爬虫仍旧不能成功链接网站进行内容抓取。希望不是因为这个网站的反爬虫技术太牛逼。。。2333333
不能爬取的信息显示: Connection was refused by other side: 111: Connection refused
- scrapy爬虫报错“Temporaty failure in name resolution”
- telnet报错,Temporary failure in name resolution:Illegal seek
- Temporary failure in name resolution
- Temporary failure in name resolution
- Temporary failure in name resolution
- CentOS使用wget命令报错Temporary failure in name resolution解决方法
- CentOS安装sass-lang报错Temporary failure in name resolution
- getnameinfo: Non-recoverable failure in name resolution
- 在安装python的pip工具时,遇到以下报错[Errno -3] Temporary failure in name resolution',)': /simple/pip/
- Resolving failed: Temporary failure in name resolution 错误解决方法
- Yum 出现 Temporary failure in name resolution 解决方案
- 控制节点mysql日志:Temporary failure in name resolution
- Resolving failed: Temporary failure in name resolution 错误解决方法
- php_network_getaddresses: getaddrinfo failed:Temporary failure in name resolution
- socket.gaierror Errno -3 Temporary failure in name resolution
- <urlopen error [Errno -3] Temporary failure in name resolution>
- wget下载出现failed: Temporary failure in name resolution错误的解决方法
- 关于错误IOError:<urlopen error (-3, 'Temporary failure in name resolution')>的解决
- Android应用架构
- Swift学习笔记
- C#Timer控件的使用
- Android的事件传递机制
- Android OkHttp完全解析 是时候来了解OkHttp了
- scrapy爬虫报错“Temporaty failure in name resolution”
- 动态规划
- 搭建 Docker 私有仓库 Registry-v2
- 让UIViewController中的viewDidLoad和viewWillAppear各司其责
- 记录常用的第三方
- [iOS]TableView的Cell高度自适应
- centOS6.8 源码安装apache2.2
- ie9以下版本,ajax的error提示no transport的问题
- Cat5切换器哪个品牌好?