一、实验目的

爬取国家药监局(化妆品生产许可信息管理系统服务平台 (nmpa.gov.cn))化妆品生产明细(具体到每家企业的具体信息),当我们进入该网站首页时,发现其结构为每页15条的json类型数据。如图以下简称首页:

点开企业名称对应的超链接跳转到我们需要爬取的页面,以下简称详情页:

我们需要爬取详情页 上所有信息存为json格式到本地。

二、获取动态加载数据的URL

我们首先通过爬取首页信息验证是否可以通过爬取每条企业数据的超链接,再请求访问超链接数据来实现实验目的,打开开发者模式,找到首页url对应的页面:

发现该页面并不存在企业超链接,说明该页面上的信息属于动态加载数据,即首页url与动态加载链接的url不同,需要找到动态加载数据对应的url。

通过抓包工具打开该动态加载数据的详情:

发现其对应的动态url为:http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList

数据格式为:json

请求方式为:post

其动态数据的结构为:

一个页面为一个大字典,其值为一个列表,列表中包含了15个小字典,每一个小字典对应每一页的15条企业信息,当我们打开详情页利用之前的验证方法,发现详情页中的信息也是动态加载数据,不可以直接爬取,所以利用抓包工具找出其第一家企业的动态加载信息所对应的url:

中华人民共和国化妆品生产许可证 (nmpa.gov.cn),其结构为动态url加每个企业的唯一标识符企业id。所以我们的实验思路转化为将首页的企业id爬取后再拼接到详情页的动态url上再进行遍历请求新url对应的具体信息,而企业id就被嵌套在首页结构中的字典中:

三、代码实现

在明确爬取思路之后,我们开始代码实践 ,附上注释:

#项目目的爬取国家药监局中关于化妆品生产许可相关数据
#该网页相关数据包括:企业名称、许可证编号、有效期等。。#最终需要爬取每家企业的详细信息(详情页)---动态加载出的数据(不可直接由当前页面的url解析出来)
#爬取思路:先爬取主页数据再定位到主页各企业名称对应的超链接(通过首页爬取每家企业对应的超链接url) 再对每个详情页超链接发请求
# 验证:用XHR来捕获动态数据包查看动态数据的数据结构与类型import  requests
import json
if __name__ == "__main__":headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}  #反反爬机制:伪装成用户通过浏览器登陆url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'#参数的封装for page in range(1,6):page = str(page)data = {'on': 'true','page': page, #当点第几页'pageSize': '15', #该页有15条数据'productName':'','conditionType': '1','applyname':'','applysn':'',}# 将发请求与获取响应数据合并起来 获取到的是带有企业id的字典类型的json数据json_ids = requests.post(url=url,headers=headers,data=data).json()#对url发起访问请求;通过post()方法获取请求页面信息,以.json的数据形式。print(json_ids)id_list = []  # 存储企业的idall_data_list = []  # 存储所有的企业详情数据(存入15个字典)# 批量获取不同企业的id值(企业详情页url=原url+企业id)统一的url+不同的参数#该字典的值是一个列表(列表中的每一个小字典对应一个企业)for dic in json_ids['list']:   #遍历列表中的每一个字典并取出id数据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()all_data_list.append(detail_json)#print(detail_json)#持久化存储all_data_listfp = open('./Outcome.json','w',encoding='utf-8') #写入并保存数据json.dump(all_data_list,fp=fp,ensure_ascii=False)print('保存成功')

此时爬取的json数据已经存储在当前路径下的Outcome.json 中,输出结果查看:

