1
import requests
if __name__=="__main__":
url='http://scxk.nmpa.gov.cn:81/xk/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome'
'/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'}
page_text=requests.get(url=url,headers=headers).text
with open('./huanzhuangin.html','w',encoding='utf-8') as fp:
fp.write(page_text)
-动态加载数据
-首页中对应的企业信息数据是通过ajax动态请求到的
-通过对详情页url的观察发现:
-url的域名是一样的,只有携带的参数不一样
-id值可以从首页对应的ajax请求到的json串中获取
-域名和id值拼接处一个完整的企业对应的详情页的url
-详情页的企业详情数据也是动态加载出来的
-所有的post请求的url都是一样的,只有参数的id值是不同
-获取多家id后,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求url
import requests
import json
if __name__=="__main__":
#批量获取不同企业的id值
url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
data={
'on': 'true',
'page':' 1',
'pageSize': '15',
'productName':'',
'conditionType': '1',
'applyname':'',
'applysn':'',
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome'
'/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'}
id_list=[]#存储id
all_data_list=[]#存储所有企业的详情数据
json_ids=requests.post(url=url,headers=headers,data=data).json()
for dic in json_ids['list']:
dic['ID']
id_list.append(dic['ID'])
print(id_list)#已批量获取id
#获取企业详情数据
post_url='http://scxk.nmpa.gov.cn: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,'end')
all_data_list.append(detail_json)
# 持久化存储
fp=open('./alldata.json','w',encoding='utf-8')
json.dump(all_data_list,fp=fp,ensure_ascii=False)
print("over")
注意:dump()里有个参数indent=True可以自动排版
Ctrl+Alt+L 格式化文档
3,
import requests
import json
if __name__=="__main__":
#批量获取不同企业的id值
url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome'
'/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'}
id_list = [] # 存储id
all_data_list = [] # 存储所有企业的详情数据
for page in range(1,6):
page=str(page)
data={
'on': 'true',
'page':' 1',
'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://scxk.nmpa.gov.cn: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,'end')
all_data_list.append(detail_json)
# 持久化存储
fp=open('./alldata.json','w',encoding='utf-8')
json.dump(all_data_list,fp=fp,ensure_ascii=False)
print("over")
总结:
requests模块:python中原生的一款基于网络请求的模块——模拟浏览器发送请求
urllib模块(比较古老)
–如何使用requests模块:
–①指定url
-UA伪装
-请求参数的处理(发起的请求携带了参数就需要处理)
②发起请求
③获取响应数据
④持久化存储