requests实战之药监总局相关数据爬取

需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据

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

但是我们要爬取详情数据,不是首页中直接显示的东西;

思考,直接对当前的url发起请求,会不会得到包含企业名称,发证机关等数据,最麻烦的办法是,对这个url发起请求,然后看相应数据中是不是包含这些信息。

为什么想要在首页中获取这些数据?因为点击企业的时候发现,每一个企业的名称对应一个超链接,最终想获得详情页所对应的页面,详情页对应的页面,应该由首页中每家企业所对应的超链接A标签的href属性值所提供的,这意味着,如果对首页的这个URL发起请求,可以拿到当前页面的这些信息,
就相当于是拿到了每家企业所对应的A标签都可以拿到,即可以获取其中的href值。

所以,现在先验证猜想,对当前url发起请求,能否拿到当前看到的完整的页面。

验证猜想方法:

  1. 可以直接爬取这个网页的数据以验证猜想:

    发现并不是这样,通过requests模块发起请求,并没有得到想要的数据,说明当前页面的相关详情数据一定不是由当前地址栏中的url请求得到,说明这里面可能含有AJAX请求。

  2. 通过抓包工具验证猜想:

    打开抓包工具,点击network,并再次对这个url发起请求,并在all这个选项卡中找这个url对应的数据包,
    这个数据包的响应数据在response选项卡中存放,这里面对应的源码数据就是通过requests.get请求到的数据。
    在这里插入图片描述
    在这里插入图片描述

    然鹅requests这种并没有相关企业信息。

所以得出结论,想要的企业数据是通过动态加载得到的,可能是由AJAX请求得到的。

打开抓包工具,并选择XHR选项卡,看Headers,发现是POST请求,携带参数,返回json。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

打开Response选项卡,能看出来,这个json文件中的确包含了我们需要的数据,说明首页中对应的企业信息数据是通过ajax动态请求到的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

我们希望找到详情页所对应的url,通过对得到的json数据进行观察,发现并没有详情页的url,
但是有每个企业的id值,多打开几个页面找规律能发现,只有这个id不一样,这样我们通过这个id值可以拼接出每家企业的url
在这里插入图片描述

在这里插入图片描述

验证一下,这个拼接而成的url会不会还是动态加载数据。
在这里插入图片描述

能看出来,企业的详情信息依然是动态加载出来的。同理,验证这个数据是不是通过AJAX方法得到(验证方法同上)
是post请求,携带的参数是id,id可以从首页所对应的AJAX数据包所响应回来的json串中进行获取。
返回的数据类型还是json。
在这里插入图片描述

总结

  • 动态加载数据

  • 首页中对应的企业信息数据是通过ajax动态请求到的。

    http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=e6c1aa332b274282b04659a6ea30430a
    http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=f63f61fe04684c46a016a45eac8754fe

    • 通过对详情页url的观察发现:
      • url的域名都是一样的,只有携带的参数(id)不一样
      • id值可以从首页对应的ajax请求到的json串中获取
      • 域名和id值拼接处一个完整的企业对应的详情页的url
    • 详情页的企业详情数据也是动态加载出来的
      • http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
      • http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
      • 观察后发现:
        • 所有的post请求的url都是一样的,只有参数id值是不同。
        • 如果我们可以批量获取多家企业的id后,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求的url

以及,这里有更加完整的笔记和文件,欢迎访问,仅供学习交流
https://github.com/jiayoudangdang/python_note_chapter_two_requests_module

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

加油当当

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

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

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

打赏作者

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

抵扣说明:

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

余额充值