一种基于多策略融合的微博数据获取方法论文和设计

全文摘要

本发明公开了一种基于多策略融合的微博数据获取方法,首先模拟登录,获取登录成功的Cookie;将获取的Cookie保存到Cookie队列中,获取初始任务;然后使用多账号负载均衡策略爬取用户关注列表、用户资料;提取用户ID,生成关注关系和用户信息待爬取队列,再爬取用户关注列表、用户资料,同时生成用户微博待爬取队列;构造访客Cookie,使用IP代理池加速爬取微博内容,将信息存入数据库中;提取微博ID,生成评论信息待爬取队列;爬取微博评论信息,将信息存入数据库中。本发明通过自适应算法找到适合当前网络环境和Cookie队列长度的并发请求数,在采集速度和账号安全之间取得平衡;同时实现了高可用代理IP模块以加速数据采集,为网络舆情分析提供基础数据支持。

主设计要求

1.一种基于多策略融合的微博数据获取方法,其特征在于,包括以下步骤:步骤1:模拟登录,获取登录成功的Cookie;步骤2:将步骤1获取的Cookie保存到Cookie队列中;步骤3:获取初始任务:选取多个粉丝数较多的微博用户作为初始爬取的节点;步骤4:使用多账号负载均衡策略爬取用户关注列表、用户资料:访问初始的微博用户集合,根据用户ID构造用户资料URL,进行用户资料、用户关系的采集;步骤5:提取用户ID,生成关注关系和用户信息待爬取队列,跳转至步骤4;同时,生成用户微博待爬取队列;步骤6:构造访客Cookie:以未登录状态访问微博首页,爬虫利用微博系统生成的标明游客身份的Cookie采集微博平台的相关内容;步骤7:采集程序访问用户微博待爬取队列集合,根据微博ID构造微博URL,基于访客Cookie和代理IP池访问构造的微博URL,进行微博内容的采集;步骤8:采集程序下载微博URL页面后,对页面进行解释,提取微博ID,生成评论信息待爬取队列;步骤9:采集程序访问评论信息待爬取队列集合,基于访客Cookie和代理IP池下载微博评论页面,对页面进行解释,微博评论信息,将信息存入数据库中。

设计方案

1.一种基于多策略融合的微博数据获取方法,其特征在于,包括以下步骤:

步骤1:模拟登录,获取登录成功的Cookie;

步骤2:将步骤1获取的Cookie保存到Cookie队列中;

步骤3:获取初始任务:选取多个粉丝数较多的微博用户作为初始爬取的节点;

步骤4:使用多账号负载均衡策略爬取用户关注列表、用户资料:访问初始的微博用户集合,根据用户ID构造用户资料URL,进行用户资料、用户关系的采集;

步骤5:提取用户ID,生成关注关系和用户信息待爬取队列,跳转至步骤4;同时,生成用户微博待爬取队列;

步骤6:构造访客Cookie:以未登录状态访问微博首页,爬虫利用微博系统生成的标明游客身份的Cookie采集微博平台的相关内容;

步骤7:采集程序访问用户微博待爬取队列集合,根据微博ID构造微博URL,基于访客Cookie和代理IP池访问构造的微博URL,进行微博内容的采集;

步骤8:采集程序下载微博URL页面后,对页面进行解释,提取微博ID,生成评论信息待爬取队列;

步骤9:采集程序访问评论信息待爬取队列集合,基于访客Cookie和代理IP池下载微博评论页面,对页面进行解释,微博评论信息,将信息存入数据库中。

2.根据权利要求1所述的基于多策略融合的微博数据获取方法,其特征在于,所述模拟登陆为:利用程序模拟用户登录服务器,从而获取登录账号Cookie,其步骤如下:

步骤1)预登录请求:程序对用户名进行base64编码,并构造预登录请求地址;

步骤2)获取加密的nonce和servertime:发送GET请求得到nonce、servertime、pubkey和rsakv变量,nonce和servertime用于对登录密码进行加密,pubkey和rsakv是固定值,直接写入程序中;

步骤3)使用RSA2加密登录密码:利用步骤2)获取的nonce以及rsakv,结合微博的公钥rsakt,使用RSA2算法对用户密码进行加密,获得加密后的密码;

