關於爬蟲,大家下意識地就會想到 Python,畢竟 Python 有太多方便的模組、框架可以使用在爬蟲的過程,今天先來介紹一些必要/好用的工具。
就如同其他熱門的程式語言一樣,Python 社群也有許多前輩大大們創造的開源模組,其中今天介紹的有 requests / BeautifulSoup / selenium。
requests 是 Python 中 HTTP request 最常見的的模組,不論是 API 串接、爬蟲都是廣為社群所運用的模組。
爬蟲流程中最重要的一環就是解析回傳的 HTML,通常收到的 HTML 都是以字串或位元的格式存在,但在爬蟲的過程中,我們的目的通常為擷取某個 HTML Tag 當中的資訊,這個時候字串與位元並不利於特定 Tag 的定位(當然也可以利用正則表達式的方式進行擷取),因此就出現了 BeautifulSoup 這個模組,他可以將包含 HTML 的字串轉換成 Tag 形式,並利用其相關的函數定位擷取目標資訊。
lxml 與 BeautifulSoup 一樣皆為 HTML 解析工具,一樣是以 HTML 節點作為定位,經常搭配 XPath 進行定位。有一種說法是 lxml 的效率會比 BeautifulSoup 來得高,但由於沒有研究過兩的模組的原始碼,無法進行評斷。
Selenium 本身為一個控制瀏覽器的工具,而與之同名的 selenium 模組,則是利用 Python 語法對瀏覽器進行操作,主要的用途是在模擬人為操作瀏覽器的動作,以及對動態網站的模擬。這裡會在之後講解動態網站爬蟲時多加敘述。
Python 爬蟲中有許多的框架可以使用,其中較知名的有 Scrapy / Pyspider,由於筆者較熟悉 Scrapy,以下只對 Scrapy 做間單的介紹。
Scrapy 是由 Scrapyhub 開發的開源框架,他整合了爬蟲時所需的所有功能,從 redirect / Proxy IP / DB connection 等一切爬蟲的流程都納入整個框架中,你唯一需要做的就是在裡面進行設定,然後輸入 run,一切的資料就出現在資料庫中。
為什麼 Chrome 是我們重要的工具之一呢?在爬蟲的過程,觀察封包傳遞的訊息、位置及頗析 HTML 架構是非常重要的。而 Chrome DevTool 是強而有力的工具。
我們將在明天運用 requests 和 lxml 進行一個簡單的爬蟲。說了這麼多,今晚的啤酒也見底了,我們明天見!