爬虫

主要介绍python3爬虫中requests库中的两种请求方式get与post,背刺主要介绍post请求如何配置参数。

  1. get请求

get请求比较简单,直接调用requests库中的get函数即可,即:





javascript post请求 附带 raw post请求url带参数_post 请求带参数


  1. post请求

在post请求中需要配置两种参数:请求头(不是必须的,get请求也可以添加,有些时候必须加),数据类型(不是返回的json数据结构,而是通过抓包得到的json数据)。

以湖南招标网的网址:

http://www.ccgphunan.gov.cn/page/notice/moreCityCounty.jsp?prcmMode=01为例。将该网址复制到浏览器,并打开,如下界面:


javascript post请求 附带 raw post请求url带参数_axios get请求带参数_02


按F12进行抓包,是否存在返回json格式的数据接口,通过按下一页捕捉带有页面的接口,如下界面:


javascript post请求 附带 raw post请求url带参数_curl get请求传递参数_03


我们通过抓包发现,左下角第二网址

http://www.ccgphunan.gov.cn/mvc/getNoticeListOfCityCounty.do返回的数据(点击Response,右下角任务栏中)是当前页的json格式的数据,但是不管怎么翻页,该网址任然不变,说明该请求最有可能为post请求,因此,查看右下角任务栏中Headers,如下图:


javascript post请求 附带 raw post请求url带参数_axios get请求带参数_04


确定为post请求后,构建请求参数。

  1. Headers的构建

首先构建请求头header,如下图,点击右下角任务栏中的Headers,然后找到Requests Headers,将其下面的数据构建成字典,并命名为headers。


javascript post请求 附带 raw post请求url带参数_okhttp post json 数据_05

javascript post请求 附带 raw post请求url带参数_okhttp post json 数据_06


如上图,以Requests Headers下面的数据构建一个字典类型数据,如下:


javascript post请求 附带 raw post请求url带参数_date转timestamp格式_07


如上图,有些参数是没有用的,可以删掉(通过请求测试);

  1. data的构建(请求中添加的json格式数据)

首先同样找到右下角任务栏中的Headers,点击,找到下面的Form Data,将Form Data中数据粘出来构建成json数据data(传入请求的必须为json格个式数据)。如下图Form Data:


javascript post请求 附带 raw post请求url带参数_axios get请求带参数_08


(1)方式一:

将上图中的数据拷贝出来并构建json格式的数据如下:

javascript post请求 附带 raw post请求url带参数_axios get请求带参数_09


其中为空的字段,以空字符为主,不能写成null,如上pType等;

(2)方法二 获取data
开始请求网页获取数据,如下:


javascript post请求 附带 raw post请求url带参数_okhttp post json 数据_10


点击后得到如下图所示的Data,类似于网址:


javascript post请求 附带 raw post请求url带参数_okhttp post json 数据_11


将上图中的form data拷贝出来作为字符串赋值给data,如下:


javascript post请求 附带 raw post请求url带参数_date转timestamp格式_12


  1. 构建请求,并获取数据


javascript post请求 附带 raw post请求url带参数_post 请求带参数_13


得到如下的json数据:

[ {'RN': 37, 'NOTICE_NAME': '采购公告', 'NOTICE_CATEGORY_CODE': '02', 'PRCM_PLAN_ID': -1, 'PRCM_MODE_CODE': '01', 'PRCM_MODE_CODE1': '01', 'DEPT_ID': None, 'AREA_ID': 116, 'AREA_NAME': '会同县', 'NOTICE_ID': 1000619876, 'ORG_CODE': None, 'PRCM_MODE_NAME': '公开招标', 'NOTICE_TITLE': '会同县老旧小区改造项目标识标牌制作', 'NOTICE_TYPE_NAME': '公开招标公告', 'NEWWORK_DATE': '2020-05-15', 'NEWWORK_DATE_ALL': {'date': 15, 'day': 5, 'hours': 15, 'minutes': 26, 'month': 4, 'nanos': 0, 'seconds': 0, 'time': 1589527560000, 'timezoneOffset': -480, 'year': 120}, 'SRC_CODE': '2'},

{'RN': 38, 'NOTICE_NAME': '终止公告', 'NOTICE_CATEGORY_CODE': '05', 'PRCM_PLAN_ID': -1, 'PRCM_MODE_CODE': '01', 'PRCM_MODE_CODE1': None, 'DEPT_ID': None, 'AREA_ID': 34, 'AREA_NAME': '衡阳县', 'NOTICE_ID': 1000619864, 'ORG_CODE': None, 'PRCM_MODE_NAME': '公开招标', 'NOTICE_TITLE': '衡阳县人民医院布草洗涤租赁服务租赁服务租凭政府采购项目', 'NOTICE_TYPE_NAME': '终止公告', 'NEWWORK_DATE': '2020-05-15', 'NEWWORK_DATE_ALL': {'date': 15, 'day': 5, 'hours': 15, 'minutes': 25, 'month': 4, 'nanos': 0, 'seconds': 21, 'time': 1589527521000, 'timezoneOffset': -480, 'year': 120}, 'SRC_CODE': '2'},

。。。。

{'RN': 54, 'NOTICE_NAME': '更正公告', 'NOTICE_CATEGORY_CODE': '04', 'PRCM_PLAN_ID': -1, 'PRCM_MODE_CODE': '01', 'PRCM_MODE_CODE1': None, 'DEPT_ID': None, 'AREA_ID': 42, 'AREA_NAME': '双清区', 'NOTICE_ID': 1000618967, 'ORG_CODE': None, 'PRCM_MODE_NAME': '公开招标', 'NOTICE_TITLE': '邵阳市双清区教育系统技防建设项目', 'NOTICE_TYPE_NAME': '更正公告', 'NEWWORK_DATE': '2020-05-15', 'NEWWORK_DATE_ALL': {'date': 15, 'day': 5, 'hours': 11, 'minutes': 31, 'month': 4, 'nanos': 0, 'seconds': 20, 'time': 1589513480000, 'timezoneOffset': -480, 'year': 120}, 'SRC_CODE': '2'}

]

注:FormData和Payload是浏览器传输给接口的两种格式,这两种方式浏览器是通过Content-Type来进行区分的(了解Content-Type),如果是 application/x-www-form-urlencoded的话,则为formdata方式,如果是application/json或multipart/form-data的话,则为 request payload的方式

  1. post请求转get请求

将post请求的接口与formData进行拼接; 如:

post接口:

http://www.ccgpyunnan.gov.cn/bulletin.do?method=moreListQuery

formData以字符串的形式拼接到网址后, 如:

current=2&rowCount=1000&searchPhrase=&query_sign=1

拼接后的get请求网址如下:

http://www.ccgpyunnan.gov.cn/bulletin.do?method=moreListQuery&current=2&rowCount=1000&searchPhrase=&query_sign=1