requests模块基础
什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块。功能强大,用法简洁高效。
为什么要是用requests模块
- 用以前的urllib模块需要手动处理url编码
- 手动处理post参数
- 处理cookie和代理操作繁琐
..............
requests模块
- 自动处理url编码
- 自动处理post参数
- 简化cookie和代理操作
...............
如何使用requests模块
-
- 安装:
- pip install requests
- 使用流程
- 指定url
- 基于requests模块发起请求
- 获取响应对象中的数据值
- 持久化存储
- 安装:
- 1、基于requests模块的get请求 需求:爬取搜狗指定词条搜索后的页面数据
-
1 import requests 2 #指定url 3 base_url = "https://www.sogou.com/web" 4 #搜索词条的关键字 5 query = { 6 "query":"python" 7 } 8 #模仿User-Agent(伪造电脑版本信息以及什么浏览器信息) 9 headers = { 10 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" 11 } 12 #requests.get(url, params=None, **kwargs),第一个是url地址,第二个关键字参数。 13 response = requests.get(url=base_url,params=query,headers=headers) 14 #因为发送的是get方式 所以返回的是一个字符串,即text可得相关html标签页 15 print(response.text)
-
2、基于requests模块ajax的get请求 需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据
-
1 import requests 2 url = "https://movie.douban.com/j/chart/top_list" 3 #根据需求取数据 4 start = input("enter start:") 5 limit = input("enter limt:") 6 #请求头里面的请求关键字 7 param = { 8 "type": "11", 9 "interval_id": "100:90", 10 "action": "", 11 "start": start, 12 "limit": limit, 13 } 14 #伪造机型和浏览器 15 headers = { 16 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36", 17 } 18 #开始get请求,因为是ajax的get方法所以请求应该是get 19 response = requests.get(url=url,params=param,headers=headers) 20 #返回的是一个json数据,因此要用json解析 21 print(response.json())
3、基于requests模块ajax的post请求 需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据
1 import requests 2 url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword" 3 #输入保存信息地点 4 keyword = input("enter a word:") 5 #请求头里面的请求关键字 6 for i in range(1,9): 7 data = { 8 "cname":"", 9 "pid": "", 10 "keyword": keyword, 11 "pageIndex": i, 12 "pageSize": "10", 13 } 14 #伪造机型和浏览器 15 headers = { 16 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36", 17 } 18 #因为是ajax的post方法所以post请求 19 response = requests.post(url=url,data=data,headers=headers) 20 #响应的是一个text数据,因此要用text解析 21 fileName = str(i)+".txt" 22 with open(fileName,"w",encoding="utf8") as f: 23 f.write(response.text)
显示文件有:
4、综合练习 需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据http://125.35.6.84:81/xk/
1 import requests 2 3 url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList" 4 ID_list = [] 5 # 伪造机型和浏览器 6 headers = { 7 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36", 8 } 9 for i in range(1,16): 10 data = { 11 "on": "true", 12 "page": i, 13 "pageSize": "15", 14 "productName": "", 15 "conditionType": "1", 16 "applyname": "", 17 "applysn": "", 18 } 19 20 #因为是ajax的post方法所以post请求 21 response = requests.post(url=url,data=data,headers=headers).json() 22 23 ID_list.append(response["list"][0]["ID"]) 24 base_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById" 25 for i in ID_list: 26 data = { 27 "id": i, 28 } 29 # 响应的是一个json数据,因此要用json解析 30 response = requests.post(url=base_url,data=data,headers=headers) 31 print(response.json())
Jupyter notebook应该是库出问题了,找了很久都没弄到原因,还一直以为自己代码出现问题了。换到pycharm成功运行