爬虫案例之爬取国家药监局化妆品生产许可明细(爬取动态加载数据)相关推荐

  1. 爬虫-获取鼠标点击或则移动到指定位置才能获得的动态加载数据

    测试网站 https://www.zalando.de/damen-home/  一家电子商城网站 我们的目的就是去爬取各个子分类下面的链接, 这些数据必须到当鼠标移动到 上面的横向导航栏菜单才会动态 ...

  2. 爬虫Spider 05 - 代理参数-proxies | 控制台抓包 | requests.post() | 动态加载数据抓取-Ajax

    文章目录 Spider 04回顾 requests.get()参数 常见的反爬机制及处理方式 Spider 05笔记 代理参数-proxies **控制台抓包** **requests.post()参 ...

  3. python爬取js加载的数据_JS动态加载数据不会爬?老司机教你两个方法爬取想要的数据...

    学习Python的人绝大部分都是在用Python做爬虫,毕竟对于爬虫而言Python是不二选. 但是一般简单的静态页面网站还是很好爬取的,对于很多动态加载的网站就不知道怎么办了,今天小编就给大家介绍两 ...

  4. python爬虫之Ajax动态加载数据抓取--豆瓣电影/腾讯招聘

    动态加载数据抓取-Ajax 特点 1.右键 -> 查看网页源码中没有具体数据 2.滚动鼠标滑轮或其他动作时加载 抓取 1.F12打开控制台,页面动作抓取网络数据包 2.抓取json文件URL地址 ...

  5. 用爬虫抓取动态加载数据丨Python爬虫实战系列(6)

    提示:最新Python爬虫资料/代码练习>>戳我直达 前言 抓取动态加载数据 话不多说,开练! 爬虫抓取动态加载数据 确定网站类型 首先要明确网站的类型,即是动态还是静态.检查方法:右键查 ...

  6. Python爬取东方财富网任意股票任意时间段的Ajax动态加载股票数据

    导言 最近由于需求想爬取以下东方财富网的股票数据,但是发现没有想象那么简单,接下来我会讲述一下我遇到的问题以及是如何解决,最后成功的爬出了想要的数据. 查看网页源码 首先我们F12打开东方财富网网页源 ...

  7. php抓取动态数据,php+ajax实现无刷新动态加载数据技术

    我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术 ...

  8. select weui 动态加载数据_浪尖以案例聊聊spark3的动态分区裁剪

    动态分区裁剪,其实就牵涉到谓词下推,希望在读本文之前,你已经掌握了什么叫做谓词下推执行. SparkSql 中外连接查询中的谓词下推规则 动态分区裁剪比谓词下推更复杂点,因为他会整合维表的过滤条件,生 ...

  9. 一起学爬虫——如何爬取通过ajax加载数据的网站

    目前很多网站都使用ajax技术动态加载数据,和常规的网站不一样,数据时动态加载的,如果我们使用常规的方法爬取网页,得到的只是一堆html代码,没有任何的数据. 请看下面的代码: url = 'http ...

最新文章

  1. Java面向对象4(P~U)
  2. Python教程:内置函数filter()和匿名函数lambda解析
  3. android内容协调,理清Android协调布局CoordinatorLayout的摆放位置及特殊属性。
  4. 多线程生成的原因(Java内存模型与i++操作解析)
  5. 简述控制反转ioc_Spring学习之——控制反转(IoC)与依赖注入(DI)
  6. 【代码规范】Google C++开源风格指南
  7. 自有协议的LoRa模块应用
  8. 计算机专业专科毕业设计题目,专科生计算机专业论文题目大全 专科生计算机专业论文题目哪个好...
  9. 欧美音乐史上最经典的歌曲
  10. 不可多得的干货!双非渣本Android四年磨一剑,终局之战
  11. 119.编写函数,该函数的功能是计算下列级数之和,和值返回调用函数,数据由主函数输入
  12. android Qwerty 键盘搜索联系人分析与实现(支持多音字)
  13. ​最新淘宝商品详情接口API(稳定低成本)
  14. layui 卡片式列表_UITableViewCell系列之(三)卡片式列表
  15. 计算机操作典型工作任务,典型工作任务描述表.doc
  16. Android 判断app是否在前台还是在后台运行
  17. linux中top命令cpu,ps命令中的%CPU字段和top命令中的%CPU字段
  18. Python使用ffmpeg合成视频、音频
  19. opencv摄像头 vmware虚拟机无法打开摄像头的解决方法
  20. Github惊现高星神作,两份算法宝典让你横扫大厂算法面试题

热门文章

  1. Ubuntu下的连点器
  2. 影刀RPA在web中表格类型数据的处理
  3. Python爬虫学习笔记(使用代理及代理池——解决返回状态码302即IP被封的问题)
  4. python小项目--》烤牛排
  5. 2022年,又新出来一个Python学习神器
  6. C#:Krypton控件使用方法详解(第十讲) ——kryptonColorButton
  7. 通过QT与嵌入式arm-Linux设备联调
  8. 外卖cps淘宝客订单API获取订单代码
  9. 精美长颈鹿主题班会教学课件PPT模板
  10. 流利阅读Day 7 Bedtime Pattern