五步带你探究爬虫爬取视频弹幕背后的真相,附爬虫实现源码
前言
好久没更新,不知道各位粉丝有没有等着急,没办法,这不是要到年底了啊,又要开始准备一年一度的工作汇报了,咱到现在也不知道这玩意到底有什么用,反正就是每一家公司都需要这么个玩意,其中,最让我头疼的就是这个未来展望的环节,我要是能预测未来我不早就去买彩票发大财,还在这给你写什么规划。但是谁让你是老大呢,哎,所以,没办法,就是从网上各种找资料或者一些数据,写未来的规划,正好的,反正也是年底了,没啥事干,闲着也是闲着,就接了几个兼职的单子,赚点钱回家给小辈发红包啊!不知道大家有没有遇到这样的困境
再网上查找一些资料的时候,发现在网上对于 python 爬虫的案例讲解比较少,并且比较散,反正最近我从网上找资料,甚至是兼职的单子都是跟爬虫相关,今天就给大家简单介绍一下爬虫的相关内容,大家没啥事也可以自己练习着玩一下嘛
公众号:Java 架构师联盟
开发环境
开发工具:pycharm
开发环境:python3.8.5
原理讲解
其实说起来爬虫,简单点的理解,就是我们要去将我们在网页上查看的内容中的某一部分保存到本地,为什么这么说呢?
举个例子,大家都知道,我们在浏览器上浏览某个网站信息的时候,其实他是去后台请求相应的数据,然后,后台服务器相应这个数据请求,将数据返回到我们的前端界面(也就是你能看到的业面),如果这么说有点复杂的话,那结合一张图我们来看一下
这个过程通俗点来说就是:
浏览器提交请求->下载网页代码->解析/渲染成页面
而爬虫要做的其实就很简单了,也很好理解,既然你在浏览器中查看某些信息的时候,是执行的一个和服务器之间进行通信的过程,那你现在要求的不就是模拟浏览器的一个行为,然后将数据存储到本地吗?
流程如下:
模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中
用一张图解释就是下面这样的****
实现流程
既然前面我们整理清楚了爬虫的一个工作原理,接下来不就简单了啊,我们就是看一下代码实现流程,写代码是最没有技术含量的
第一、获取数据的请求地址
因为现在是我们要模拟浏览器的一个行为,那我们最起码要知道数据的一个请求地址。也就是 url,我今天提供给大家的源码时爬取 B 站弹幕,那我就以此为例进行讲解
那 url 我们该怎么查找,首先,前面的时候我说了,我们在前面说了,我们要先模拟一个网站发起一个 request 请求,那我们要去查看的应该就是一个 request 的 url
注:什么是 request
我们按 F12 打开开发者模式,然后在页面中点击弹幕列表,在选择要查看的弹幕日期之后,在下方控制台中会出现一个 history 开头的选项,点击,我们会看到 request url 的选项
第二、模拟用户请求
主要包括两个方面,用户模拟以及登陆模拟
用户模拟
因为我们现在是模拟浏览器向服务器发起请求,就好像有一个陌生人来敲你家的门一样,这样的情况,你会开门吗?不会,那如果我们伪装成亲戚朋友的话,你就开门了把,在请求中,我们有一个用户代理(user-agent)来表明我们的身份选项****
注:
User Agent 中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
登陆模拟
上面的问题解决了,同时也引出了下一个问题,我们在进行这个信息查看的时候,是通过一个已经登陆的账号,当你在未登陆的情况下****
你是无法查看这个历史的弹幕数据的,那我们在模拟的时候如何模式登陆行为的呢
这个时候,不得不提的就是浏览器的一个行为,当我们登录某个网站之后,再次访问的时候,很多时候是不需要再次登录的,那这是为什么呢?是因为当你登录之后,浏览器会在本地生成一个 cookie 的问题件,cookie 与特定的 Web 文档关联在一起, 保存了该客户机访问这个 Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。这样一来也就完成了我们的直接访问行为
也就是说,只要我们获取这个 cookie,我们在访问后台服务器的时候,也是不需要什么登陆操作的,一气呵成
第三步:请求数据
经历上面的步骤,我们已经成功的向服务器发起请求,当你执行前面几步得操作后,你会得到这样的一个结果
这说明,我们成功和服务器进行了链接
接下来我们要通过我们传入的 user-agent 以及 cookie 来确立我需要哪些数据,获取 url 请求过来的数据
也就是这样的一个结果
第四步,数据分析
到第三步,我们已经获取完成了相应的数据信息,但是我们只需要其中的一部分,所以要进行解析,留下的是我们自己需要的数据
第五步,数据存储
解析完成的数据,我们保存到本地,至此,数据爬取的工作完成
好了,一个数据爬虫的工作到这里就结束了,希望大家没啥事的时候可以自己动手实际操作一下,下面是我实现的代码,大家可以自己参考
代码实现
为了照顾刚接触这个的朋友,所以这里我写的会相对的详细一些,其中一些细小的知识点就不展开讲解了,毕竟我还要写苦逼的年终总结
刚刚接触 python 的小伙伴,可以每获取一步数据就打印一次,这样可能对于你的理解有一定的帮助
分享自己的码云地址,除了资料之外,还有我分享的学习代码,可以自行下载
版权声明: 本文为 InfoQ 作者【小Q】的原创文章。
原文链接:【http://xie.infoq.cn/article/d79133ec3676b9f9751a043ca】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论 (1 条评论)