【爬虫初探】新浪微博搜索爬虫总览

不知在那个群里面看到的消息:请问如何抓取近几个月来大蒜的价格?
Oh!My!God!卖大蒜的农夫现在都需要用到数据抓取、数据分析来制定销售策略销售计划等等,IT行业的程序员们以及我们这种类似IT行业的GISer们对数据的需求自然不用说,同时,找工作、找学校、找房东,都可以用到数据抓取,数据抓取是一个很有意思的事情。
一直以来都希望学一学数据抓取,但一个重度拖延症患者的拖延水平简直是要上天了…2014年底定下的学习计划,现在还没有完成…这一次,受同学的委托,需要写一个新浪微博的搜索爬虫,这才开始逐渐深入了解爬虫,不过也印证了一句话——项目是最好的学习!

之前只写过百度百科的爬虫,只是知道一个基本的爬虫架构由爬虫调度、url管理、网页下载、网页解析等几部分组成,最基本的库有下载网页的urllib2、解析网页的BeautifulSoup,当时too young too naive的我,以为只要通过这些就能实现新浪微博的搜索爬虫,于是照葫芦画瓢开始每个部分的编码,问题自此层出不穷。
这里写图片描述

首先是登陆问题,百度百科是不需要登陆的,而新浪微博的搜索结果中,虽说不登录也能搜索,但是所有结果的呈现必须是要求登陆的,而且还要考虑到新浪微博的反爬虫机制,如果被禁了怎么办…(事实证明后面也遇到了这个问题),在这里推荐kingname的一系列爬虫课程。
相比之下,登陆还算是小问题,源码问题着实让我愁了几天。百度百科的源码是清晰的,所有可见的内容都在HTML节点中清清楚楚。
百度百科源代码:
百度百科源码

而新浪微博的数据,虽说在审查元素中也能很清晰地展现,但是源代码!源代码!源代码中都是些什么东西!
新浪微博审查元素:
审查元素
新浪微博源代码:
这里写图片描述

经过查阅发现,新浪微博在2011年使用bigPipe技术对网页进行了改版,JS工程师把页面分割成若干个小块(pagelet),模块彼此独立,把html语言转变为JS语言,再把CSS通过style的方式加载进这段代码,而不需要用以往的头部link css地址的方式取样式。每个模块有自己对应的html、CSS、JS,一旦开始运行模块,就会寻找到对应的CSS,并显示对应innerHTML内容插入到对应的html元素中,同时渲染出本模块效果。比如执行到feed区域的 id=”pl_content_homeFeed”时,样式表只调用了feed.css。这样能够加快呈现速度,减少视觉等待。

在这里需要说明一下,一般来说,数据抓取工作主要有两种方式:一是通过抓包工具(Fiddle)进行抓包分析,获取ajax请求的URL,通过URL抓取数据,这也是更为通用、推荐的方法;另外一种方法就是后面要使用的模拟浏览器行为的爬虫。

那么,在源代码中信息不可见的情况下,通过什么方法能够提取JS代码中的HTML代码用以解析呢?普通的BeautifulSoup肯定是不行了,这样的后端解析的情况,只有上浏览器引擎了!模拟浏览器的行为,通过渲染引擎(也就是浏览器内核)将后端JS代码进行渲染,进而获取到DOM用以信息的提取。

一番查阅后了解到,浏览器测试工具Selenium+Firefox/PhantomJS能够完成这项工作(找到这些的时候简直要哭了)。Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。与Selenium兼容性最好的就是Firefox了,运行过程中能够通过Firefox看到运行过程,但Firefox的缺点在于运行速度太慢,所以一般来说,使用Firefox用于调试代码,运行的时候使用PhantomJS能加快速度。

经过一系列编码调试后,解决了验证码输入、Selenium使用、DOM节点解析等一系列问题,完成了使用Selenium+Firefox进行新浪微博搜索结果的数据抓取工作。

具体的技术讲解请详见下一篇博客

最后,做一个积极主动的人,这是现代人极其珍贵的品质,与大家共勉。

(By MrHammer 2016-05-02 下午两点 @Bin House Rainy)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值