Scrapy 如何正确发送 POST请求 获取到响应数据的三种写法

2023-10-27

问题描述:

碰到了使用

    data = {"pageNo":1,"pageSize":100,"tableName":equal,"projectType":"G1","publishTimeStart":"","areaCode":"","title":"","publishTimeEnd":"","mode":""}
    response = requests.post(url, json=data)
    print(response.text)

    json_list = json.loads(response.text)
    data = json_list.get('data')
    rows = data.get('list')

这种情况,scrapy写post请求的时候 一时未成功取值

问题解决:

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

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

yield scrapy.FormRequest(
        url,
        formdata=data,
        callback=self.parse
      )

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


     yield scrapy.Request(
          url,
          method='POST',
          body=json.dumps(data),
          callback=self.parse

      )

但如果你看过 Scrapy 的官方文档(https://doc.scrapy.org/en/latest/topics/request-response.html#jsonrequest),你就会知道,实际上 Scrapy 原本就提供了一个专门用来POST 提交 JSON 数据的方式——JsonRequest。它的位置在scrapy.http.JsonRequest。并且使用起来跟 scrapy.Request一样简单:

ata = {
    'name1': 'value1',
    'name2': 'value2',
}
yield JsonRequest(
    url='http://www.example.com/post/action', 
    data=data
)

实际实现写法

data = {
     "pageNo": i,
     "pageSize": 100,
     "tableName": equal,
     "projectType": "G1",
     "publishTimeStart": "",
     "areaCode": "",
     "title": "",
     "publishTimeEnd": "",
     "mode": ""
 }

 yield JsonRequest(
     url,
     callback=self.parse,
     data=data,
     meta={
        'equal':  equal
     }
 )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scrapy 如何正确发送 POST请求 获取到响应数据的三种写法 的相关文章

随机推荐

  • FortiGate下用户访问特定网址不通

    1 现状 如图 上网行为管理和防火墙控制用户的数据访问 到外网的出口链路有2条 联通的和电信的 其中联通的优先级较高 2 现象 用户访问www xxxxbbs com不通 3 分析 在上网行为管理上做源和目前地址排除 发现仍不能访问排除了上
  • ERP为什么在生产制造环节应用效果不理想?

    ERP在生产制造环节应用效果不理想的根本原因是ERP负责的是宏观管控 而生产制造环节应该使用MES来进行精细化管理 下面就详细讨论下 生产制造环节发生在工厂 工厂可以没有ERP 但如果要用系统 必定是MES系统 ERP是为企业服务的 MES
  • 学习汇编语言MASM笔记1

    关于源程序书写格式 太基础的略去 只记录一些我还不熟悉的内容 参考https wenku baidu com view 7ca70e0ef342336c1eb91a37f111f18582d00c5d html 其他网页的参考以挂上相关连接
  • Flutter 踩坑TabBar之TabController.addListener

    一 问题 之前提到TabBar的第二种实现方式 TabController是有坑的 问题 这个监听在点击切换tab的时候会回调两次 左右滑动切换tab正常调用一次 二 原因 点击切换tab的时候执行了一个动画效果 滑动切换的时候是没有的 在
  • 用JAVA写的一个自动化简单示例!

    public class lianxi public static void main String args throws InterruptedException System getProperty webDriver firefox
  • 2022-03-24 RK3566 MIPI屏 调试记录,panel-init-sequence 命令格式介绍

    一 Single channel mipi屏的硬件连接如下 二 根据屏厂给的初始化代码配置dts了 屏厂给的初始化代码分几种形式 这个文章里面RK PX30 android8 1的mipi屏调试 要不要买菜 的博客 CSDN博客 有比较详细
  • Ubuntu20.04(linux)离线安装nacos

    一 解压 1 首先local目录得有nacos server 2 0 4 tar gz包 切换目录cd usr local执行以下命令 tar zxvf nacos server 2 0 4 tar gz 二 创建nacos service
  • postgresql安装及常见错误处理

    postgresql安装及常见错误处理 一 安装说明 最近 由于业务需要 我抛弃了一直使用的mysql数据库 开始转向postgresql数据库 至于为什么选择postgresql 肯定是postgresql比mysql更强大 对于post
  • DECORATOR 装饰模式

    DECORATOR 装饰模式 对象结构性模式 1 意图 动态地给一个对象增加一些额外的职责 就增加功能来说 Decorator模式相比生成子类更为灵活 2 别名 包装器Wrapper 3 动机 有时我们希望给某对象而不是整个类添加一些功能
  • UnityVR--机械臂场景9-简单流水线应用1

    目录 一 整体介绍 二 准备工作 三 建立流水线 1 流水线包含的功能 2 流水线的代码结构 3 场景实现 4 测试运行 一 整体介绍 流水线是在空间和时间上合理安排和组织工艺线路的一种形式 它涉及到一种或多种生产设备 传感器 物料传输设备
  • 字符串 最长公共前缀

    LC 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 输入 strs flower flow flight 输出 fl swift 实现 class ViewController UIViewC
  • Google Chrome浏览器的Cookies文件找不到问题

    一 问题 有个每天执行的Python代码 会自动获取Google Chrome浏览器的Cookie来访问网站数据 具体相关实现思路 获取chrome80谷歌浏览器存储的指定网站Cookie数据方法详解 报错信息如下 Exception Co
  • Spring中的IOC容器必须要了解的一些概念

    文章目录 Spring中的IOC容器必须要了解的一些概念 a SpringIOC容器意义 b 怎样往Spring的IOC容器里面存储对象 c 怎样从SpringIOC容器中取对象 d 如果对象的属性是对象类型 那么要怎么给对象的属性赋值呢
  • macOS通过钥匙串访问找回WiFi密码

    如果您忘记了Mac电脑上的WiFi密码 可以通过钥匙串访问来找回它 具体步骤如下 1 打开Mac电脑的 启动台 然后在其他文件中找到 钥匙串访问 2 运行 钥匙串访问 应用程序 点击左侧的 系统 然后在右侧找到要查看的WiFi网络名称 如果
  • 蓝桥杯 试题 算法训练 拿金币 C++ 详解

    题目 有一个N x N的方格 每一个格子都有一些金币 只要站在格子里就能拿到里面的金币 你站在最左上角的格子里 每次可以从一个格子走到它右边或下边的格子里 请问如何走才能拿到最多的金币 前言 请先阅读以下两篇文章 https blog cs
  • SPI机制

    1 概念 spi全称为 Service Provider Interface 是JDK内置的一种服务提供发现机制 SPI是一种动态替换发现的机制 一种解耦非常优秀的思想 它是jdk提供给 服务提供厂商 或者 插件开发者 使用的接口 是一种扩
  • scrapy模拟点击

    lua click function main splash args assert splash go args url assert splash wait 0 5 local form splash select buttonId f
  • CDH配置显示计算机错误,CDH常见问题及解决方法(待续)

    启动CDH提示Deploy Client configuration fail 原因 依赖包perl未安装 yum install y perl 自用脚本中的yum操作所需依赖包 仅做参考 yum Cy install wget bind
  • 二维字符数组利用gets()函数输入

    举例 char a 10 81 for int i 0 i lt 10 i gets a i a是二维字符数组的数组名 相当于一维数组的指针 所以a i 就相当于指向第i个数组的指针 类型就相当于char 相当于字符串 转载于 https
  • Scrapy 如何正确发送 POST请求 获取到响应数据的三种写法

    问题描述 碰到了使用 data pageNo 1 pageSize 100 tableName equal projectType G1 publishTimeStart areaCode title publishTimeEnd mode