requests模块基础
requests模块
- urllib模块
- requests模块
-
概念:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。
-
作用:模拟浏览器发请求。
如何使用:(requests模块的编码流程)
- 指定url
- UA伪装
- 请求参数的处理
- 发起请求
- 获取响应数据
- 持久化存储
安装
pip install requests
实战巩固
- 需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)
- UA检测
- UA伪装
- 需求:破解百度翻译
- post请求(携带了参数)
- 响应数据是一组json数据
- 需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据
http://125.35.6.84:81/xk/
- 动态加载数据
- 首页中对应的企业信息数据是通过ajax动态请求到的。http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=e6c1aa332b274282b04659a6ea30430a
http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=f63f61fe04684c46a016a45eac8754fe
- 通过对详情页url的观察发现:
- url的域名都是一样的,只有携带的参数(id)不一样
- id值可以从首页对应的ajax请求到的json串中获取
- 域名和id值拼接处一个完整的企业对应的详情页的url
- 详情页的企业详情数据也是动态加载出来的
- http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
- http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
- 观察后发现:
- 所有的post请求的url都是一样的,只有参数id值是不同。
- 如果我们可以批量获取多家企业的id后,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求的url -
#!/usr/bin/env python # -*- coding:utf-8 -*- import requests import json if __name__ == "__main__": headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36' } id_list = [] # 存储企业的id all_data_list = [] # 存储所有的企业详情数据 #批量获取不同企业的id值 url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' #参数的封装 for page in range(1,6): page = str(page) data = { 'on': 'true', 'page': page, 'pageSize': '15', 'productName':'', 'conditionType': '1', 'applyname':'', 'applysn':'', } json_ids = requests.post(url=url,headers=headers,data=data).json() for dic in json_ids['list']: id_list.append(dic['ID']) #获取企业详情数据 post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById' for id in id_list: data = { 'id':id } detail_json = requests.post(url=post_url,headers=headers,data=data).json() # print(detail_json,'-------------ending-----------') all_data_list.append(detail_json) #持久化存储all_data_list fp = open('./allData.json','w',encoding='utf-8') json.dump(all_data_list,fp=fp,ensure_ascii=False) print('over!!!')
- 需求:豆瓣电影爬取
-
#!/usr/bin/env python # -*- coding:utf-8 -*- import requests import json if __name__ == "__main__": url = 'https://movie.douban.com/j/chart/top_list' param = { 'type': '24', 'interval_id': '100:90', 'action':'', 'start': '0',#从库中的第几部电影去取 'limit': '20',#一次取出的个数 } headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36' } response = requests.get(url=url,params=param,headers=headers) list_data = response.json() fp = open('./douban.json','w',encoding='utf-8') json.dump(list_data,fp=fp,ensure_ascii=False) print('over!!!')