相关文章推荐
豪情万千的乒乓球  ·  消除空白行^\s*\n,正则表达式-CSDN博客·  1 年前    · 
坏坏的麦片  ·  How to fix OSError: ...·  1 年前    · 
机灵的炒面  ·  如何设置Power ...·  1 年前    · 
讲道义的山羊  ·  linux源码解析-dup_task_str ...·  1 年前    · 
稳重的树叶  ·  Web 自动化操作在运行时失败 - ...·  1 年前    · 
Code  ›  一日一技:Scrapy 如何正确 Post 发送 JSON 数据开发者社区
大数据 post scrapy
https://cloud.tencent.com/developer/article/1838065
帅呆的毛衣
1 年前
作者头像
青南
0 篇文章

一日一技:Scrapy 如何正确 Post 发送 JSON 数据

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 未闻Code > 一日一技:Scrapy 如何正确 Post 发送 JSON 数据

一日一技:Scrapy 如何正确 Post 发送 JSON 数据

作者头像
青南
发布 于 2021-06-23 00:54:27
1.8K 0
发布 于 2021-06-23 00:54:27
举报

摄影:产品经理

某种贝类的肉

我们知道,HTTP请求的 POST 方式,提交上去的数据有很多种格式。例如 JSON / form-data / x-www-form-urlencoded 等等。我们在 Postman 的 POST 请求里面,可以看到这些数据格式,如下图所示:

虽然同样都是 POST 方式,但是有些网站只能使用特定的格式才能正常返回数据。我们来看一个例子,现在向网址: http://exercise.kingname.info/ajax_1_postbackend POST 提交一个 JSON 字符串: {“name”:”xx”,”age”:24} 可以正常得到返回:

但如果提交的数据格式不是 JSON,而是 form-data ,那么就会报错,如下图所示:

这也就是为什么在使用 requests 的时候,post 方法的第二个参数有 data= 和 json= 的区别,如下图所示:

在使用 Scrapy 的时候,很多人都知道怎么提交 GET 请求,但却不太清楚怎么提交 POST 请求。如果你在网上搜索,那么,你会看到有两种回答:

第一种回答,会建议你使用 scrapy.FormRequest 。但这个方法提交的数据是 form-data 格式,如果网站需要接收 JSON 格式的数据,那么提交就会失败。

第二种回答,会建议你使用 scrapy.Request(url, method='POST', body=json.dumps(xxx)) 。这种方式确实可以成功提交 JSON 数据,但写起来比较麻烦。

但如果你看过 Scrapy 的官方文档 Requests and Responses[1] ,你就会知道,实际上 Scrapy 原本就提供了一个专门用来POST 提交 JSON 数据的方式—— JsonRequest 。它的位置在 scrapy.http.JsonRequest 。并且使用起来跟 scrapy.Request 一样简单:

import scrapy
from scrapy.http import JsonRequest
class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['xxx.com']
    # start_urls = ['http://xxx.com/']
    def start_requests(self):
        body = {
            'name': 'kingname',
            'age': 28
        url = 'http://exercise.kingname.info/ajax_1_postbackend'
        yield JsonRequest(url, data=body, callback=self.parse)
 
推荐文章
豪情万千的乒乓球  ·  消除空白行^\s*\n,正则表达式-CSDN博客
1 年前
坏坏的麦片  ·  How to fix OSError: No wkhtmltopdf executable found: "b''" - Microsoft Q&A
1 年前
机灵的炒面  ·  如何设置Power BI切片器的默认值?_手机搜狐网
1 年前
讲道义的山羊  ·  linux源码解析-dup_task_struct函数_五癫的博客-CSDN博客
1 年前
稳重的树叶  ·  Web 自动化操作在运行时失败 - Power Automate | Microsoft Learn
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号