【在主画面加入捷径】
       
【选择语系】
繁中 简中

Selenium 网络爬虫教学:基础概念

WEB
【赞助商连结】

    本文短短的内容无法让读者变成网络爬虫的专家,但可知道如何开始,以继续学习。

    网络爬虫的用途在于自动化浏览网站、操作网页及抓取数据的过程;像是 Google 或 Bing 等搜寻引擎,每日要爬取大量的网站,以建立搜寻引擎所需的索引,由于网站多、数据量大,手动操作变得不切实际,这时候就会用爬虫做为自动化抓取网页数据的一部分。即使对于一般使用者来说,网络爬虫可重覆操作的特性,搭配类 Unix 系统的 cron 或其他系统排程软件就可以省下许多机械性的手工。

    网页主要由 HTML、CSS、JavaScript 等前端技术所组成,基本上就是浏览网页源代码时会看到的东西。如果想要学习网页爬虫,不用精通这三者,但至少要能阅读大部分的 HTML 标签和 CSS selectors。由于直接阅读网页源代码较困难,而且有些由 JavaScript 动态生成的页面无法直接靠阅读网页源代码取得;使用浏览器内附的开发者工具,可用来辅助我们阅读网页源代码,因为可以透过开发者工具的视觉提示,得知目前的标签位于网页上的什么位置;而且页面改变时,开发者工具内的程序代码也会跟着改变。

    对于爬虫新手来说,一开始通常从 requests 这类 HTTP clients 开始学,但使用 Selenium 反而是最简单的。因为有些网站会透过网页的 header 确认目前浏览网页的使用者 (user) 是人 (human) 还是机器人 (bot),一般的爬虫没有浏览器特有的 header,要自行加入,但 Selenium 是透过浏览器来存取网页,没有 header 的问题。另外,有些网站会透过 cookie 等客户端数据 (client data) 来确认使用者的状态,这在一般的 HTTP clients 也要另外处理,但 Selenium 程序是直接使用现有的浏览器,这些问题可自动处理。

    理论上 Selenium 适用于所有的情境,但有时候效率不一定是最好的,对于多页面且网址变动规律的静态页面,使用 requests 等 HTTP clients 搭配 BeautifulSoup 这类 HTML 解析器 (parsers) 会比使用 Selenium 快得多。相对来说,表单 (forms) 或是由 JavaScript 动态生成的页面,以 requests 等传统的 HTTP clients 相对不易处理,这时候就可以考虑使用 Selenium。

    如果碰到网页改版时,原有的爬虫可能会失效,这时候就要重新撰写爬虫。虽然爬虫的理想是全自动化处理,但有时仍要手动修改程序。如果不想自己撰写爬虫,但又时常有这方面的需求,也可透过外包网站找寻长期合作的工程师。一般来说,一个不要太复杂的爬虫应可在数天内完成。

    本系列文章大部分使用 Python。透过以下指令可安装适用于 Python 的 Selenium 套件:

    $ pip install selenium
    

    另外还要针对使用的浏览器安装相对应的 web driver,我们会使用 Chrome,这部分请读者自行完成。

    Selenium 程序的执行流程大抵如下:

    1. 设置偏好,像是下载位置等
    2. 选定 web driver
    3. 前往目标网页
    4. 操作网页
    5. 从链接下载数据或从页面本身取得数据

    大部分核心的工作会落在 (4),少数会在 (5)。一开始写爬虫碰到困难通常不是 Python 语法的问题,而是不知道怎么有效率地观察网页。笔者目前偏好用 Chrome 的开发者工具协助观察页面,如下图:

    Chrome Developer Tool

    新版的 Chrome 或其他浏览器可在网页元件上按右键选「检查」,就可以直接观察页面对应的网页元素。要如何定锚网页元素呢?这个只能见招拆招,还要请读者多练习几次,原则就是用较具独特性的 classid、属性 (attribute) 将网页元素的范围逐一缩小到单一的元素即可。

    TAGS: SELENIUM