js 爬虫抓取网页数据(微博的热点事件会产生大量评论数据,这些数据是进行舆情分析和网络水军识别等数据挖掘的基础 )

优采云 发布时间: 2022-03-04 11:17

  js 爬虫抓取网页数据(微博的热点事件会产生大量评论数据,这些数据是进行舆情分析和网络水军识别等数据挖掘的基础

)

  黄洪涛姜英峰

  

  

  摘要:微博热点事件会产生大量评论数据,是舆情分析、网络海军识别等数据挖掘的基础。论文分析比较了常用的网络爬虫技术和框架,分别使用Selenium框架和Json数据接口两种方法,以及采集新浪微博热点事件下的用户评论数据。一般网络爬虫技术多采用广度搜索,这里采用深度搜索,可以更准确的获取某个热点事件下的用户评论数据。

  关键词:数据挖掘微博用户评论网络爬虫Selenium Json

  CLC 编号:TP393.09;TP274.2 *敏*感*词*识别码:A文章编号:1674-098X (2021)05(b)-0132-05

  基于微博平台的用户评论数据采集

  黄洪涛姜英峰

  (广东外语外贸大学信息学院, 广东省广州市, 510006)

  摘要:微博热点事件会产生大量评论数据,是舆情分析、在线水军识别等数据挖掘的基础。论文分析比较了常用的网络爬虫技术和框架,分别使用Selenium框架和Json数据接口采集新浪微博热点事件下的用户评论数据。网络爬取技术一般采用广度搜索,这里采用深度搜索,更能准确获取热点事件下的用户评论数据。

  关键词:数据挖掘;微博;用户评论;网络爬虫;硒; json

  根据2021年2月发布的第47次《中国互联网发展状况统计报告》,截至2020年12月,我国网民规模达到9.89亿,较2020年3月增加8540万,互联网普及率高达70.4%,较2020年3月提升5.9个百分点。截至2020年12月,我国移动互联网用户规模达到9. 86亿,比2020年3月增加8885万,使用手机上网的网民比例达到99.7%,比2020年3月增加0.4个百分点. 数据显示,我国网民数量非常庞大,并且使用手机上网的网民比例非常高。这使得网民进入社区交流平台(如微博、知乎)的门槛降低,机会增加。很多网友,包括很多网络海军,都参与了热点事件的评论,使得这些事件产生了大量的数据。

  新浪微博是在中国拥有大量用户和高活跃度的在线社交平台。一个热点事件往往有几万、十万甚至上百万条评论数据。这些数据是舆情分析、网络海军识别等数据挖掘的基础。

  本文研究了相关的网络爬虫技术,并利用它对用户评论数据采集进行了批处理和自动化处理。

  1 相关技术

  1.1 爬虫技术分类

  爬虫技术有一些分类如下。

  1.1.1 万能网络爬虫

  通用网络爬虫也称为可扩展网络爬虫[1]。爬取对象从一些*敏*感*词*URL扩展到整个Web,主要针对门户网站搜索引擎和大型Web服务提供商采集数据。一般网络爬虫的结构大致可以分为几个部分:页面爬取模块、页面分析模块、链接过滤模块、页面数据库、URL队列初始URL采集。通用爬虫主要用于广度搜索优先策略。

  1.1.2 关注网络爬虫

  Focused Crawler,也称为Topical Crawler [2],是指选择性地抓取与预定义主题相关的页面的网络爬虫。与一般的网络爬虫相比,专注爬虫只需要爬取与主题相关的页面,大大节省了硬件和网络资源,而且由于页面数量少,保存的页面更新也很快。信息需求。与一般的网络爬虫相比,聚焦网络爬虫增加了链接评价模块和内容评价模块。聚焦爬虫的爬取策略实施的关键是评估页面内容和链接的重要性。不同的方法计算不同的重要性,导致链接的访问顺序不同。

  1.1.3 增量爬虫

  增量网页爬虫是指不再抓取已经抓取的网页,只抓取新生成的网页,即增量更新。与其他类型的网络爬虫相比,它只关注新增的数据,大大减少了网页的下载量,减少了爬虫对存储空间和网络带宽的消耗,但增加了爬虫的复杂度。卷爬取算法及实现难度[3].

  1.1.4 深网爬虫

  从网站上呈现的网页的不同位置结构来看,网页可以简单地分为浅态页面和深态页面。深度状态网页是指存储在网络数据库中的那些一般搜索引擎无法搜索到的状态页面,通常需要一定的条件才能获得(如登录)。与深态网页相比,浅态网页是指搜索引擎在网络上搜索到的浅态网页。Deep Web 往往具有强烈的主题,每个 Deep Web 主题领域所收录的数字信息更专业,内容更丰富[4]。

  1.2 常用爬虫框架

  1.2.1 硒

  Selenium 是一个用于操作浏览器以执行自动化测试的框架。浏览器自动化可以通过简单的命令来控制,就像真正的用户在操作一样,例如输入验证码。Selenium是一款自动化测试工具,支持多种浏览器,包括Chrome、Safari、Firefox等主流界面浏览器。因此,它可以用来爬取任何网页上看到的任何数据信息,几乎可以避免大多数反爬虫监控[5]。

  1.2.2 json接口

  Json(JavaScript Object Notation,JS Object Notation)是一种轻量级的数据交换格式。它使用不同于编程语言的特殊文本格式来保存和传递数据。简洁、清晰和易于理解的层次结构使 Json 成为理想的数据交换语言。更便于人读写,更易于机器解析生成,有效提高网络传输效率。Json 文本格式具有兼容性非常高、习惯行为类似于 C 语言系统、独立于其他编程语言的特点。这些特性使 Json 成为一种理想的数据交换语言 [6] 并用于提供 json 数据接口采集 的网页中的数据处理。

  1.2.3 Scrapy

  Scrapy是一个Python实现的爬虫框架,架构清晰,模块间耦合度比较低,扩展性比较强。等特点[7]。Scrapy框架不仅可以通过爬取网页获取数据,还可以通过访问API接口获取其他对应的数据,实现对网页资源的多级快速爬取,适用于各类网站爬取工作,提取有价值的结构数据[8]。

  2 数据采集

  本数据采集来源于网络社交平台-新浪微博,采集的具体评论数据为 filter=hot&root_comment_id=0&type=comment#_rnd59 博文下的用户评论。从这篇博文的评论数可以看出,这篇博文下的评论数据非常多,已经达到百万级评论数据。接下来,爬虫将用于捕获其数据并进行一些分析。

  下面根据采集的数据特点,分别使用增量爬虫和Deep Web爬虫技术、selenium框架和json数据接口对微博评论数据进行采集。

  2.1 使用 Selenium 框架采集数据

  Selenium 爬取评论的基本步骤如图 1 所示。

  首先获取其网页源代码(在网站上按F12查看),然后根据其源代码构造一个dom树,如图2所示。

  接下来可以使用XPath解析dom树,根据相关节点爬取数据。部分代码如下。

  user_data = requests.get(i)

  dom_url = etree.HTML(user_data.text, etree.HTMLParser(encoding='utf-8'))

  follow = dom_url.xpath('//div[@class="WB_innerwrap"]//strong[@class="W_f18"][1]/text()')

  fan = dom_url.xpath('//div[@class="WB_innerwrap"]//strong[@class="W_f18"][2]/text()')

  boke = dom_url.xpath('//div[@class="WB_innerwrap"]//strong[@class="W_f18"][3]/text()')

  数据爬取完成后,可以选择保存为xml、csv、txt等文本文件。在这里,选择保存在 csv 文件中。

  2.2 使用Json数据接口采集数据

  与 Selenium 不同的是,Json 数据接口可以相对直接的获取数据,因为它的数据结构是 Json 的格式,但是需要找到数据的接口。

  因为网页版微博不提供数据接口,反爬机制更先进,我们这里使用手机微博。手机微博用户评论通过瀑布流刷新,提供Json数据接口。例如其中一个接口: id=46240&mid=46240&max_id_type=0,其结构如下。

  {ok: 1, data: {data: [,…], total_number: "1 百万+",…}}

  数据:{数据:[,…],总数:“100万+”,…}

  数据: [,…]

  0:{created_at:“2021 年 2 月 27 日星期六 15:09:20 +0800”,id:“46737”,rootid:“46737”,...}

  1:{created_at:“2021 年 2 月 27 日星期六 15:04:59 +0800”,id:“46970”,rootid:“46970”,...}

   …

  18:{created_at:“2021 年 2 月 27 日星期六 15:05:08 +0800”,id:“46568”,rootid:“46568”,...}

  最大:50000

  max_id: 45846235480040570

  max_id_type: 0

  状态:{comment_manage_info:{comment_permission_type:-1,approval_comment_type:0}}

  总数:“一百万+”

  好的:1

  这种结构下获取用户评论比较简单,但是一个Json数据接口通常只能提供10×19条用户评论,所以需要重新获取下一个接口。由于手机端的微博使用瀑布流刷新用户评论,可以直接控制页面下拉刷新,获取下一个Json数据接口。观察它的数据接口链路,可以知道链路中只有max_id和max_id_type会发生变化,所以可以通过多个Json数据链路得出规律,下一个链路的max_id就是上一个链路的Json字典中的max_id (json结构倒数第六行),而max_id_type是0到1之间的值。首先用0判断Json返回的ok是否为1,如果是max_id_type则取0,否则取1。

  当我

  while_starttime = datetime.datetime.now()

  尝试:

  如果我 == 0:

  r = requests.get(one, headers=headers)

  别的:

  b = '&max_id_type=0'

  urlll = a + str(id) + b

  r = requests.get(urlll, headers=headers)

  标志 = r.json()

  flag1 = r.json()['ok']

  如果标志1 == 0:

  b = '&max_id_type=1'

  urlll = a + str(id) + b

  r = requests.get(urlll, headers=headers)

  js = r.json()

  用户 = js['数据']['数据']

  下一步就是分解获取Json数据,获取的数据也可以保存为xml表格、csv文件、txt文本文件等。

  2.3 采集结果

  两种方式的爬取结果包括用户id(用户的唯一标识)、用户名、评论时间、评论内容、评论点赞数。本次爬取共获得6000多条数据,可用于下一步。用户评论的数据挖掘提供了大量的数据,结果如图3所示。

  3 结论

  本文采用两种方法,均采用深度优先搜索获取微博用户评论数据。Selenium框架首先解析网页源代码,生成dom树,然后通过dom树获取用户评论数据。Json数据接口通过解析Json数据结构,直接获取微博用户的评论数据。实验中,针对微博热点事件下的用户评论数据采集,采用两种方法取得了较好的效果。

  两种 data采集 方法都有优点和缺点。Selenium 可以模拟真人爬取数据的行为,基本不受网页限制,但前期过程会比较繁琐,爬取效率不是很高。Json数据接口直截了当,但是获取数据需要详细找出隐藏的接口位置,有时需要找到下一个接口并总结其链接规则,而有的网站没有提供数据接口。在实际操作中,可以根据具体需要,结合两种技术的优缺点选择其中一种方法。

  参考

  [1] 曾建荣, 张扬森, 郑佳, 等. 多数据源的Web爬虫实现技术及应用[J]. 计算机科学, 2019, 46 (5): 304-309.

  [2]郭S,卞W,刘Y,等。基于支持向量机的聚焦爬虫在空间情报采集中的应用研究[J]. 电子设计工程, 2016, 24 (17): 28-34

  [3] 叶婷. 基于关键词的微博爬虫系统设计与实现[D]. 杭州:浙江工业大学,2016.

  [4] 杨晓福.公交票务DeepWeb数据采集关键技术研究[D]. 重庆:重庆交通大学,2016.

  [5] 吕伯清. 基于爬虫和数据挖掘的电子商务页面信息分析[D]. 兰州:兰州大学,2018.

  [6] 陈哲. 基于微博热点事件的可视化系统开发与实现[D]. 北京:首都经​​济贸易大学,2018.

  [7] 孙宇. 基于Scrapy框架的网络爬虫系统设计与实现[D]. 北京:北京交通大学,2019.

  [8] 崔新宇.基于情感分析的商品评价系统设计与实现[D]. 邯郸:河北工程大学,2020.

  标签: 网络爬虫 微博 数据挖掘

  报酬

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线