我有一个请求在常规浏览器上正常工作,但在 scrapy shell 中却没有。一旦我使用“scrapy shell”或“scrapy crawl”,整个 HTML 块就会消失。我肯定不会被禁止。
下面是 github 上的问题(带图片),在我被重定向到下面的链接(法国网站财产拍卖)之前,使用像 mozilla 这样的常规浏览器:
https://github.com/scrapy/scrapy/issues/2109
简而言之,我尝试抓取一个拍卖网站。使用普通浏览器,所有数据都可以正常显示。但是,当我使用 scrapy shell 检查时,response.body 中缺少一个完整的 HTML 块
scrapy shell http://www.licitor.com/ventes-judiciaires-immobilieres/tgi-fontainebleau/mercredi-15-juin-2016.html
即使我通过键入以下内容更改我的用户代理:
scrapy shell -s USER_AGENT='Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1' 'http...the rest of url'
我试图更改用户代理,因为我被告知这是一个潜在的标头问题或 javascript 问题。
加上我终端上的这个消息错误说:
[1:1:0710/114628:ERROR:PlatformKeyboardEvent.cpp(117)] 未实现静态 PlatformEvent::Modifiers blink::PlatformKeyboardEvent::getCurrentModifierState()
以防万一,我必须添加DOWNLOAD_HANDLERS: {'s3': None}
我的设置以消除错误消息。
我在 ubuntu 14 上运行,并在其上安装了带有 scrapy 1.03 的 anaconda。
我在哪里错过了请人们注意的地方?
编辑:为了检查标头解决方案,我将运行良好的 mozilla 浏览器中的相同标头复制粘贴到我的 scrapy shell 中。这是我的代码:
from scrapy import Request
req = Request('MY_URL',
headers={
'Accept': 'text/html, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4',
'User-Agent':"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36",
})
fetch(req)
HTML 数据仍然丢失。
javascript可能会阻止scrapy工作吗?
编辑:
我还安装了带有 docker 先决条件的 scrapy-splash。
然后,我尝试使用启动服务器来处理这个问题。
还是一样的问题!这是我的代码:
$ scrapy shell
from scrapy import Request
from scrapy_splash import SplashRequest
url='http://www.licitor.com/ventes-judiciaires-immobilieres/tgi-paris/jeudi-7-juillet-2016.html'
req = SplashRequest(url, args={'wait': 0.5},
headers={
'Accept': 'text/html, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4',
'User-Agent':"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36",
})
fetch(req)
view(response)
总而言之,这就是我所做的:
- 我将标题更改为与我的 Mozilla 浏览器相同(有效)
- 我安装了 Splash 并试图用它来处理 javascript