步骤4)获取服务器凭证:发送关键参数,通过POST方法完成请求后,服务器将传回的响应信息,包括retcode和arrURL两部分内容;

步骤5)获取登录成功的Cookie:通过GET方法访问arrURL,服务器将返回当前用户的个人信息,请求返回的Cookie即为有效Cookie,用它进行数据采集。

3.根据权利要求2所述的基于多策略融合的微博数据获取方法,其特征在于,以小于24小时的间隔定时进行模拟登录,以最新的Cookie代替即将失效的Cookie。

4.根据权利要求1所述的基于多策略融合的微博数据获取方法,其特征在于,所述多账号负载均衡策略中,通过模拟登录获取多个账号的Cookie,并将这些Cookie保存到一个队列中;爬虫在请求的时候,从队头获取一个Cookie,并且给定初始的TTL值,每次爬虫携带该Cookie进行请求之后,就将对应Cookie的TTL值减1,当TTL值减为0时便将该Cookie放至队尾,再从Cookie队列中取队首Cookie进行页面请求。

5.根据权利要求4所述的基于多策略融合的微博数据获取方法,其特征在于,所述在请求完一个页面之后,爬虫将随机休眠一定时间,以保证账号的安全性。

6.根据权利要求4所述的基于多策略融合的微博数据获取方法,其特征在于,所述步骤4中采用自适应并发采集策略,结合当前网络环境和Cookie队列长度为基于模拟登录的网络爬虫寻找能稳定快速进行数据抓取的并发线程数阈值;所述策略包括快增加和慢调整两个阶段:

在快增加阶段按照指数规律增加请求线程数,每当线程增加后,程序在一个时间窗口内判断所使用的账号状态是否正常;正常则继续成倍增加线程数,并按照所述负载均衡策略轮换Cookie;异常则剔除异常Cookie,并在队尾添加一个新的账号Cookie,使Cookie队列长度与初始值保持一致,并且将下一个时间窗口的线程数设置为当前线程数的一半,并进入慢调整阶段;

设计说明书

技术领域

本发明涉及网络数据采集技术领域,具体为一种基于多策略融合的微博数据获取方法。

背景技术

互联网的普及和发展促进了社交网络的蓬勃发展。微博作为当前最为流行的社交网络应用之一,以其用户数量基数大、状态信息更新频繁、信息传播迅速等特点,在近几年中得到迅猛的发展,已成为中国主要的传播媒介之一。根据《第42次中国互联网络发展状况统计报告》显示,截至2018年6月,微博以42.1%的用户使用率排在社交应用第三位,较2017年12月增长1.2%,其在粉丝互动和内容分发等方面进一步强化。社交网络用户规模巨大,信息传播速度快,内容丰富,影响范围广,对于网络舆情分析具有十分重要的意义。

当前微博数据采集方法一般通过微博应用程序编程接口(ApplicationProgramming Interface,API)或基于模拟登录的方式进行数据采集。使用微博API进行采集会受到微博系统API授权及每天调用次数的限制,采集的数据量少;通过模拟登录进行数据采集虽然突破了微博API的限制,但是需要多个账号配合一定的负载均衡策略才能做到较为快速的采集,并且在大规模数据采集中会有封号的风险,账号保活的难度较大。现有的微博数据采集方法常使用单一的采集策略,导致采集的数据量不稳定,效率低较低。

发明内容

针对上述问题,本发明的目的在于提供一种可以稳定、高效地采集微博数据,为网络舆情分析提供基础数据支持的基于多策略融合的微博数据获取方法。技术方案如下:

一种基于多策略融合的微博数据获取方法,包括以下步骤:

步骤1:模拟登录,获取登录成功的Cookie;

步骤2:将步骤1获取的Cookie保存到Cookie队列中;

步骤3:获取初始任务:选取多个粉丝数较多的微博用户作为初始爬取的节点;

步骤4:使用多账号负载均衡策略爬取用户关注列表、用户资料:访问初始的微博用户集合,根据用户ID构造用户资料URL,进行用户资料、用户关系的采集;

