问题描述:
利用python来爬取药监总局所列化妆品公司详细信息
问题分析:
分析网页发现,在http://scxk.nmpa.gov.cn:81/xk/页面以分页的形式展示了所有化妆品公司。
#1.其化妆品公司的数据并非通过上述网址获取的,而是页面通过http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList发送
#ajax请求获取的
#2.我们要获取的是化妆品公司的详细信息,点入一个公司链接,分析发现其详细信息也是通过ajax请求获取的,其中以每个公司不同的ID来区别获取详细信息 #3.我们要获取的是所有化妆品公司信息,因此需要实现分页获取
#4.如何取得所有公司的具体ID号
#5持久化存储,此处我是把内容分别以json格式存储和存入到excel表格中
import csv
import requests
import json
#该案例是来爬取药监总局所列化妆品公司详细信息
#分析网页发现,在http://scxk.nmpa.gov.cn:81/xk/页面以分页的形式展示了所有化妆品公司,
#1.其化妆品公司的数据并非通过上述网址获取的,而是页面通过http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList发送
#ajax请求获取的
#2.我们要获取的是化妆品公司的详细信息,点入一个公司链接,分析发现其详细信息也是通过ajax请求获取的,其中以每个公司不同的ID来区别获取详细信息
#3.我们要获取的是所有化妆品公司信息,因此需要实现分页获取
#4.如何取得所有公司的具体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/85.0.4183.83 Safari/537.36"
}
id_list=[]
for i in range(1,10): #获取多页数据
param={
'on': 'true',
'page': i,
'pageSize': '15',
'productName':'',
'conditionType': '1',
'applyname':'',
'applysn':''
}
response=requests.post(url=url,params=param,headers=Headers)
dict_obj=response.json()
for dict in dict_obj['list']:
id_list.append(dict['ID']) #获取企业id号,并且存入到id_list集合中
urls = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById"
#持久化存储
#用于把数据存储到excel表格中
out = open('demo4.csv', 'a', newline='')
csv_write = csv.writer(out, dialect='excel')
dict_details=[]
for id in id_list: #遍历id,通过id获取详细信息,并把信息存入到dict_details集合中
data={
'id': id
}
response = requests.post(url=urls,headers=Headers,data=data).json()
epsName=response['epsName'] #只是展示效果,因此这里只选择了两项信息进行写入表格
businessPerson=response['businessPerson']
j_str = (str(epsName),str(businessPerson))
csv_write.writerow(j_str)
dict_details.append(response)
fb=open('./demo4.json','w',encoding='utf-8')
json.dump(dict_details,fp=fb,ensure_ascii=False)
print('over!!!')
结果展示: