• 81
•
图1 网页传输模型
先是由客户端向服务端发出请求,可以分为4部分内容:请求方法(Request Method )、请求路径(Request URL )、请求头(Request Headers )、请求体(Request Body )。
然后由服务端返回给客户端响应,可以分为三部分:响应状态码(Response Status )、响应头(Response Headers )、响应体(Response Body )。
获取页面中最重要的就是响应体的内容了,用爬虫请求网页后,主要是通过响应体得到页面的源代码、JSON 数据等,然后从中得到相应内容的提取。1.2 数据处理
在获取网页源代码后,需要对网页源代码进行分析,最常用的方法是采用正则表达式提取,但是在构造正则表达式时比较复杂而且容易出错。由于网页的结构有一定的规则,比较通用并且简便的就是根据网页节点属性、CSS 选择器或XPath 来提取网页信息的库,如Beautiful Soup 、pyquery 、lxml 等。使用这些库,我们可以高效快速地从中提取网页信息,如节点的属性、文本值等。 另外一种方法是直接通过模拟浏览器的方式,利用Selenium 库驱动浏览器加载网页进而提取信息。1.3 数据存储
提取信息后,一般会将提取的数据保存到某个文件下以便后续使用。保存的形式有许多,可以简单地保存为TXT 文本或者JSON 文本,也可以保存到数据库,比如MYSQL 和MongoDB 等等,也可以保存至远程服务器,如借助SFTP 进行操作等等。
2 分析微博网页结构
微博作为中国最早兴起的自媒体平台,人们不需要像QQ 和一样通过添加好友可以看到对方发布的动态,在微博上人们可以自由发表言论,可以不需要添加对方就可以看到其他人的全部动态和个人信息。
首先,微博分为:微博网(weibo ),微博手机端
基于anaconda环境下的通用微博评论抓取算法
长江大学电子信息学院 汪兰兰
在如今信息科学技术迅速发展的时代背景下,大数据分析在我们的日常生活中发挥着越来越大的作用。而作为信息交互的平台—微博,为我们提供了多层次以及能够随意交流自己言论的功能。如何知道一篇文章下的评论数和评论内容,本论文研究了利用网络爬虫算法来收集微博评论,主要是模拟浏览器来抓取微博评论,该算法对于较多评论能够快速爬取,节省了许多时间,只需要4min 左右就能够爬取全部评论。
1 网络爬虫技术
随着万维网进入人们的生活中,人们可以通过html 传播网页信息,网络上的信息开始成倍增长。人们纷纷使用各种方法将网络上的信息搜集来,进行分类、整理,以方便查。由于手动信息收集耗时耗力,网络爬虫技术应运而生,这门技术能够自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索方式。
网络爬虫,就是把互联网比作一张大网而网络爬虫就是网上爬行的蜘蛛,而网上的一个个节点就是就相当于一个个的网页,每爬到一个节点就相当于访问了一个页面并获取了该信息,节点与节点之间的连线就是页面与页面之间的链接关系,可以通过一个节点连线爬取到下个节点,也就是说通过一个页面然后获取后续的网页,这样互联网上的页面可以全部爬到,这样网站的数据就可以抓取下来了。
简而言之,网络爬虫就是获取网页、对网页进行提取、并保存信息的自动化程序。从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。1.1 数据采集
我们通常利用一个链接来访问所需要的网页,这个链接也就是URL (统一资源定位符),其中链接包括了访问协议HTTPS 、访问路径(即根目录)和资源名称,在爬虫中我们通常抓取的页面是http 或https 协议,本文介绍的主要是对https 协议链接进行抓取,它为http 的安全版(即http 下加入ssl 层)。
我们在浏览器中输入一个URL ,回车之后便可以在浏览器中观察到页面内容。实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应里包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现了出来,传输模型如图1所示。
• 82
•
(m.weibo)以及微博移动端(weibo),现今社会人们对于手机是随身携带,所以本文主要是以微博手机端为例来展开。2.1 检查网页
今年由于新冠状病毒疫情热度较多,所以关于国人对于新冠状病毒的讨论评论数据量比较大,本人了一篇《特朗普宣布暂停资助世卫组织》的微博文章,将此(m.weibo/1295674790/452700
8661736966)链接在谷歌浏览器中打开,把鼠标挪到网页任意地方,单击鼠标右键,选择“检查”。2.2 元素定位
打开“检查”这个选项之后,会出现HTML 类的网页代码,要定位所要获取的信息,有两种方法。
方法一:把鼠标放在你需要查看的文字上,重新单击鼠标右键,进行检查。
方法二:点击检查框左上角的箭头,移动鼠标直接点击文字进行定位。
本人是使用第二种方法,如图2所示。
刚刚打开该话题的时候,它显示的是3872条评论,但是在审查的时候在文章中只有20个div 并且每个div 中只装载一条评论,即
响应内容。在这个过程中,页面实际上在后台与服务器进行了数据交互,获取到数据之后,再利用JavaScript 改变网页,这样网页内容就会更新了。这类似于Python 中利用requests 向服务器发起请求,然后得到响应的过程。返回的内容可能是HTML ,也可能是JSON 。比如,如果返回的内容是JSON 的话,我们便可以对它进行解析和转化。
3 网络爬虫实现方法
上文介绍了A j a x 原理,最后利用这门技术返回的内容为JSON ,JOSN 具体怎么得来的,接下来需要介绍两种方法。3.1 抓包
抓包主要是根据网页节点属性进行抓包的,其中网页的加载信息都包含在Network 中,具体抓包步骤为:
(1)鼠标右击,打开检查功能选项;(2)选择Network ;(3)刷新网页;(4)查看加载的数据。
由于我们需要查看的是文字文件,对于一些图片基本可以忽
图2 指定微博网页
每个页面原始就只能显示20条评论。当把鼠标不断向下滑动的过程中,网页元素中的div 也不断随评论
的增加而增加,当活动到底部时,所有评论都加载出来了。可以初步判断该网页属于ajax 加载类型。2.3 Ajax原理
什么是Ajax ,全称为Asynchronous JavaScript and XML ,即异步的JavaScript 和XML 。它不是一门编程语言,而是利用JavaScript 在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。
传统的网页,如果想要更新其文章和评论内容,那么必须要刷新整个页面。有了Ajax ,便可以在页面不被全部刷新的情况下更新其评论内容。但这里请求的发送是由JavaScript 来完成的。由于设置了监听,所以当服务器返回响应时,onreadystatechange 属性对应的方法会被触发,此时利用xmlhttp 的responseText
属性便可取到
图3 存贮评论文件
略,主要看Network 中Type(加载的文件类型)和Size(加载的文件大小),由于本微博评论有3872条。
由图3中的440,可以确定这是我们所要的文件,为了确定这是我们要的内容,上文提到响应的内容为JSON 类型,点击文件右侧的Response 选项,利用在线json 解析选项中的内容,将Response 选项的内容全部复制,把刚才的内
容粘贴得到结果,如图4
所示。
图4 JSON在线解析文件
• 83
•
由图4中蓝标记的就是评论的第一条,可以完全确定是我们所要的文件,由于开始只加载20条评论,利用Ajax每次也只加载20条,所以需要到max_id之间的关系就可以进行编写代码爬起来,由于这个操作比较麻烦,接下来介绍第二种方法来实现对微博评论内容的爬取。
3.2 模拟浏览器爬取
上面一种方法主要是利用Ajax接口,我们可以非常方便地完成数据的爬取。只要我们能到Ajax接口
的规律,就可以通过某些参数构造出对应的的请求,数据自然就能被轻松爬取到。但在很多情况下,Ajax请求的接口通常会包含加密的参数,如token、sign等。如果不深入分析并到这些参数的构造逻辑,我们是难以直接模拟这些Ajax请求的。
所以直接通过模拟浏览器的方式,绕过这个过程。因为在浏览器里面我们是可以看到这个数据的,如果能直接把看到的数据爬取下来,当然也就能获取对应的信息了,其中需要用到Selenium库来进行爬取,Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面源代码,做到可见即可爬。对于一些使用JavaScript 动态渲染的页面来说,此种抓取方式非常有效。
4 爬取微博实战流程图(图5)
(2)Jupyter Notebook
中文名称网页版编辑器,能够在线编程和调试。
(3)Spyder
它是桌面版编辑器,主要用于内容较多的代码的运行和调试。
5.2 仿真结果及分析
图6 仿真结果
由于评论数据比较大,利用模拟浏览器爬取的结果比较快,需要3min左右就可以爬取完,在解释器上的仿真结果如图6所示,获取的评论内容比较完整,将获取的内容保存到weibocomments的文本下,将文本展开如图7
所示。
图7 保存数据文件
6 微博评论抓取总结
本文主要介绍的是通常爬取微博评论的基本方法,能够较快的对网友所发表的评论进行快速的获取。
重点分析了怎么爬取下拉加载内容,有两种实现方法,其中一种是抓包,比较难的一点是对网页结构定位要清晰,能够利用网页之间的关系来爬取,利用Ajax爬取的内容非常完整但耗时长,只适合对数据内存小的进行爬取;另外一种是模拟浏览器来进行爬取,这种方法比较麻烦的是每次运行代码需要登录账号和密码,但速度较快且爬取的内容相对完整。该算法还有许多值得研究的地方,比如将用户名和该用户评论数一起进行爬取;对于保存的数据能够进行分类和清洗。由于该算法字考虑爬取单篇文章的评论,根据网页之间的关系是否能够将内容相似的文章评论一起爬取,这些问题是后续研究的重点。
作者简介:汪兰兰(1998—),湖北随州人,大学本科,现就读于长江大学电子信息学院电子与通信工程专业。
安卓在线解析json图 5 代码流程图5 仿真结果实现
5.1 仿真环境
Anaconda是专门为了方便使用Python进行数据研究而建立的一组软件包,涵盖了数据科学领域常见的Python库,并且自带了专门用来解决软件环境依赖问题的conda包管理系统。其核心功能主要是包管理和环境管理,包管理与Python中pip使用类似,环境管理主要是能够让用户切换不同版本的Python,它不用配置环境变量就可以直接使用,相比pycharm软件,它里面预装好了conda、某个
版本的python、众多packages、科学计算工具等等,打开它里面的解释器就可以进行代码实现。Anaconda有三个部件。
(1)Anaconda Prompt
这个是Anaconda自带的终端,不配置环境变量也能正常使用。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论