【问题标题】:HtmlResponse working in Scrapy Shell, but not in script?HtmlResponse 在 Scrapy Shell 中工作,但不在脚本中?
【发布时间】:2021-01-27 14:48:04
【问题描述】:

我正在使用 scraperAPI.com 来处理我正在从事的抓取工作的 IP 轮换,我正在尝试实现他们的新发布请求方法,但我一直收到一个“HtmlResponse”对象没有属性“dont_filter” ' 错误。这是自定义的 start_requests 函数:

def start_requests(self):
    S_API_KEY = {'key':'eifgvaiejfvbailefvbaiefvbialefgilabfva5465461654685312165465134654311'
             }
    url = "XXXXXXXXXXXXXX.com"
    payload={}
    headers = {
       'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
       'x-requested-with': 'XMLHttpRequest',
       'Access-Control-Allow-Origin': '*',
       'accept': 'application/json, text/javascript, */*; q=0.01',
       'referer': 'XXXXXXXXXXX.com'
       }
    client = ScraperAPIClient(S_API_KEY['key'])
    resp = client.post(url = url, body = payload, headers = headers)
    yield HtmlResponse(resp.url, body = resp.text,encoding = 'utf-8')

奇怪的是,当我在 scrapy shell 中分段执行此脚本时,它工作正常并返回正确的数据,任何对此问题的见解将不胜感激?目前解决这个问题需要 4 个小时。

注意事项:

  • Client.post 返回一个响应对象
  • 不是我真正的 API 密钥
  • client.post 没有正文方法

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    您得到的错误是由返回错误的类型(响应)引起的。
    来自start_requests 的文档:

    此方法必须返回一个迭代器,其中包含为该蜘蛛爬行的第一个请求。

    似乎最简单的解决方案是对 API url 使用 scrapy 请求(可能是 FormRequest),而不是使用 ScraperAPIClient.post()
    你应该可以使用ScraperAPIClient.scrapyGet() 生成正确的url,但是我没有测试过。

    如果您希望继续使用官方的 api 库,一个稍微复杂一点的选项是Writing your own downloader middleware

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 2019-08-06
      • 2022-01-27
      • 2013-10-05
      • 2017-07-19
      相关资源
      最近更新 更多