步骤5:提取用户ID,生成关注关系和用户信息待爬取队列,跳转至步骤4;同时,生成用户微博待爬取队列;

步骤6:构造访客Cookie:以未登录状态访问微博首页,爬虫利用微博系统生成的标明游客身份的Cookie采集微博平台的相关内容;

步骤7:采集程序访问用户微博待爬取队列集合,根据微博ID构造微博URL,基于访客Cookie和代理IP池访问构造的微博URL,进行微博内容的采集;

步骤8:采集程序下载微博URL页面后,对页面进行解释,提取微博ID,生成评论信息待爬取队列;

步骤9:采集程序访问评论信息待爬取队列集合,基于访客Cookie和代理IP池下载微博评论页面,对页面进行解释,微博评论信息,将信息存入数据库中。

进一步的,所述模拟登陆为:利用程序模拟用户登录服务器,从而获取登录账号Cookie,其步骤如下:

步骤1)预登录请求:程序对用户名进行base64编码,并构造预登录请求地址;

步骤2)获取加密的nonce和servertime:发送GET请求得到nonce、servertime、pubkey和rsakv变量,nonce和servertime用于对登录密码进行加密,pubkey和rsakv是固定值,直接写入程序中;

步骤3)使用RSA2加密登录密码:利用步骤2)获取的nonce以及rsakv,结合微博的公钥rsakt,使用RSA2算法对用户密码进行加密,获得加密后的密码;

步骤4)获取服务器凭证:发送关键参数,通过POST方法完成请求后,服务器将传回的响应信息,包括retcode和arrURL两部分内容;

步骤5)获取登录成功的Cookie:通过GET方法访问arrURL,服务器将返回当前用户的个人信息,请求返回的Cookie即为有效Cookie,用它进行数据采集。

更进一步的,以小于24小时的间隔定时进行模拟登录,以最新的Cookie代替即将失效的Cookie。

更进一步的,所述多账号负载均衡策略中,通过模拟登录获取多个账号的Cookie,并将这些Cookie保存到一个队列中;爬虫在请求的时候,从队头获取一个Cookie,并且给定初始的TTL值,每次爬虫携带该Cookie进行请求之后,就将对应Cookie的TTL值减1,当TTL值减为0时便将该Cookie放至队尾,再从Cookie队列中取队首Cookie进行页面请求。

更进一步的,所述在请求完一个页面之后,爬虫将随机休眠一定时间,以保证账号的安全性。

更进一步的,所述步骤4中采用自适应并发采集策略,结合当前网络环境和Cookie队列长度为基于模拟登录的网络爬虫寻找能稳定快速进行数据抓取的并发线程数阈值;所述策略包括快增加和慢调整两个阶段:

在快增加阶段按照指数规律增加请求线程数,每当线程增加后,程序在一个时间窗口内判断所使用的账号状态是否正常;正常则继续成倍增加线程数,并按照所述负载均衡策略轮换Cookie;异常则剔除异常Cookie,并在队尾添加一个新的账号Cookie,使Cookie队列长度与初始值保持一致,并且将下一个时间窗口的线程数设置为当前线程数的一半,并进入慢调整阶段;

其中,Nt+1<\/sub>表示下一个时间窗口的采集线程数,Nt<\/sub>表示当前时间窗口的采集线程数;state表示在当前时间窗口内数据采集,Cookie状态是否正常,1为正常,0为异常;

在慢调整阶段按照线性规律增加请求线程数,每当线程增加后,程序在一个时间窗口内判断所使用的账号状态是否正常;正常则继续按线性方式增加线程数,并按照所述负载均衡策略轮换Cookie;异常则剔除异常Cookie,并在队尾添加一个新的Cookie,使Cookie队列长度与初始值保持一致,并且按线性方式减少当前线程数;直到慢调整阶段结束,则当前线程数便是当前网络环境和并发线程Cookie队列长度条件下能够进行持续稳定采集微博数据的最佳线程数;

其中,Nt+1<\/sub>表示下一个时间窗口的采集线程数,Nt<\/sub>表示当前时间窗口的采集线程数;state表示在当前时间窗口内数据采集,Cookie状态是否正常,1为正常,0为异常。

