推广 热搜: 未来    中国  企业  服务  政策  公司  快速  上海  设备 

Python爬取动态网站实战

   日期:2024-11-19     作者:xasic    caijiyuan   评论:0    移动:http://xiaoguoguo.dbeile.cn/mobile/news/1051.html
核心提示:在之前的推文中,我们介绍了如何爬取一个简单的静态网站——「[Python爬取静态网站」,但是在实际过程中,常

在之前的推文中,我们介绍了如何爬取一个简单的静态网站——「[Python爬取静态网站」,但是在实际过程中,常常会遇到需要爬取动态网站数据的情况。在本文中,我们也将通过一个比较简单的案例,来介绍爬取动态网站数据的基本思路和步骤。

Python爬取动态网站实战

首先,简单回顾一下动态网页的特征

  • 从源代码看,动态网页的数据不会出现在网页源代码中,而是被 “藏” 起来了

  • 从网址特征看,请求新数据时 (如翻页),网址不会变化。

动态网页数据爬取通常有两种方法

  • 分析数据接口,找到数据藏在哪,然后请求接口的数据

  • 通过 Selenium 模拟浏览器点击的方式获取数据。

在本次介绍中,我们将通过获取接口的方式来爬取动态网页的数据。由于动态网页结构会更加复杂一些,我们主要的精力是在解析网页结构这一步。但是在找到了数据接口后 (知道数据 “藏” 在哪),数据的爬取也比较简单。具体来看,爬取动态网页数据主要可分为以下几步

  • 分析网页结构,查找数据接口

  • 构造请求头,请求接口数据

  • 解析接口数据

  • 储存数据。

同样的,如果涉及多页的数据,需要分析接口的变化规律

  • 分析单页网页结构,查找数据接口

  • 分析接口变化规律,构造接口参数

  • 循环请求、获取并解析数据

  • 储存数据。

接下来,我们以爬取 bilibili 视频评论为例,来具体介绍如何通过 Python 爬取动态网页的数据。主要内容包括

  • 如何分析动态网页结构、查找数据接口

  • 如何请求接口数据

  • 如何解析 json 格式数据

  • 如何把数据实时存入 csv 文件

  • 如何循环爬取多页数据。

3.1 分析网页结构

在动态网页的数据爬取中,分析网页结构至关重要。因为我们需要找到数据 “藏” 在哪,否则不知道应该去哪请求数据。在本案例中,我们将爬取「bilibili」的数据,具体选择 bilibili 入站第一名的视频「【才浅】15天花20万元用500克黄金敲数万锤纯手工打造三星堆黄金面具」的评论数据。

按照惯例,我们先看一下网页源代码,由于信息太多了,可以直接使用搜索功能。在网页源代码页面,搜索评论内容,发现没有这个数据。

Python爬取动态网站实战

那怎么办呢?我们就要找一找这个数据到底藏在哪了。通常,查找动态网页的数据接口有以下几个步骤

  • 在页面右键鼠标选择

  • 在检查页面选择

  • 在 Network 页面选择类型,数据接口一般藏在 或者 中

  • 找到数据接口。

Python爬取动态网站实战

问题又来了,动态网页里的数据很多,有时候就算筛选了类型,也还是有很多页面。要找到我们需要的数据,真的是大海捞针,那怎么办呢?有一个小技巧,就是利用搜索功能。在检查页面,搜索一下评论内容,立马就找到了数据藏在哪里

Python爬取动态网站实战

3.2 请求接口数据

历经千辛万苦,终于找到了数据藏的位置,接下来就是要把数据获取下来。这里简单三个步骤就可以完成

  • 查找接口的网址:分析接口网址的情况

  • 确定请求头数据:通常请求动态网页数据需要比较完整的请求头,这时可以直接把 Request Headers 里面的内容直接复制

  • 请求数据:在有了数据接口的位置后,先尝试是否能够成功获取数据,可以直接通过 请求数据。

Python爬取动态网站实战

我们先来看看接口网址 (Request URL) 的情况,可以看到网址包括以下几个部分

  • 主要结构:https://api.bilibili.com/x/v2/reply/main

  • 网址参数:callback、jsonp、next、type、oid、mode、plat、_。

也就是说,这个数据接口由 1 个主结构和 8 个参数构成。关于参数需要注意两点,一是有没有这个参数会不会影响数据获取,二是这个参数的含义和变化规律。具体的确定方法只有不断尝试

  • 通过增删参数看是否会影响请求的结果,或者请求结果有何变化

  • 通过变化网页看接口地址的变化规律,比如翻页、评论排序等,看参数如何变化。

当然,有时候不知道含义也可以爬取数据,但是建议还是了解一下,一般不清楚含义但必需的参数保持默认值即可。在这里,我们省略一下不断尝试的结果。最终,发现了部分参数的基本含义

  • callback:代表一个获取数据的查询动作和时间戳,不是必需

  • jsonp:代表获取的数据格式,不是必需

  • next:代表页码,翻页循环时需要

  • type:含义暂时不明,但是必需,且不变,值为 1

  • oid:代表视频的 av 号,如果需要爬取多个视频的评论,需要从这个参数入手

  • mode:代表评论的排序方式,2 = 按时间倒序,3 = 按热度排序 (默认排序)。不是必需,默认值为 3

  • plat:含义暂时不明,不是必需

  • _:代表当前的 Unix 时间戳,不是必需。

接下来我们就可以复制请求头,构造请求参数,请求需要的数据。

 

查看返回结果, 代表请求数据成功。如果是 403 或 404 则说明请求不成功,可能需要检查电脑网络是否通畅、目标网址是否可以正常访问、headers 是否有正确设置等。

3.3 解析网页数据

请求成功后,我们再来看请求回来的数据是什么样的,如何根据获取自己需要的数据。回到数据接口中,我们可以看到数据是通过 json 格式存储的,而每条评论的数据在 data 下面的 replies 中。

Python爬取动态网站实战

因此,我们用 解析请求到的数据,并把需要的评论数据提取出来。

 

3.4 储存爬取数据

接下来,把爬取到的数据存入 csv 文件。当然,还是建议爬取一页保存一页。同时,使用 utf-8 格式保存数据,因此打开数据文件时,也要使用同样的格式。

 

3.5 循环爬取数据

终于成功获取了一页的数据,接下来就要循环获取更多数据了。这里也分为三个步骤

  • 分析接口网址的变化规律 (通常是参数的变化)

  • 根据规律构造网址

  • 循环获取数据。

由于前面已经详细分析过接口的参数变化,这里不再具体说明。通过分析,翻页变化的参数是 next,所以只要变化这个参数就可以进行翻页。另外,如果要爬取不同视频的评论,则要通过 av 号来循环,也就是 oid 参数。

 
 

Note:产生如下推文列表的 Stata 命令为:   安装最新版 命令:  

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。 Python爬取动态网站实战

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

Python爬取动态网站实战 Python爬取动态网站实战

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手Python爬取动态网站实战

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

Python爬取动态网站实战

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

Python爬取动态网站实战

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

Python爬取动态网站实战

六、面试宝典

Python爬取动态网站实战

本文地址:http://xiaoguoguo.dbeile.cn/news/1051.html    多贝乐 http://xiaoguoguo.dbeile.cn/ , 查看更多
 
 
更多>同类行业资讯
0相关评论

新闻列表
企业新闻
推荐企业新闻
推荐图文
推荐行业资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2023001713号