基于Python的微信公众平台数据爬虫

2019-10-14 00:42
福建质量管理 2019年17期
关键词:爬虫浏览器网页

(重庆交通大学 重庆 400074)

引言

信息技术的进步和人工智能的到来使人们的生活方式逐渐发生改变,社交网络的高速发展和形式变迁就是一个非常突出的例子。在大数据时代,社交网络产生的数据就像一个巨大的宝库,这吸引了大量的研究人员参与到相关内容的研究。在国外,人们针对Twitter、Facebook等知名社交平台展开了一系列的分析。但是针对国内社交网络平台的研究还比较欠缺。主要是缺乏相关的研究数据,使得一些研究难以开展。在国外Twitter等社交平台会提供一些数据接口供研究人员获取研究数据,但是在国内却无法正常访问这些接口。如此之大的一个社交平台为社交网络分析、网络数据挖掘等研究提供了强有力的大数据支持。

目前微信公众号注册量巨大,然而微信公众平台并没有提供相关的数据接口,没有数据,一些研究分析工作也无法进行。目前网络中也存在一些公开的微信公众号数据供人们下载,但是这些数据集通常规模比较小,而些技术力量强劲、资源充足的研究团队通常自己开发一些爬虫来获取研究数据。这对不熟悉爬虫技术的且还缺乏实时性。有研究人员而言是个极大的挑战。本文提出了一款基于Python语言的微信公众号数据爬虫,为数据获取提供支持。

本文爬虫通过模拟客户端的操作如登录、访问关注量、查看历史消息、查看消息内容等方式获取相关数据,并且将这些数据持久化保存到本地硬盘上,方便后续进一步的数据挖掘与分析。使用本文爬虫能够节省分析人员的开发时间,使得他们可以将更多的精力放在数据分析上面,同时也可以对一些无用的数据起到过滤作用。

一、爬虫相关原理

想要爬取某些网站的数据需要一些手段才能实现,因为并非所有人都希望自己的成果被别人轻易地复制据为己有,但是在不违反道德和法律的基础上,仅用于个人能力提升和学术上的研究以及在不影响他人利益的情况下自己获利进行网页数据爬取是很有必要的。

首先找到目标数据网页并发送请求,获取响应内容,分析目标数据所对应的URL(统一资源定位符),找到目标数据在网页源代码中的位置,然后用正则表达式锁定要选取的内容下载数据存到本地,清洗数据,最后保存数据。

(一)发送HTTP请求

进行网页数据爬取的第一步是得到该网页的URL,有了URL之后用Python向服务端发送HTTP请求。

一般的网页信息的爬取请求方式是get,如果需要填写表单才能进一步获取资源请求方式是post。在专业领域中还有更多请求方式,一般有四种基本请求方式,即get,post,put,delete,本文主要涉及get请求和post请求。一般的网站专业人士认为get请求和post请求的本质的区别在于,get请求主要用于获取、查询资源信息,post请求主要用于更新(修改)资源信息。

(二)HTTP请求响应

当用户向服务端发送了请求之后,服务端会根据HTTP协议中的定义解析出请求的东西然后发送给用户。每一次响应都会有一个相对应响应状态,响应成功对应的响应码是200,其他的一般都是响应错误。

(三)正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

正则表达式能从一大堆信息中提取本文想要的信息。构造正则表达式是得到网页源代码之后非常重要的一步,构造正则表达式需要观察网页源代码的特征,正则表达式中的字符表达基本上有下面这些:

二、爬虫算法模块

(一)主要模块

1.re模块

re模块就是正则表达式对应的模块,可以直接选取本文需要的资源,这里主要用了re模块下的re.compile(A).findall(B)函数,参数A是本文按照自己需求构造的正则表达式用来提取有用的资源,参数B是所有资源

2.urllib模块

urllib模块有很多功能,其中本文主要涉及到的函数或功能有urllib.request下面的urlopen,build_opener,install_opener,ProxyHandler,retrieve等。

