【问题标题】:Scrapy: Scrape data from a get requestScrapy:从获取请求中抓取数据
【发布时间】:2019-08-09 16:26:47
【问题描述】:

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

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

导致请求失败

有没有办法在scrapy中手动获取请求来获取json文件?

【问题讨论】:

    标签: python xml request scrapy screen-scraping


    【解决方案1】:

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

    首先让蜘蛛访问主页。它将通过它发送的 set-cookie 标头加载所有 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,您可以编辑并重新发送请求并继续取出参数以找出它将接受的最小标头。通常只需告诉它您期待返回 JSON。

    【讨论】:

    • 是的,许多网站不需要 cookie,只是您为请求的类型设置了正确的标题。有时我认为 Content-Type 也很重要,或者 XRequestedWith XMLHttpRequest 很常见。
    【解决方案2】:

    GET 请求的结构应类似于您访问的标准 URL。虽然 URL 不会返回一个漂亮的 HTML 页面,但它会(在这种情况下)返回 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'}])
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2019-02-13
      • 2019-10-28
      • 2017-09-04
      • 2015-02-05
      • 2013-05-27
      • 1970-01-01
      相关资源
      最近更新 更多