基于Python的Post请求数据爬取的方法详解


Posted in Python onJune 14, 2019

为什么做这个

和同学聊天,他想爬取一个网站的post请求

观察

该网站的post请求参数有两种类型:(1)参数体放在了query中,即url拼接参数(2)body中要加入一个空的json对象,关于为什么要加入空的json对象,猜测原因为反爬虫。既有query参数又有空对象体的body参数是一件脑洞很大的事情。
一开始先在 apizza网站 上了做了相关实验才发现上面这个规律的,并发现该网站的请求参数要为raw形式,要是直接写代码找规律不是一件容易的事情。

源码

import requests
import json
headers = {
    'Accept':'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With':'XMLHttpRequest',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
    'Content-Type':'application/json',
    'Accept-Encoding':'gzip, deflate',
    'Accept-Language':'zh-CN,zh;q=0.8',
    'Cache-Control':'no-cache',
  }
#空的对象,body参数
data = {}
data = json.dumps(data)
page = 0
url = '网站地址,后面为参数?param1=1¶m1='+str(page)
response = requests.post(url = url,data=data ,headers =headers )
print(response.url)
print(response.text)

总结

  • 现在相关工具中发现现象
  • 请求方式确定:post还是get或者其它
  • 参数类型:form-data还是raw或者其它
  • 参数位置:若是post请求,在query中还是body中,还是二者皆有

ps:python requests 发起http POST 请求

python requests 发起http POST 请求,带参数,带请求头:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
url = 'http://official-account/app/messages/group'
body = {"type": "text", "content": "测试文本", "tag_id": "20717"}
headers = {'content-type': "application/json", 'Authorization': 'APP appid = 4abf1a,token = 9480295ab2e2eddb8'}
#print type(body)
#print type(json.dumps(body))
# 这里有个细节,如果body需要json形式的话,需要做处理
# 可以是data = json.dumps(body)
response = requests.post(url, data = json.dumps(body), headers = headers)
# 也可以直接将data字段换成json字段,2.4.3版本之后支持
# response = requests.post(url, json = body, headers = headers)
# 返回信息
print response.text
# 返回响应头
print response.status_code

总结

以上所述是小编给大家介绍的基于Python的Post请求数据爬取的方法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python下如何让web元素的生成更简单的分析
Jul 17 Python
利用python获得时间的实例说明
Mar 25 Python
python使用cookielib库示例分享
Mar 03 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
浅析Python函数式编程
Oct 06 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
Python如何给函数库增加日志功能
Aug 04 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 #Python
Python中py文件转换成exe可执行文件的方法
Jun 14 #Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 #Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 #Python
Python Tkinter 简单登录界面的实现
Jun 14 #Python
python tkinter实现界面切换的示例代码
Jun 14 #Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 #Python
You might like
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
微信小程序实现购物车小功能
2020/12/30 Javascript
python和bash统计CPU利用率的方法
2015/07/10 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
python实现静态web服务器
2019/09/03 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
wxpython布局的实现方法
2019/11/01 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
用python批量下载apk
2020/12/29 Python
倡议书格式
2014/08/30 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
导游词之山海关
2019/12/10 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
python读取mnist数据集方法案例详解
2021/09/04 Python
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
sql server 累计求和实现代码
2022/02/28 SQL Server
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers