HtmlResponse 在 Scrapy Shell 中工作,但不在脚本中?

HtmlResponse working in Scrapy Shell, but not in script?

我正在使用 scraperAPI.com 来处理我正在从事的抓取工作的 IP 轮换,我正在尝试实施他们新的 post 请求方法,但我一直收到 '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 中分段执行此脚本时,它工作正常并且 returns 正确的数据,非常感谢对这个问题的任何见解?目前已解决此问题 4 小时。

备注:

您得到的错误是由于返回了错误的类型(响应)造成的。
来自 start_requests 的文档:

This method must return an iterable with the first Requests to crawl for this spider.

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

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