一、问题及解决:

在用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. tesseract系列(3) -- tesseract训练

    tessract的训练有个工具叫 jTessBoxEditor 1.jTessBoxEditor是用java写的,首先要装java的环境 jdk-8u191-windows-x64.exe 这个我想从 ...

  2. 量化投资_MATLAB在时间序列建模预测及程序代码

    1 ARMA时间序列机器特性 下面介绍一种重要的平稳时间序列——ARMA时间序列. ARMA时间序列分为三种: AR模型,auto regressiv model MA模型,moving averag ...

  3. ionic3 修改打包时 android sdk 路径

    修改 /platforms/android/local.properties 文件

  4. 代码审计中的SQL注入

    0x00 背景 SQL注入是一种常见Web漏洞,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.本文以代码审计的形式研 ...

  5. T-shirt

    题目描述 JSZKC is going to spend his vacation!  His vacation has N days. Each day, he can choose a T-shi ...

  6. Linux下安装mysql(yun方式)

    1.进入下载好的mysql版本 cd /usr/local/mysql 2.解压安装包 tar -xzvf mysql-5.7.11.tar.gz 3.改名 直接改或者 mv  文件名 要改的文件名m ...

  7. css样式表---样式表分类、选择器

    一.样式表分三类: 1.内联样式表.——放在元素的开始标记中.——只对当前元素起作用.<input name="txt" style="border:0px; bo ...

  8. python-django项目-每次重启电脑需要启动的虚拟机服务_20191124

    python-django项目-每次重启电脑需要启动的虚拟机服务 看来第一步是确定虚拟机的ip问题,必须要是192.168.100.128,否则很多的配置都不能用了, 所以要配置虚拟机的ip, 第一步 ...

  9. file,path,uri互相转换

    uri 转 file :File file = new File(new URI(uri.toString())); uri 转 path: Path path = Files.get(uri); f ...

  10. 密码子演化假说|凝固事件假说|立体化学假说|共进化假说|代谢途径相关性假说|四重兼并|假四重兼并|最小损伤原则|AU-rich|GC-rich|逐步进化假说|分子机制进化假说

    生命组学 将密码子表重排后发现,嘌呤嘧啶含量不同,密码子的氨基酸种类由第一二位决定,同时第三位变化大却没有蛋白质层面上实质性的改变,这说明第三位氨基酸是用于维持氨基酸组成不发生变化同时保证蛋白质稳定性 ...