Scrapy FormRequest 发送 JSON
Posted
技术标签:
【中文标题】Scrapy FormRequest 发送 JSON【英文标题】:Scrapy FormRequest sending JSON 【发布时间】:2012-06-29 12:00:31 【问题描述】:我正在尝试创建一个可以发送 content-type:application/json 的 FormRequest。
这是我的尝试:
yield FormRequest("abc.someurl.com", formdata=json.dumps("referenceId":123,"referenceType":456), headers='content-type':'application/json', callback=self.parseResult2)
如果我使用json.dumps()
处理formdata=中的表单数据,我得到的错误是
"exceptions.ValueError: 需要超过 1 个值才能解压"
我不能只使用列表中的
formdata="referenceId":123,"referenceType":456
FormRequest 有效,但未被服务器接受。
import requests
import json
result = requests.post(url, json.dumps("referenceId":123,"referenceType":456), headers='content-type':'application/json')
它可以在上面的 python 命令提示符下工作。
有什么想法吗?
-公里
【问题讨论】:
什么是整个堆栈跟踪(错误)? 【参考方案1】:from scrapy.http import JsonRequest
class TestSpider(scrapy.Spider):
def start_requests(self):
data =
'name1': 'value1',
'name2': 'value2',
yield JsonRequest(url='http://www.example.com/post/action', data=data)
查看更多:docs.scrapy.org#jsonrequest
【讨论】:
但是调用JsonRequest后如何得到响应? 尝试使用return JsonRequest
【参考方案2】:
你可以使用下面的 sn-p 来获得响应:
res =requests.post(url, json=data) 打印(res.text)
【讨论】:
Requests 是另一个模块,OP 正在为 Scrapy 寻求解决方案。【参考方案3】:FormRequest 用于模拟 html 表单(例如 application/x-www-form-urlencoded)。听起来你只是想用你的请求发布数据。由于您提到了“应用程序/json”的内容类型,您可能想要执行以下操作:
request = Request( url, method='POST',
body=json.dumps(my_data),
headers='Content-Type':'application/json' )
【讨论】:
以上是关于Scrapy FormRequest 发送 JSON的主要内容,如果未能解决你的问题,请参考以下文章