【问题标题】:Scrapy FormRequest sending JSONScrapy FormRequest 发送 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 命令提示符下工作。

有什么想法吗?

-公里

【问题讨论】:

  • 什么是整个堆栈跟踪(错误)?

标签: python json scrapy


【解决方案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'} )

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多