Scrapy Shell:twisted.internet.error.ConnectionLost虽然设置了USER_AGENT

时间:2017-02-26 15:20:46

标签: web-scraping scrapy scrapy-spider scrapy-shell

当我尝试刮取某个网站(包括蜘蛛和shell)时,我收到以下错误:

twisted.web._newclient.ResponseNeverReceived: [<twisted.python.failure.Failure twisted.internet.error.ConnectionLost: Connection to the other side was lost in a non-clean fashion.>]

我发现当没有设置用户代理时会发生这种情况。 但手动设置后,我仍然遇到同样的错误。

您可以在此处查看scrapy shell的整个输出:http://pastebin.com/ZFJZ2UXe

说明:

我不在代理服务器后面,我可以通过scrapy shell访问其他网站而不会出现问题。我也可以使用Chrome访问该网站,因此它不是网络或连接问题。

也许有人可以给我一个如何解决这个问题的提示?

1 个答案:

答案 0 :(得分:1)

这是100%正常工作的代码。

您需要做的是您还必须发送请求标头。

同时在ROBOTSTXT_OBEY = False

中设置settings.py
# -*- coding: utf-8 -*-
import scrapy, logging
from scrapy.http.request import Request

class Test1SpiderSpider(scrapy.Spider):
    name = "test1_spider"

    def start_requests(self):

        headers = {
            "Host": "www.firmenabc.at",
            "Connection": "keep-alive",
            "Cache-Control": "max-age=0",
            "Upgrade-Insecure-Requests": "1",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
            "DNT": "1",
            "Accept-Encoding": "gzip, deflate, sdch",
            "Accept-Language":"en-US,en;q=0.8"
        }

        yield Request(url= 'http://www.firmenabc.at/result.aspx?what=&where=Graz', callback=self.parse_detail_page, headers=headers)

    def parse_detail_page(self, response):
        logging.info(response.body)

修改

您可以通过检查开发工具中的网址

来查看要发送的标头

enter image description here