gpt4 book ai didi

python - 重复请求发布到 scrapy FormRequest

转载 作者:行者123 更新时间:2023-11-28 17:57:42 25 4
gpt4 key购买 nike

我正在尝试学习 scrapy FormRequest 如何在网站上工作,我有以下 scrapy 代码:

import scrapy
import json
from scrapy.utils.response import open_in_browser

class Test(scrapy.Spider):
name = 'go2'
def start_requests(self):
url = 'http://www.webscrapingfordatascience.com/jsonajax/results2.php'
payload = {'api_code': 'C123456'}
yield scrapy.FormRequest(url,formdata=json.dumps(payload),headers={'Content-Type': 'application/json'})
#yield scrapy.FormRequest(url,formdata=payload) #dict opbject not allowed ?
def parse(self,response):
#print(response.text)
open_in_browser(response)

我似乎无法得到正确的回应,我首先尝试使用字典,但它没有用,然后我用 requests 进行了如下测试,我的两次尝试都有效。

import requests
url = 'http://www.webscrapingfordatascience.com/jsonajax/results2.php'
payload={'api_code': 'C123456'}
res = requests.post(url, json=payload)
res2 = requests.post(url, data=json.dumps(payload))
#res3 = requests.post(url, data=payload) doesn't work

FormRequest 接收键值而不是字符串,这就是 json.dumps() 抛出错误的原因。我的问题是如何让 FormRequest(或任何 scrapy 方法)处理此示例,即获得与请求相同的结果。

我相信 res3 = requests.post(url, data=payload)FormRequest(url,formdata=payload) 相同,这就是它不起作用的原因.

最佳答案

根据 scrapy docs - 允许字典对象。

并且您的代码有效 code OK

更新(不是实际问题,因为问题出在请求正文中而不是 header 中)

我使用 fiddler 调试代理并比较不同库发出的请求和响应。
requests scrapy
如你所见,Scrapy 和请求库使用不同的 header 发出请求。如果您需要在 scrapy 代码中接收有效请求 - 您需要修改 header 。

UPDATE_2

class Test(scrapy.Spider):
name = 'go2'
def start_requests(self):

url = 'http://www.webscrapingfordatascience.com/jsonajax/results2.php'
payload = {'api_code': 'C123456'}
yield scrapy.FormRequest(url,body=json.dumps(payload))

def parse(self,response):
print(response.text)
#open_in_browser(response)

关于python - 重复请求发布到 scrapy FormRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57452400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com