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 小时。
备注:
- Client.postreturns一个响应对象
- 不是我真正的 API 钥匙
- client.post 没有正文方法
您得到的错误是由于返回了错误的类型(响应)造成的。
来自 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.
我正在使用 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 小时。
备注:
- Client.postreturns一个响应对象
- 不是我真正的 API 钥匙
- client.post 没有正文方法
您得到的错误是由于返回了错误的类型(响应)造成的。
来自 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.