scrapy请求问题

想写一个ip代理池,在下载中间件里写了一个迭代器,每次这个迭代器都会返回一个ip地址,然后我再在process_request里使用这个ip地址。但是我发现我每次运行我的爬虫都会给我返回三个值,也就是我请求一次网页process_request这个函数会运行三次,不明白为什么。。

def canshu(self):#数据库返回数据在这个函数
    aa=["192.168.1.2","11.22.33","44,55,66"]
    return aa
def order(self):#将返回数控按顺序输出Ss
    aa=self.canshu()
    for i in aa:
        yield i
@classmethod
def from_crawler(cls, crawler):
    # This method is used by Scrapy to create your spiders.
    s = cls()
    s.a=s.order()
    crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
    return s

def process_request(self, request, spider):
    aa=self.a.__next__()
    ua=random.choice(user_agent_list)
    print("this time ua:",ua)
    request.headers.setdefault('User-Agent',ua)
    #request.meta["proxy"]="http://"+aa
    print("这次使用ip为:",aa)
    return None
    

clipboard.png

阅读 1.9k
1 个回答

看日志,发生了3次请求。你的spider启动后先请求了robots.txt,是因为你settings里的ROBOTSTXT_OBEY=True,接着请求了http://news.sina.com.cn/, 但是出现了302重定向https,所以请求https://news.sina.com.cn/,最后成功。每次请求都触发了你都中间件

感谢yuanshi的解答(源氏?)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题