爬取食品药监局首页企业详情数据(一)

 学习Python爬虫的第二题,今天这个比较有难度,因为首页和企业详情页的数据都是动态加载的,要使用抓包工具去观察,找到一定的规律,写了很多注释和代码。值得开心的是,成功爬取到了数据。

对于抓包工具的使用上要更加熟练,合理使用它,就可以快速定位我们对于这个网页数据抓取的理解。并且编码过程不要着急,要顺一下这个思路,写好注释,方便我们回头复习。

下面就是我写的代码啦,注释有些多,慢慢看下;

import requests
import json
headers = {
    'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'"
}
#? 通过URL,请求的网页数据没有得到想到的数据
'''
#! 通过get请求得不到我们想要的数据,不包含相关企业信息
#? 经过抓包工具分析,请求的数据应该是动态加载的数据,并不是直接对URL直接发起请求就可以得到的
req_url = 'http://scxk.nmpa.gov.cn:81/xk/'
response = requests.get(url=req_url,headers=headers)
page_txt = response.text
with open('./demo.html','w',encoding='utf-8') as fp:
    fp.write(page_txt)
'''
#* 再次使用抓包工具,访问页面得到一个新的URL
#* URL = http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList
#* 并且得到了首页的 json,通过观察得到了每个企业详情页的id值,通过id就可以得到每一家企业的URL地址
#* URL = http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=6e96e34d97294134b8ad85522c798768
#* URL = 域名+ id值,就可以访问每一家企业的页面
#* 通过新的URL地址,再次使用抓包工具,发现企业信息详情页的数据也是动态加载的
#? 得到了新的URL,可以获得详情页的数据:http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById

#/ 首先第一步,我们要获得首页展示企业的所有id,是一个POST请求
URL ='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
pam = {
    'on': 'true',
    'page': '1', #? 第一页
    'pageSize': '15', #? 每一页最大企业
    'productName':'' ,
    'conditionType': '1',
    'applyname':'',
    'applysn':'',
}
response = requests.post(url= URL,data=pam,headers=headers)
page_json_ids = response.json()
id_list = [] #?存储企业的id
for dic in page_json_ids['list']:
    id_list.append(dic['ID'])
#print(id_list)

#/ 第二步,我们就要开始获取企业详情页的数据
req_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
#? 遍历我们上面获取的 企业ID列表,赋值给pam字典
all_company = [] #! 存储所有企业的详情数据
for ele in id_list:
    pam = {
        'id':ele,
    }
    resp = requests.post(url=req_url,data = pam,headers=headers)
    page_json = resp.json()
    all_company.append(page_json)
fp = open('./AllCompany.json','w',encoding='utf-8')
json.dump(all_company,fp = fp,ensure_ascii=False)
print("over ~~")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇见鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值