网页版微博HTML解析和提取,爬虫聚焦——以新浪微博为例

网页版微博HTML解析和提取,爬虫聚焦——以新浪微博为例

2023年6月29日发(作者:)

⽹页版微博HTML解析和提取,爬⾍聚焦——以新浪微博为例爬⾍聚焦——以新浪微博为例标签:#思想##技术##爬⾍#时间:2017/03/29 17:35:12作者:Vanessa He⽹络爬⾍是实现⽹页数据获取的⼀般⽅法,并且需要先成功模拟微博登陆后,再进⼊设定好的⼊⼝URL 地址,将⽹页内容按某种策略以⽂本形式存于某存储系统中, 同时抓取⽹页中其他的可⽤来作为⼆级爬⾏⼊⼝的有效地址, 直到满⾜已定抓取条件或抓取结束后爬⾍程序停⽌。但是,由于⽹页是通过HTML语⾔标记元素的,所以在获取⽹页信息时候需针对数据的不同标签分别进⾏抓取。这⼀获取⽅法实现的前提是需要先登陆微博,只有在登陆成功之后⽹页的相应cookie值才会被保存下来,但是,由于微博平台的相关设置,⼀般的⽹络爬⾍获取数据的限制很⼤,所以如何取得微博⽹站的“信任”也是⼀⼤重要问题。同时,由于微博数据形式的多样化,包含⽂本、表情、超链接、地理位置、⽤户关系等,这也增加了获取数据的难度。除此之外,微博爬⾍程序存在⼀个效率较低的问题,同时这种⽅式获取的数据往往是杂乱的,因此如何规范获取数据和提⾼爬取效率⼜是另⼀⼤问题。所以说,“爬⾍”,懂了都简单,刚⼊门还是要好好花点⼼思的哦。#### **⼀、知彼**在研究微博数据的获取⽅法之前,需要先了解微博页⾯的信息架构,明确我们需要获取的数据在⽹页上的呈现形式,然后分析⽹页的源代码和⽹页数据流情况,确定微博界⾯解析和页⾯数据获取的必要技术⼿段,这样,才能更好的发现待解决的问题并提出解决⽅案。如果想要分析⾯向特定话题的微博页⾯(话题主页和评论页),其信息结构如下(这⾥博主随意选了“和颐酒店⼥⽣遇袭”话题页⾯来分析):关于⾯向特定话题的微博发帖界⾯,如图所⽰,微博话题主页界⾯有⾮常清晰地区块划分,除去那些与话题内容⽆关的价值信息⽆关的模块之后,主要分为标题栏、发帖栏、话题主持⼈栏和最新参与⽤户栏,其中发帖栏可分为主持⼈推荐栏和热门评论或者时评团栏两⼤区块,⽽热门评论或者时评团栏实际上却是由3个15条帖⼦模块组成,每15条帖⼦模块的地址都不⼀样,这是微博所独有的页⾯结构特点,果然也对页⾯信息数据的获取增加了⼀定的难度。然后,话题页⾯的最下⽅是可以跳转第⼏页或者点击下⼀页的翻页模块。关于特定话题的微博数据还包括对于重点帖的评论,如图所⽰,如“和颐酒店遇袭”事件,对于这⼀社会话题⽽⾔,最开始是由某微博⽤户⾃⼰发起的,所以最开始⼤多⽹络⽤户都是对话题发起者的发帖进⾏评论的,这些评论信息是对于该话题的重要信息来源,因此,评论信息也是对微博数据研究的重要⽅⾯。综上所述,从技术层⾯来看,这些模块都是使⽤基于CSS技术的代码来实现,模块之间的区分是通过这样的标识来分割,因此模块之间都是有清晰地分界,便于我们来分析整个微博页⾯的结构。#### **⼆、知⼰**通过对特定话题下的微博⽹页信息结构的分析,我们不难发现微博数据是在静态⽹页上呈现的,这相⽐动态的⽹页⽽⾔就简单⼀点,静态的⽹页上的信息是通过HTML语法编码实现,这⼀点我们通过微博后台源代码就可以得到验证,这样的⽹页上可以包含数字、⽂字、表情、图⽚、视频和链接等,⽽内容的多样性也增加了数据获取的难度。针对HTML⽹页的数据获取⽅法,结合微博⽹页的特点,⾸先对某⼀URL下的页⾯进⾏解析形成树,然后对树中⽬标数据进⾏遍历操作,从⽽获取到⽬标数据。然⽽,真实的特定话题下的微博页⾯数据被分割成了很多区块,这些区块有的是按照所在位置进⾏区分的,有的是通过⼀些特殊的标签进⾏数据组织的,并且不同区块下数据的定位地址也不⼀样,这样的话,同⼀个话题页⾯下的页⾯解析需要对该⽹页中数据的多个地址进⾏分别解析和相同标签的遍历操作,所幸的是,微博正⽂发帖的部分虽然被分成了4块,但是每⼀区块的HTML标签基本没有变化,这样的话,只需要在⽹页的解析⽅⾯做出改变即可,最后将获取的数据再存储在同⼀个数据库中就完成了数据的获取。结合特定话题下的微博⽹页的信息结构的分析,微博数据的获取主要是通过对浏览器地址和通过json返回地址两种地址的解析来获取⽹页数据,现将两种⽅式的微博数据的获取流程归纳如图:通过以上获取流程介绍,特定话题下的数据获取⽅法主要包括以下:**1、Jsoup的HtmlParse技术**作为Java的HTML⽹页解析器,Jsoup提供了很多有⽤的API,所以可直接通过URL地址和⽂件加载Document对象,也可以直接解析html字符串或者body⽚段,还可以通过CSS、DOM或jQuery操作⽅法等进⾏直接的数据(HTML的⽂本、属性、元素)读取和操作。使⽤其解析⽹页的优势在于能快速的解析HTML代码,并且能在解析的过程中保证结果的较为准确性,⽽这样的优势离不开jsoup选择器的作⽤。使⽤Jsoup解析html之前,因为使⽤Jsoup解析⽹页过程中会涉及Node、Element、Document等类的使⽤,所以需要先了解DOM结构。Node是在解析HTML过程中,⽂档、标签、属性、⽂本和注释都被看成结点,这样就会被构造成⼀个节点树。Element⼀般包括标记名称、属性和⼦节点等。在⼀个Element中,可以进⾏数据提取和结点遍历等操作。作为装载html的⽂档类,Document是Jsoup中具有重要地位的核⼼类。使⽤这三类的⽬的是为了select选择器在进⾏逐级标签选择时能够准确的抽取⽬标数据,⽽且这样还便于⽂档的遍历操作。Jsoup因可使⽤与jQuery类似的选择器检索和查找元素⽽更加优越,它还可以从元素集合中直接抽取⽂本、属性和html内容,并且Jsoup仅仅需要⼀⾏代码就可以实现⽬的,⽽其他的HTML解析器也许需要多⾏代码才能实现同样的功能。选择器通过使⽤(String selector)和(String selector)两种⽅法可以查找匹配⽬标元素,Select⽅法可作⽤于Document、Element或Elements,并⽀持CSS或jQuery语法,最终返回元素列表(Elements)。**2、正则表达式**正则表达式是通过利⽤⼀些事先已经定义好的特殊符号对字符串进⾏逻辑过滤的操作,其⽬的主要是通过简单的字符匹配代替复杂的简化字符串的代码程序,从⽽实现字符串处理的便捷性和⾼效性。#### **三、百战百殆**根据以上功能需求分析,爬⾍程序⼤致可分为微博平台模拟登陆、数据抓取和数据存储三个模块。具体来看,微博平台模拟登陆模块是后两⼤模块实现的基础,其中最核⼼的部分是数据获取模块,是实现⾯向特定话题下的微博数据获取的关键模块,第三个模块是抓取过程的收尾⼯作,是对抓取过程得到数据的具体展现。下⾯详细阐述:(1)微博平台模拟登陆模块:该部分功能是参考真实微博平台成功登陆过程,设计爬⾍程序登陆模拟代码,得到有效的URL合法地址,并以此地址为“引⼦”,便于实现⽬标⽹址的⽤户登录问题,从⽽实现⽬标⽹址数据的获取。技术上来看,这部分主要分为加密登陆账号和密码和获取合法地址两部分。在模拟⽤户的登陆中,需要先将事先传输的⽤户名和密码分别进⾏64位编码和RSA算法编码,然后再将编码的结果发送给微博服务器,服务器审核验证通过后便返回⼀串字符;⽽获取合法地址部分将分析返回的⼀串字符,⽬的是得到URL合法地址。(2)微博数据抓取模块:该部分功能是在已登陆的状态下,⾸先通过话题的MD5编码与⽹页地址进⾏拼接成完整微博话题地址,然后再向微博服务器请求⽹页HTML解析并传给客户端,最后从解析结果中获取⽬标数据,获取到⽬标话题的信息以及⽤户的信息。同时,这⼀模块还实现了获取新的URL的功能,以便下⼀阶段的数据获取。技术上来看,这部分主要分为话题地址拼接、HTML解析代码获得和⽬标数据获得三部分。在成功登陆的基础上,通过对已成话题的话题名称进⾏MD5编码或直接利⽤分类话题的代码,将其与已知的地址进⾏拼接,从⽽获取到⽬标URL地址;然后HTML代码获取部分将会从⽬标URL地址中针对⽬标数据所在标签范围获取HTML代码;最后⽬标数据获得部分分析HTML并从中抽取选定字段的⽬标数据。(3)微博数据存储模块:该部分功能是有效地存获取模块所得的数据进⼊特定数据表中,便于⽤户随时随地查看和处理。技术上来看,本模块主要是将微博数据抓取模块所得到的数据列表进⾏循环存⼊数据库中,以便⽤户对锁喉取数据进⾏相关利⽤和处理。总结技术实现,流程如下:

发布者:admin,转转请注明出处:http://www.yc00.com/news/1687982994a63580.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信