上代码
import requests
import json
#请求地址
url="http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList"
#浏览器伪装
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36"
}
id_list=[]#存储企业id
all_data_list=[]#存储所有的企业详情数据
for page in range(1,10):#请求10页数据,可以请求360页
page=str(page)
data={#所有请求数据,在f12开发者工具中network-HXR-header
"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"])
print(id_list)
#获取企业的详情数据
post_url="http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById"
for id in id_list:
data={
"id":id
}
datail_json=requests.post(url=post_url,headers=headers,data=data).json()
all_data_list.append(datail_json)
#持久化存储
fp=open("./化妆品公司数据.json","w",encoding="utf-8")
json.dump(all_data_list,fp=fp,ensure_ascii=False,indent=True)
print("数据抓取完成!")
第一:浏览器请求地址
“scxk.nmpa.gov.cn:81/xk/itownet/…
网站页面:
爬取数据均属于公开数据,不存在违法行为!
直接在首页打开f12,network,HXR,header
浏览器伪装部分:
data={#所有请求数据,在f12开发者工具中network-HXR-header
"on":"true",
"page":page,
"pageSize":"15",
"productName":"",
"conditionType":"1",
"applyname":"",
"applysn":"",
}
异步请求的原理
浏览器把请求交给代理对象—XMLHttpRequest(绝大多数浏览器都内置了这个对象),由代理对象向服务器发起请求,接收、解析服务器响应的数据,并把数据更新到浏览器指定的控件上。从而实现了页面数据的局部刷新。
看这里每个企业的详情数据
我们再来对比每个企业的源代码中的请求数据到底哪里不一样
例如这里的第一个企业和第二个企业
第一个:
第二个:
看到了吗,每个企业都有一个专属id,我们要请求到每个企业的详情数据就必须拿到每个企业的专属id
post_url="http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById"
for id in id_list:
data={
"id":id
}
datail_json=requests.post(url=post_url,headers=headers,data=data).json()
all_data_list.append(datail_json)
这里的url地址就是详情页里的url地址
最后我们在对抓取的数据进行持久化储存
fp=open("./化妆品公司数据.json","w",encoding="utf-8")
json.dump(all_data_list,fp=fp,ensure_ascii=False,indent=True)
print("数据抓取完成!")
新手博主,请前辈批评指正———@丁一