更进一步的,所述访客Cookie构造方式如下:

步骤a)获取tid、c和w三个参数

分析浏览器报头得到tid的获取方式:首先需要构造参数fp和cb,fp参数由浏览器相关信息构成,包括参数os、brower、fonts、plugins和screenInfo;cb参数为固定的值,值为“gen_callback”;在fp和cb参数构造完成之后,获取参数tid;同时,服务端将返回new_tid和confidence两个参数,new_tid的值为true或者false;当new_tid为true时,w为3;当new_tid为false时,w为2;参数c的值和confidence的值相同;

步骤b)获取未登录状态下的Cookie

首先通过步骤a)得到的tid构造一个新的Cookie,该Cookie的内容包括一个键值对,内容为{“tid”:tid+“__”+c};然后通过GET方法完成请求,再通过检查返回的内容中的msg字段的值是否为succ,以判断获取未登录Cookie是否成功;如果msg值为succ,则表示获取Cookie成功,访客Cookie可从响应的报头中获取。

更进一步的,所述IP代理池包括:代理IP采集器、代理IP校验器和代理IP调度器;代理IP采集器负责定时从网上公开的代理IP源采集代理IP,包括代理IP地址、端口和支持的协议;代理IP校验器负责将采集的代理IP资源进行定时校验;代理IP调度器负责将符合条件的代理IP提供给爬虫使用。

更进一步的,所述IP代理池的具体实现过程如下:

步骤A)过滤透明IP

对新入库的代理IP进行校验时,代理IP校验器将访问https:\/\/httpbin.org\/ip服务(可否用文字描述这是什么服务),该服务返回对应HTTP请求的IP,如果该IP和爬虫服务器真实IP相同,则丢弃该IP;如果返回的内容和服务器真实IP不同,那么给予该IP一个初始分值;如果出现代理IP端口关闭的错误,则认为该IP不可用,直接删除;

步骤B)针对微博站点本身做校验

使用代理IP访问微博首页,若微博返回的页面中包含“微博-随时随地发现新鲜事”字符串,则该代理IP可用于微博数据采集;如果响应页面中出现yzm_input,则直接删除该代理IP;如果出现请求超时,则对该代理IP的分值减1;如果出现端口关闭错误,则直接删除该代理IP;对于校验通过的代理IP,更新其在代理IP池中的分数、最近一次校验时间和响应速度,以作为调度器从代理IP池筛选代理IP的标准;

步骤C)代理IP调度

代理IP调度器根据代理IP池中代理IP的分数、响应时间和最近校验时间三个属性预设值从代理IP池中选择符合指定要求的代理IP并进行排序,形成一个首尾相连的链表;每次爬虫请求微博页面时,代理IP调度器将为其分配位于链表头结点的代理IP进行调度,成功得到响应结果时,将该IP放置到队尾;如果请求失败,则从该链表中删除该代理IP;

接入IP代理池之后,使用下载器中间件对所有HTTP请求进行管理;对于访问权限要求较高的微博用户资料采集模块,下载器中间件从Cookie队列头部获取一个Cookie,再携带该Cookie进行数据采集;对于访问权限要求较低的微博内容采集模块,下载器中间件通过代理IP调度器获取一个代理IP,并通过该代理IP携带已构造的访客Cookie进行数据采集。

本发明的有益效果是:

(1)本发明根据模拟登录抓取微博和构造访客Cookie抓取微博各自的特点,提出了优化的方法。

(2)本发明提出的IP代理池,可用于其他社交网络、新闻网站、论坛或博客等的数据采集过程,避免采集程序因IP访问限制导致数据采集中断。

(3)本发明设计的多策略融合的微博数据采集方法,可以稳定、高效地采集微博数据。

附图说明

图1是本发明的微博数据采集系统架构图。

图2是本发明的基于多策略融合的微博数据采集流程。

图3是本发明的微博系统模拟登录流程图。

图4是本发明的代理IP抓取及校验流程。

图5是本发明的用户关注关系采集性能对比图。

图6是本发明的用户信息采集性能对比图。

