Request
requests模块
- urllib模块
- requests模块
requests模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率杉作用:模拟浏览器发请求。
使用方式(requests模块的编码流程):
- 指定url
- 发起请求
- 获取响应数据一持久化存储
环境安装:pip install requests
常规流程
import requests
# 指定url
url = 'https://cn.bing.com/'
# 发起请求
r = requests.get(url)
# 获取相应数据
page_data = r.text
print(page_data)
# 数据存储
with open('./bing.html','w',encoding='utf-8') as f:
f.write(page_data)
实战巩固
获取指定词条对应的搜索结果页面(简易网页采集器)
- UA:UserAaent(请求载体的身份标识)
- UA伪装:门户网站的服务器佘检测对应请求的载体身份标识。如果检测到请求的载体身份标识不是浏览器一般拒绝访问,我们可以修改UA让服务器认为
def getdata(keyword):
# 指定url https://cn.bing.com/search?q=
url = f'https://cn.bing.com/search?'
# UA伪装
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29"
}
#处理url所带的参数,封装到字典
param = {
'q':keyword
}
# 发起请求,带3参数
r = requests.get(url = url,params=param,headers = headers)
# 获取相应数据
page_data = r.text
print(page_data)
# 数据存储
with open(f'{
keyword}.html','w',encoding='utf-8') as f:
f.write(page_data)
if __name__ == '__main__':
keyword = input("输入想要搜索的内容")
getdata(keyword)
破解百度翻译
-
其信息由ajax请求得到,动态获取,同样发送请求
import requests
def getdata(keyword):
# 指定url https://cn.bing.com/search?q=
post_url = 'https://fanyi.baidu.com/sug'
# UA伪装
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29"
}
#处理url所带的参数,封装到字典
data = {
'kw':keyword
}
# 发起请求,带3参数
r = requests.post(url = post_url,data=data,headers = headers)
# 获取相应json格式数据
jsdata = r.json()
print(jsdata)
# 数据存储
with open(f'{
keyword}.json','w',encoding='utf-8') as f:
json.dump(jsdata,fp=f,ensure_ascii=False)
if __name__ == '__main__':
keyword = input("输入想要翻译的内容")
getdata(keyword)
获取豆瓣电影分类排行榜中的电影详情数据
-
通过请求后端接口而非网页获取返回的json列表
import json
import requests
def getdata():
# 指定url 请求网址: https://movie.douban.com/j/chart/top_list?type=4&interval_id=100%3A90&action=&start=0&limit=1
post_url = 'https://movie.douban.com/j/chart/top_list'
# UA伪装
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29"
}
# 处理url所带的参数,封装到字典 type类型 4为历史 start获得元素起始点 limit限制,相当于获取元素终点
param = {
'type': 4,
'interval_id': '100:90',
'action': '',
'start': 0,
'limit': 20
}
# 发起请求,带3参数
r = requests.get(url=post_url, params=param, headers=headers)
# 获取相应json格式数据
lidata = r.json()
print(lidata)
# 数据存储
with open('douban.json', 'w', encoding='utf-8') as f:
json.dump(lidata, fp=f, ensure_ascii=False)
if __name__ == '__main__':
getdata()
获取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据
-
本页面的数据是动态加载出来的,不能直接通过url请求得到,由Ajax请求得到
-
而企业的详情界面
http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=af4832c505b749dea76e22a193f873c6
中id值恰为json中返回的id值 -
发送ajax请求时附带的表单数据
import json
import requests
def getdata():
# 指定url 请求网址: http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList
post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
# UA伪装
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29"
}
listid = []
msges = []
# 设置翻页
for page in range(1,6):
# 处理url请求附带的表单数据
data = {
'on': 'true',
'page': page,
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': ''
}
# 发起请求,带3参数
r = requests.post(url=post_url, headers=header,data=data)
# 获取相应json格式数据,返回的是一个字典形式
dictdata = r.json()
# 从字典中取出list企业列表对应的值
lidata = dictdata['list']
# 从企业列表列表中选出ID
for item in lidata:
listid.append(item['ID'])
print(listid)
for id in listid:
# 指定url 请求网址: 请求网址: http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById
post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
# 表单数据
data = {
'id': id
}
# 发起请求,带3参数
msg = requests.post(url=post_url, headers=header, data=data).json()
print(msg)
msges.append(msg)
with open("企业.json",'w',encoding='utf-8') as f:
json.dump(msges,fp = f,ensure_ascii=False)
if __name__ == '__main__':
getdata()