Python爬取国家药监总局化妆品详细信息

第一,找到国家药监总局化妆品官网,

URL为:http://scxk.nmpa.gov.cn:81/xk/

在这里插入图片描述

第二,分析页面信息

首先我们要明确我们想要什么信息,很明显现在需要的是找到每一个企业的详细信息,那么我们可以利用网页的抓包工具(F12)来实现这个步骤
按F12后,找到这个首页的URL对应的网址,哦豁,这个时候我们发现并没有找到首页我们想要的企业信息,这时候我们应该想到,他应该是个动态的请求,也就是我们说的Ajax请求,我们可以试试,结果有新发现,
在这里插入图片描述
在这里插入图片描述
下面是手动点击下一页出现的信息,这时候刚好出现了我们猜想的事情,那就是这个页面信息真的是个动态请求,第三步骤就是每点击下一页就出现一条信息,接下来我们分析这个新出来的信息链接:
在这里插入图片描述
在这里插入图片描述
很明显现在就是一个字典的形式出现在眼前,使用json格式化工具来具体看
在这里插入图片描述现在看起来是不是好看多了,但是问题来了,这里并没有我们想要的信息,这个才是最终我们想要的,但是第一次请求的并没有这些东西,
在这里插入图片描述
那我们想想,是不是跟第一步一样,这个页面的信息并不在这个URL里面,而是在一个动态请求里面呢,下面我们来验证一下猜想,
在这里插入图片描述
在这里插入图片描述
现在有了,看,我们多对比几个URL发现,所有的URL都是一样的,但是有个东西不一样,那就是ID
在这里插入图片描述

在这里插入图片描述
ID:
在这里插入图片描述

在这里插入图片描述
哦豁,那现在我们就有办法得到我们想要的东西了,将这个一样的URL跟企业的ID拼接起来,不就是我们想要的东西吗,哈哈,那就松手来实现吧

第三,代码实现

import requests
import json
if __name__=="__main__":
    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/70.0.3538.25 Safari/537.36 Core/1.70.3823.400 QQBrowser/10.7.4307.400'
    }
    id_list = []  # 存储企业的ID
    all_list = []  # 存储企业的详情数据
    for page in range(1, 361):
        page = str(page)
        data={
    
    
           'on': 'true',
           'page': page,
           'pageSize': '15',
           'productName':'',
           'conditionType': '1',
           'applyname':'',
           'applysn':'',
        }

        json_ids=requests.post(url=url,data=data,headers=headers).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
            }
            detail_data=requests.post(url=post_url,data=data,headers=headers).json()
           # print(detail_data)
            all_list.append(detail_data)
            #持久化存储all_list
            fp=open('./all_data.json','w',encoding='utf-8')
            json.dump(all_list,fp=fp,ensure_ascii=False)
            print("Over!!!")

第四,总结

里面循环缩进比较重要,如果缩进不当,那就拿不到我们想要的东西了,那就功亏一篑,白白浪费时间啦!!!

第五,结果展示

所有的数据量比较大,如果是练习的话,建议将循环减小
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liuxiaobao666/article/details/111145806