urllib模块是整个基础爬虫中最重要的模块之一,本文主要引用了urllib模块进行爬虫有关操作,当然也有其他模块和框架(scrapy项目框架)可以进行爬虫,在此暂时不做考虑。

(二)应对反爬虫机制

在对某些网站进行爬取的时候会遇到一些反爬机制,所谓反爬机制就是指对方不希望别人用除浏览器以外的途径去获取该网站的信息或者不希望该网站的数据被某些人用于商业用途从而制作的一些拒绝爬取的手段。本文主要讲的有两种反爬机制分别是,网站拒绝除浏览器以外的访问方式和网站拒绝反复多次提供数据给同一IP地址.针对第一种常见的解决方案是构建用户代理或者用户代理池,针对第二种情况则是构建IP代理或者IP代理池。

(三)用户代理池

用户代理(User Agent),简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等.一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。

用户代理池由多个用户代理构成,从里面随机选取一个用户代理来应对相应的错误.

(四)IP代理池

高频抓取某个网站的数据,很有可能就被网站管理员封掉IP,导致抓取数据失败,解决这个问题最直接,简单的方法就是使用代理IP。目前网上有不少提供付费代理IP的平台,但是如需长期使用,该方案是笔不少的开销。本项目通过抓取IP代理网站提供免费代理IP,并不间断的验证IP的有效性,根据代理IP验证的历史记录对IP进行评估,输出高质量代理IP。

三、Python数据爬虫操作

(一)微信登录

微信公众号平台数据需要在登录的情况下才能访问到,所以微信公众号登录是爬虫需要解决的第一个问题。微信公众号一般有以下几个步骤:

1.客户端向用户服务器发送登录请求;

2.服务器接收到登录请求后会生成相应的密钥返回给客户端;

3.客户端将用户的用户名、密码以及中服务器发回的登录密钥结合在一起再向服务器提交登录信息,服务器验证成功之后将会返回正确的登录状态以及当前用户的个人信息。成功登录之后客户端只需要保持与服务器的session会话就可以方便地访问微信公众号中的数据资源。

(二)微信公众号正文内容抓取

本文爬虫针对用户的微信公众号内容提供了相应的抓取方法。一种方法是:本文爬虫可以将用户的所有微信公众号内容全部以文件的形式完全记录到磁盘,但是这样做就需要很多的物理存储空间才能将如此之多的用户数据保存下来。另一种方法是:本文爬虫提供了简单的字符串匹配功能,在抓取用户微信公众号内容的过程中会根据需要匹配的关键字进行匹配,如果发现匹配成功的爬虫会将该数据内容保存到磁盘。这样研究人员就可以有针对性地进行相关研究和分析。

(三)某微信公众号的爬虫数据分析

通过对某一微信公众号的数据进行爬虫,从网页上爬取文本数据之后可以进行一系列的分析,以关键词出现频率为例画出词云图。相对传统的统计图有更好的观赏性,并且清晰直观的看出此微信公众号的主要内容与CNN卷积神经网络,运算,领导等关键词有关,可以粗略推断本文爬取的公众号是与人工智能和数据科学有关的公众号。

四、结论与展望

在本文利用Python数据爬虫对微信公众号数据进行爬取中,选出爬取文本中高频出现的词汇,并用词云图的形式表示出来,由于其清晰明了的可视化效果,可以为初学者的统计分析提供分析方向。

大数据时代,对大数据的分析应当成为一个行业,数据拥有者应该开放数据的分析接口,让数据的价值释放,而爬虫开发者,很多时候是数据分析者,最起码是个数据清洗和筛选者。他们蒙上了一层神秘面纱,带着一丝黑客气息,法律应当给他们更大的生存空间,让这个有价值的行业创造更大的价值。

猜你喜欢
爬虫浏览器网页
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
反浏览器指纹追踪
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
大数据背景下校园舆情的爬虫应用研究
基于URL和网页类型的网页信息采集研究
大数据环境下基于python的网络爬虫技术
环球浏览器
网页制作在英语教学中的应用