scrapy爬虫报错“Temporaty failure in name resolution”


原因不明,根据一个帖子,进行了如下修改后,仍未解决该问题:

$ 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.py

import random
import base64
from settings import PROXIES

class 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 empty

IndexError: 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值