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.
我正在尝试使用 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.