资料爬虫是资料分析的入门砖,Python 更是资料爬虫的热门工具。因为热门,所以也会有许许多多相关的配套工具出现。但对于新手来说,该如何寻找到适合的工具其实是很麻烦的。这一篇文章会介绍一下几个比较主流的相关工具,与他们适合的使用时机。
/ urllib
Requests 或是 urllib 这两个套件都是用于处理 HTTP 协定的工具。 urllib 是内建于 Python 有比较完整的 HTTP 的功能(包含网址编码、档案下载之类的),Requests 则比较着重在友善地处理 Request/Response 的传输。
/
BeautifulSoup 与 Pyquery 是用在接到 HTML 字串的 Response 之后,要如何将他们解析为一个 DOM base 的物件使用。 lxml 跟 html5lib 是两个作为读懂 HTML 字串的解析器(parser)。这两个套件都支援使用类似 css selector 的方式找资料。
Xpath
XPath 是基于 XML 格式的定位技术,也可以将 HTML 视为是 XML 的方式处理,再使用 XPath 找到需要的资料。
Selenium 原本是用于网页测试的浏览器模拟工具。但随着动态网页/AJAX 的技术方法,仅透过 Requests 的话会遇到 JavaScript loading 的问题,因此可以搭配 Selenium 这样的浏览器模拟工具,来达到执行 JavaScript 的效果。
原本的 Selenium 模拟工具需要调用实体的浏览器,像是 Chrome、Firefox 之类的,会造成资源与效能的问题。 PhantomJS 则是一个在 Selenium 中的虚拟浏览器方案,可以在不须打开实体浏览器的情况下进行模拟。
前面提到的 Selenium 是为了解决无法执行 JavaScript 的动态网页问题,是透过真的模拟浏览器的运作来处理。 Ghost 则是透过 Python 中来模拟 JavaScript 的程式,达到动态产生资料的目标。
前面讲的主要是「基于一个网页的资料撷取爬虫」,而 Scrapy 则是一个爬虫的框架,目标是想要一次将多个网页都爬取下来。
Pyspider 提供了 Web UI 操作页面的爬虫框架,他也能支援多个网页的下载。
小结
以上这些爬虫工具大致可以分为几个类型:
- 静态网站的资料取得:Requests / urllib
- 网页资料的解析爬取:BeautifulSoup / Pyquery / Xpath
- 动态网站的资料取得:Selenium / PhantomJS / Ghost
- 多页面的爬虫框架:Scrapy / Pyspider
License
本著作由制作, 以授权条款释出。