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


20161622

=====================================================================================


根据如上修改后,添加的中间件可以正常工作了。但是,爬虫仍旧不能成功链接网站进行内容抓取。希望不是因为这个网站的反爬虫技术太牛逼。。。2333333

不能爬取的信息显示: Connection was refused by other side: 111: Connection refused



0 0
原创粉丝点击