一、问题及解决:

在用scrapy发送post请求时,把发送方式弄错了。

本来应该是 application/x-www-form-urlencoded  弄成了application/json。

但需要改两部分:body传入字典的构造方式和header的Content-Type内容

请求截图:

代码部分:(红色部分是原来错误的代码,绿色的是修改正确的,黄色是修改的地方)

二、POST传参方式的说明及scrapy和requests实现:

1、application/x-www-form-urlencoded

如果不设置Content-type,默认为该方式,提交的数据按照 key1=val1&key2=val2 的方式进行编码。

  • requests :
# -*- encoding:UTF-8 -*-
import requests
import sys # 根据python版本,引入包
if sys.version_info[0] > 2:
from urllib.parse import urlencode
else:
from urllib import urlencode url = "http://xxxx.com"
payload_dict = {'aaa': ''}
data = urlencode(payload_dict)
headers = {'Content-Type': "application/x-www-form-urlencoded"} response = requests.request("POST", url, data=payload_dict, headers=headers)
print(response.text)
  • scrapy:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sysif sys.version_info[0] > 2:
from urllib.parse import urlencode
else:
from urllib import urlencode payload_dict = {'page': 1} # 使用普通request方法,需要将数据的字典进行url编码,传入body
yield scrapy.Request(url=url,
method='POST',
body=urlencode(payload_dict),
headers={'Content-Type': 'application/x-www-form-urlencoded'},
callback=self.parse,
dont_filter=True) # 使用scrapy自带的post请求方法,将字典直接传入formdata,默认会对其进行编码
yield scrapy.FormRequest(url=i,
method='POST',
formdata=payload_dict,
headers={'Content-Type': 'application/x-www-form-urlencoded'},
callback=self.parse)

2、application/json:

请求所需参数以json的数据格式写入body中,后台也以json格式进行解析。

  • requests
# -*- encoding:UTF-8 -*-
import requests
import json url = "https://xxxx.com"
# 需要发送的参数
payload = {'page': 1, 'branch': 'guide'}
headers = {'Content-Type': "application/json"} # 将参数转为json格式传入
response = requests.request("POST", url, data=json.dumps(payload_dict), headers=headers)
print(response.json())
  • scrapy
# -*- coding: utf-8 -*-
import json
import scrapy data_raw = {
"query": "coronavirus ",
"queryExpression": "",
"filters": [
"Y>=1978",
"Y<=1978"
],
"orderBy": 0,
"skip": 0,
"sortAscending": 'true',
"take": 10,
"includeCitationContexts": 'true',
"profileId": ""
} url = 'https://academic.microsoft.com/api/search' # body传入json格式参数
yield Request(url, method="POST", body=json.dumps(data_raw),
headers={'Content-Type': 'application/json'},
callback=self.parse)

3、multipart/form-data:用于上传表单位文件。

4、text/xml:现在基本不用( 因为XML 结构过于臃肿,一般场景用 JSON 会更灵活方便)。

scrapy post payload的坑及相关知识的补充【POST传参方式的说明及scrapy和requests实现】的更多相关文章

  1. 爬虫scrapy组件 请求传参,post请求,中间件

    post请求 在scrapy组件使用post请求需要调用 def start_requests(self): 进行传参再回到 yield scrapy.FormRequest(url=url,form ...

  2. body传参?parameter传参?Request Payload?Query String Parameter?

    今天,是有委屈的一天:今天,是有小情绪的一天.所以,我们要对今天进行小结,跟它做一个了断! 今天,后端来一个接口,告诉我"要用post请求,parameter形式传参".over. ...

  3. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  4. 二、python框架相关知识体系

    Django框架 1.django框架.flask框架和Tornado框架的区别? django框架,内置组件多,自身功能强大,是一个大而全的框架,ORM.Admin.中间件.Form.ModelFr ...

  5. 一张思维导图带你梳理HashMap相关知识

    HashMap可以说是java中最常见也是最重要的key-value存储结构类,很多程序员可能经常用,但是不一定清楚这个类背后的数据结构和相关操作原理,为了复习HashMap相关的知识,今天花了一天的 ...

  6. 微信小程序必知相关知识

    微信小程序必知相关知识 1 请谈谈微信小程序主要目录和文件的作用? project.config.json 项目配置文件,用得最多的就是配置是否开启https校验: App.js 设置一些全局的基础数 ...

  7. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  8. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  9. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

随机推荐

  1. EXAM-2018-8-9

    EXAM-2018-8-9 B 水题 注意理解题意 有坑 G 博弈 观察发现 总是会进行到最后两个,或者先手取完全部,再特判一下只有一张牌的情况 H 九连环 通过找规律 我们可以得出递推式: F[n] ...

  2. git的命令操作指南

    Git图形化界面我用的还可以,但是命令就不太会了,索性和大家一起学习下Git命令的用法...一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. fetch ...

  3. 从二叉搜索树到AVL树再到红黑树 B树

    这几种树都属于数据结构中较为复杂的,在平时面试中,经常会问理解用法,但一般不会问具体的实现,所以今天来梳理一下这几种树之间的区别与联系,感谢知乎用户@Cailiang,这篇文章参考了他的专栏. 二叉查 ...

  4. C++ this指针详解(精辟)

    this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员. 所谓当前对象,是指正在使用的对象.例如对于stu.show();,stu 就是当前 ...

  5. deeplearning.ai 神经网络和深度学习 week1 深度学习概论

    1. 预测房价.广告点击率:典型的神经网络,standard NN. 图像:卷积神经网络,CNN. 一维序列数据,如音频,翻译:循环神经网络,RNN. 无人驾驶,涉及到图像.雷达等更多的数据类型:混合 ...

  6. 简单说说PHP优化

    我们在编写程序时,总是想要使自己的程序占用资源最小,运行速度更快,代码量更少.往往我们在追求这些的同时却失去了很多东西.下面我想讲讲我对PHP优化的理解.优化的目的是花最少的代价换来最快的运行速度与最 ...

  7. 深入JVM内核--GC参数

    堆 GC参数 - 串行收集器 最古老,最稳定 效率高 可能会产生较长的停顿 -XX:+UseSerialGC 新生代.老年代使用串行回收 新生代复制算法 老年代标记-压缩 0.844: [GC 0.8 ...

  8. HLS图像处理总结(一)

    HLS工具 以个人的理解,xilinx将HLS(高层次综合)定位于更方便的将复杂算法转化为硬件语言,通过添加某些配置条件HLS工具可以把可并行化的C/C++的代码转化为vhdl或verilog,相比于 ...

  9. webservice入门程序学习中经验总结

    ***第一步:创建客户端服务 1)创建一个服务接口 2)创建一个实现类实现接口 3)创建一个方法开启服务 这三步注意点:::实现类上必须添加@WebService标签 :::发布服务的时候用到的函数是 ...

  10. 3DSMAX 卸载工具,完美彻底卸载清除干净3dsmax各种残留注册表和文件

    一些同学安装3dsmax出错了,也有时候想重新安装3dsmax的时候会出现这种本电脑已安装3dsmax,你要是不留意直接安装,只会安装3dsmax的附件,3dsmax是不会安装上的.这种原因呢就是大家 ...