Scrapy:从获取请求中抓取数据

Scrapy: Scrape data from a get request

我正在尝试使用 scrapy 从 https://www.seloger.com 抓取数据。 但是当我尝试 shell 中的视图(响应)时,一些响应丢失了。

当我打开 chrome 开发工具时,我分析了网络,并意识到我正在搜索的数据来自一个获取请求,其中对它的响应是一个 json 文件包含我需要的数据。但是由于

请求失败

是否可以在 scrapy 中手动获取请求以获取 json 文件?

GET 请求的结构应类似于您访问的标准 URL。而不是 URL return 一个漂亮的 HTML 页面,它会(在这种情况下)return JSON 文本。然而,scrapy 确实有一组很好的函数来做到这一点:

https://doc.scrapy.org/en/latest/topics/request-response.html

这是该页面的示例:

request_with_cookies = Request(url="http://www.example.com",
                           cookies=[{'name': 'currency',
                                    'value': 'USD',
                                    'domain': 'example.com',
                                    'path': '/currency'}])

在这种情况下,return从 example.com 编辑的文本将由蜘蛛程序的 parse 函数处理,但您可以设置自己的回调函数。

如果您通常在发出 XHR 请求时查看请求,那么识别几个 header 很重要,在这种情况下它看起来像只接受 header。所以你想做的是这样的。

首先让蜘蛛访问主页。它将通过发送的 set-cookie header 加载所有 cookie。然后像下面这样发出请求。

scrapy.Request(theurl, callback=self.parsejson, headers={
 'Accept': 'Accept: application/json, text/plain, */*',
 'User-Agent': 'My UA'
})

import json
def parsejson(self, response):
    data = json.loads(response.text)
    item['foo'] = data['bar']
    yield item

PS:如果您使用 firefox,您可以编辑并重新发送请求,并不断取出参数以找出它将接受的最小 headers。通常只需告诉它您期待回来 JSON.