基于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函数帮助查询小工具
Mar 13 Python
python中的二维列表实例详解
Jun 19 Python
Python 生成 -1~1 之间的随机数矩阵方法
Aug 04 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
python标准库OS模块详解
Mar 10 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
上帝为你开了一扇窗之Tkinter常用函数详解
Jun 02 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数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
PHP7新特性
2021/03/09 PHP
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
require.js中的define函数详解
2017/07/10 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
Python程序设计入门(3)数组的使用
2014/06/16 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python 编程速成(推荐)
2019/04/15 Python
python实现简单图书管理系统
2019/11/22 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
七夕情人节促销方案
2014/06/07 职场文书
个人学习总结范文
2015/02/15 职场文书
员工工作表扬信
2015/05/05 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
寒假致家长的一封信
2015/10/10 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers