are*_*rer 2 scrapy web-scraping scrapy-spider scrapy-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.>]
Run Code Online (Sandbox Code Playgroud)
我发现当没有设置用户代理时会发生这种情况。但是手动设置后,我仍然遇到同样的错误。
你可以在这里看到scrapy shell的整个输出:http ://pastebin.com/ZFJZ2UXe
我没有代理,我可以通过scrapy shell访问其他站点而没有问题。我也可以使用 Chrome 访问该站点,因此这不是网络或连接问题。
也许有人可以给我一个提示,我该如何解决这个问题?
这是 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)
Run Code Online (Sandbox Code Playgroud)
编辑:
您可以通过检查开发工具中的 URL 来查看要发送的标头
归档时间: |
|
查看次数: |
2261 次 |
最近记录: |