图7是本发明的微博信息采集性能对比图。

图8是本发明的评论信息采集性能对比图。

具体实施方式

下面结合附图和具体实施例对本发明做进一步详细说明。

微博数据采集内容包括微博个人信息、微博用户关系、热门话题内容、热门话题下所有微博、用户所有微博、微博的所有评论和转发内容等。由于用户资料、微博内容和微博评论在舆情分析中具有十分重要的意义,因此本发明后面的实验选择用户资料、用户关系、用户微博及其评论作为采集对象。

本发明基于多策略融合采集方法提出了一个微博数据采集系统,其架构如图1所示,系统采用广度优先策略,首先依据粉丝数量人工选取种子节点,采集初始用户的关注列表,依次获得当前用户所关注的每个人的关注列表,一层一层向外扩展,同时采集用户信息及该用户所有微博信息及其评论,具体采集流程如图2所示。

以下结合具体案例对本发明的实施方案展开描述。

步骤1:模拟登录,获取登录成功的Cookie;

模拟登录是指利用程序模拟用户登录服务器,从而获取登录账号Cookie的过程。微博系统模拟登录的流程如图3所示。

1、预登录请求

程序对用户名进行base64编码,然后构造预登录请求地址,构造方式为:http:\/\/login.sina.com.cn\/sso\/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=MTg3MDgxMDMwMzM%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)&_=1526959231,其中su的值MTg3MDgxMDMwMzM%3D表示通过base64编码后的用户名(注:base64编码后的用户名为“MTg3MDgxMDMwMzM=”,在请求的URL中“=”用“%3D”替换),_的值1526959231是当前时间戳。

2、获取加密的nonce和servertime

发送GET请求可以得到nonce、servertime、pubkey和rsakv等变量,nonce和servertime用于下一步中对登录密码进行加密,pubkey和rsakv是固定值,可以直接写入程序中。

3、使用RSA2加密登录密码

微博采用RSA2算法对登录密码password进行加密。利用上一步获取的nonce以及rsakv,结合微博的公钥rsakt,使用RSA2算法对用户密码进行加密,获得加密后的密码。

4、获取服务器凭证

通过POST方法请求http:\/\/login.sina.com.cn\/sso\/login.php?client=ssologin.js(v1.4.19),需要发送的关键参数如下:

entry=weibo\/\/登录来源

savestate=7\/\/是否保存密码

useticket=1\/\/是否使用用户凭证登录

su=MTg3MDgxMDMwMzM=\/\/base64编码后的用户名

servertime=1526959231\/\/预登录阶段获得的服务器时间戳

nonce=ES6HQ1\/\/预登录获得的服务器随机码

sp=password\/\/获得的加密后密码

请求完成之后,服务器会传回一个响应信息,包括retcode和arrURL两部分内容。其中,arrURL对应的值为下一步验证需要的URL。

5、获取登录成功的Cookie

通过GET方法访问arrURL,服务器将返回当前用户的个人信息,请求返回的Cookie即为有效Cookie,可用它进行数据采集。此外,本发明发现微博Cookie的过期时间为24小时,如果要满足长期稳定高效进行数据采集的需求,应该以小于24小时的间隔定时进行模拟登录,以最新的Cookie代替即将失效的Cookie。

步骤2:将步骤1获取的Cookie保存到Cookie队列中;

为了快速采集大量微博数据,需获取多个登录成功的Cookie,将这些Cookie保存到Cookie队列中,保证步骤4使用多账号负载均衡采集微博数据。

步骤3:获取初始任务;

选取多个粉丝数较多的微博用户作为初始爬取的节点。微博用户的关注行为是微博拓扑结构的表现形式,微博用户的粉丝数量可以从侧面说明他的影响力大小和该账号的质量。选取多个粉丝数较多的微博用户可以有效地避免已采集的用户节点形成环或者采集到大量僵尸用户。

步骤4:使用多账号负载均衡策略爬取用户关注列表、用户资料;

访问初始的微博用户集合,根据用户ID构造用户资料URL,进行用户资料、用户关系的采集。

