有的数据明明在浏览器里可以看到,但使用 库请求网页,却无法获得。
这种情况常见于滚动加载的页面。
以 微博点赞列表 为例,尝试直接请求该网页:
输出的内容中,并未包含点赞用户。
页面结构里没有的数据,却出现在了浏览器显示中,因此想要正确地获取这些数据数据,就要先明白 数据是如何进入页面的。
一般这类需要动态加载的数据,都是通过json文件发送到你的电脑上。
在谷歌浏览器中,进入检查模式(右键 - 检查),选择网络(Network)栏目,然后刷新网页,可以看到网络栏目中出现了很多条目:
按照 排序,其中类型为 的就是json文件。
尝试滚动页面,并观察类型为 文件的变化,可以看出,下图中的文件在逐渐增多:
因此,我们大胆猜测,{% emp 每次滚动页面时,新增的点赞数据都在这里面 %}。
为了验证这一猜想,我们随便选择一个文件,鼠标左键单击,查看它的信息:
可以看出,它是由 请求得到的,网址为:
我们直接访问这一网址,看看其中的内容:
可以看出,点赞用户的数据确实出现在其中。
因此,我们只要 直接使用库的方式请求这一网址,即可获得我们想要的点赞用户数据:
至此,我们成功请求到了json文件,将其储存在电脑上。
json 文件可以理解为 字典和列表的嵌套,因此想要提取其中的数据,需要先借助大括号和方括号的位置,分析字典和列表的嵌套关系:
- 表示里面的内容是一个字典,使用访问字典数据的方式提取其中的数据,如 key-value 方法
- 表示里面的内容是一个列表,使用访问列表数据的方式提取其中的数据,如索引方法
以我们刚刚获取的 json 文件为例:
因此,如果我们想提取所有用户的 和 这两个字段,需要:
*附:verified_type 的含义
verified_type 含义 verified_type 含义 -1 普通用户 6 应用 0 名人 7 团体、机构 1 政府 8 待审企业 2 企业 200 初级达人 3 媒体 220 高级达人 4 校园 400 已故 V 用户 5 网站 其中, 为黄 v,其他为蓝 v。
在爬取数据之前,我们先在浏览器里 手动查看一下,可以发现最多只能查看 50 个 json 文件,这些文件的链接存在规律:
接下来,我们遍历地请求这些网站,并获取每个用户的 和 :
实际数据采集过程中,可能会遇到一些问题,如页面请求失败、json 文件中没有对应路径、当前博文点赞数量较少(不到 page=50 就结束了)等,因此需要对代码做出优化如下:
以上就是通过请求 json 文件获取数据的基本方法。