一、背景
记录一次周末在家速成的爬虫实现之旅。受人之托,想要把这个页面http://baike.baidu.com/starrank?fr=lemmaxianhua的明星排行榜爬取下来。用chrome打开一看,其实就1000条记录。然后“右键菜单”->“检查”,看下网页的结构,也不是特别复杂。所以我目测只要用python自带的urllib2
库打开网页,获取html代码,再交给BeautifulSoup
库解析html代码,应该就可以快速搞定。
但仔细一看,点击下一页,网页的url没有任何变化,只是用js去加载了新的数据,然后动态地改变了table里面的数据。这可和本菜菜以前爬的页面可不一样,所以这次要想办法模拟翻页,然后重新读取新的html代码,再去解析。
实现翻页可以有两种办法,第一种是分析js的实现来模拟翻页。翻页操作实际上js向后台发出了请求,这里肯定是带着跳转的目的页码请求了后台,然后拿到新数据后重新渲染了html的表格部分。这种方法会更加高效,但难度也会更大一些。因为如果你已经能够模拟请求了,那其实相当于你连人家的服务器接口都已经知道了,那么进一步分析下响应就可以拿到结果了,这甚至不需要再去分析html代码了是不是?第二种比较简单暴力,也是我这里用的方法,那就是模拟点击网页中的下一页按钮,然后重新读取html代码来解析。
二、思路
在前面已经说了,这里把思路流程化:
- 1.打开网页
- 2.读取当前页面的html代码,解析列表里面的明星名字
- 3.模拟点击“下一页”
- 4.重复第2步的工作,直到页面里没有“下一页”的按钮
在这里打开网页和读取网页的html代码,是通过selenium
实现的;
解析html代码,是通过beautifulsoup
实现的。
三、实现
1.准备工作,安装依赖库
- 安装beautifulsoup
在下用的是mac,所以直接easy_install命令行安装。
|
|
- 安装selenium
还是用easy_install命令装。
|
|
这里selenium版本已经到了3.0.2,想要用这个版本的selenium去打开一个网页,需要用到对应的driver。于是下面我还需要安装一个driver。
- 安装chromedirver
我这里用的是homebrew安装的chromediver,安装完成后大家记得找到chromediver的安装目录,我们在下面去写代码的时候会用到的。
|
|
注意:mac下有很多软件管理包,除了我的安装方法,用
pip
之类的去安装,或者直接去官网下载安装程序,都是可以的。但是一定要安装上面的3个程序才行。这里我突然有个想法,要是python也有像gradle一样的构建管理工具多好,讲真,今天我安装这几个依赖的library花的时间比写代码还多呢。。
2.分析网页
简单贴一段我要爬的网页的部分html代码,里面我用//写了点注释:
|
|
3.完整代码
|
|
四、小结
这里只是简单记录一次稍微复杂点的网页爬取的实现思路,关于selenium和beatifulsoup,还有很多的用法,我还没仔细看过。下面是一些参考资料,以后有机会还要多学习一下。
- Python爬虫利器二之Beautiful Soup的用法:介绍了安装bs的方法,以及不同的parser,如html5、xml有什么区别。
- Beautiful Soup 4.4.0 文档:其实bs支持不同语言,这次写python就是因为代码少,但是安装依赖确实是麻烦。
- selenium官网:selenium其实有官方的IDE,也支持不同的语言。