在登录状态下,微博系统对单个账号在一定时间内的请求量有所限制,如果当前账号的请求速率超过微博服务器限制,那么会被微博反爬虫系统标记为异常状态。为了加速微博数据采集,本实施采用了10个账号使用一定的访问策略进行数据采集。

首先,通过模拟登录获取10个账号的Cookie,将这些Cookie保存到一个队列中。爬虫在请求的时候,从队头获取一个Cookie,并且给定初始TTL为100,每次爬虫携带该Cookie进行请求之后,就将对应Cookie的TTL减1,当TTL减为0时便将该Cookie放至队尾,再从Cookie队列中取队首Cookie进行页面请求。为了更真实地模拟人的操作,在请求完一个页面之后,爬虫会随机休眠一定时间,以保证账号的安全性。为了提高采集效率,本发明使用多线程进行并发请求。线程太多会导致同一时间窗口内的访问量增大,从而增加封号的风险,因此需要结合当前网络环境和Cookie队列长度为基于模拟登录的网络爬虫寻找一个能稳定快速进行数据抓取的并发请求阈值。基于TCP拥塞控制算法的思想,本发明采用自适应并发采集策略,来找到一个能够进行稳定高效数据采集的并发线程阈值。该策略包含快增加和慢调整两个阶段。

1、快增加阶段

在该阶段按照指数规律增加请求线程数,每当线程增加后,程序在一个时间窗口内判断所使用的账号状态是否正常,正常则继续成倍增加线程数,并按照上述负载均衡方式轮换Cookie,异常则剔除异常Cookie,并在队尾添加一个新的账号Cookie,使Cookie队列长度与初始值保持一致,并且将下一个时间窗口的线程数设置为当前线程数的一半,并进入慢调整阶段。

Nt+1<\/sub>表示下一个时间窗口的采集线程数,Nt<\/sub>表示当前时间窗口的采集线程数;state表示在当前时间窗口内数据采集,Cookie状态是否正常。

2、慢调整阶段

在该阶段按照线性规律增加请求线程数,每当线程增加后,程序在一个时间窗口内判断所使用的账号状态是否正常,正常则继续按线性方式增加线程数,并按照上述负载均衡方式轮换Cookie,异常则剔除异常Cookie,并在队尾添加一个新的Cookie,使Cookie队列长度与初始值保持一致,并且按线性方式减少当前线程数。最终慢调整阶段结束,当前线程数便是该网络环境和该Cookie队列长度条件下能够进行持续稳定采集微博数据的最佳线程数了。

步骤5:提取用户ID,生成关注关系和用户信息待爬取队列,跳转至步骤4;同时,生成用户微博待爬取队列;

步骤6:构造访客Cookie;

未登录状态下访问微博首页,微博系统会为当前游客生成Cookie,以标明游客身份,爬虫利用该Cookie可以采集微博平台的相关内容。访客Cookie构造方式如下:

1、获取tid、c和w三个参数

分析浏览器报头可以得到tid的获取方式。首先需要构造参数fp和cb,fp由浏览器相关信息构成,包括参数os、brower、fonts、plugins和screenInfo等,这些信息可以进行伪造,一个合法的fp参数内容如下:

{\

设计图

一种基于多策略融合的微博数据获取方法论文和设计

相关信息详情

申请码:申请号:CN201910175559.0

申请日:2019-03-08

公开号:CN109933701A

公开日:2019-06-25

国家:CN

国家/省市:90(成都)

授权编号:CN109933701B

授权时间:20191231

主分类号:G06F16/951

专利分类号:G06F16/951;G06F16/953;G06F16/9535;G06Q50/00

范畴分类:40B;

申请人:四川大学

第一申请人:四川大学

申请人地址:610065 四川省成都市武侯区一环路南一段24号

发明人:王文贤;陈兴蜀;王海舟;严丹;王培名;唐瑞

第一发明人:王文贤

当前权利人:四川大学

代理人:裴娟

代理机构:51284

代理机构编号:成都信博专利代理有限责任公司

优先权:关键词:当前状态:审核中

类型名称:外观设计

标签:;  ;  ;  

一种基于多策略融合的微博数据获取方法论文和设计
下载Doc文档

猜你喜欢