基于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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
用Python制作简单的钢琴程序的教程
Apr 01 Python
Python爬虫抓取手机APP的传输数据
Jan 22 Python
virtualenv实现多个版本Python共存
Aug 21 Python
详解Python中的正则表达式
Jul 08 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
Python实现代码统计工具
Sep 19 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
tensorflow 模型权重导出实例
Jan 24 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 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
德生PL660的电路分析和打磨
2021/03/02 无线电
使PHP自定义函数返回多个值
2006/11/26 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
php报错502badgateway解决方法
2019/10/11 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
python实现的防DDoS脚本
2011/02/08 Python
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
python迭代器实例简析
2014/09/25 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
python实现最速下降法
2020/03/24 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
商务专员岗位职责
2013/11/23 职场文书
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
通信生自我鉴定
2014/01/18 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
给校长的建议书200字
2014/05/16 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android