GneList 來了!抓取列表頁極其簡單!
Gne[1]發(fā)布以后,大家自動化抓取新聞正文頁的需求被解決了。但隨之而來的,不斷有同學希望能出一個抓取列表頁的工具,于是,就有了今天的 GneList。
GneList 是什么
GneList是一個瀏覽器插件,專門用來生成列表頁的 XPath。使用這個 XPath,你可以快速獲取到列表頁中的每一個條目。
GneList 怎么用?
GneList 的使用非常簡單,幾乎不需要說明。
- 打開帶有列表的頁面
- 點擊插件
- 輸入名字,點擊開始抓取
- 鼠標點擊列表的前兩項,GneList 會自動選中所有項
- 點擊提交按鈕
- 去數(shù)據(jù)庫查看 XPath
怎么安裝 GneList?
GneList 由兩個部分組成:插件端與后端。
插件端的下載地址:https://github.com/GeneralNewsExtractor/GneList/releases/download/0.1/GneList.zip
后端的代碼:https://github.com/GeneralNewsExtractor/GneListBackend ,并且后端依賴 MongoDB。
安裝后端
首先確保你有一個可以連接的 MongoDB,我們假設它的 URI 是:mongodb://localhost。從 Github上面 clone 后端的代碼:https://github.com/GeneralNewsExtractor/GneListBackend.git。
進入后端代碼的根目錄中的 config 文件夾中,你會發(fā)現(xiàn)一個local.yml文件。打開它,第一行填寫 MongoDB 的 URI 地址,第二行是數(shù)據(jù)庫名,第三行是集合名。插件生成的 XPath 會保存在這里供你的下游調(diào)用。
改好配置文件以后,回到后端的根目錄,分別執(zhí)行如下命令(你需要先安裝 Pipenv):
pipenv install
pipenv shell
export local # 你自己創(chuàng)建的 yml文件的名字
uvicorn main:app --port 8800 --host 0.0.0.0 # 使用8800端口
命令執(zhí)行完成后,如果你使用瀏覽器訪問http://127.0.0.1:8800,應該會看到下圖的內(nèi)容,說明后端搭建成功。
安裝插件
GneList 插件支持所有基于 Chromium 內(nèi)核的瀏覽器,包括但不限于 Chrome/Chromium/Edge。
從上面的地址下載GneList.zip后,把它解壓到任何一個文件夾中,如下圖所示:
然后打開你的瀏覽器的插件管理頁面,啟動開發(fā)人員模式,例如下圖是我在 Edge 中開啟開發(fā)人員模式的方法。
然后點擊右上角的加載解壓縮的擴展,選中GneList文件夾。完成。
現(xiàn)在,刷新已有的列表頁,或者重新開一個新的列表頁,然后點擊插件,試用一下吧。
管理配置頁面
在插件上右鍵,選擇擴展選項。Chrome 上面,名字可能是叫做選項或者英文Options??梢源蜷_如下圖所示的頁面:
如果你沒有啟動后端,或者后端地址不是http://127.0.0.1:8800(例如你把后端部署在服務器上,需要使用 IP 或者域名來訪問,或者端口不是8800),那么這個頁面應該如上圖所示。
你可以把輸入框中的地址改為后端地址/rule,例如http://123.56.78.99:8888/rule。然后點擊提交按鈕。接下來刷新頁面,你就可以看到如下圖所示的內(nèi)容:
這個頁面顯示了你已經(jīng)添加的所有網(wǎng)站的XPath,你可以對他們進行修改或者刪除。
Q&A
為什么插件生成的 XPath 這么奇怪?
因為這些 XPath 是從 CssSelector 轉(zhuǎn)成的 XPath,我用了一個第三方的 JavaScript 包。那個包轉(zhuǎn)出來的就是這么奇怪。但不影響它的功能。我后面會更換更好的包,讓 XPath 變得更好看。
我的爬蟲怎么使用這些 XPath?
還記得一開始配置的 MongoDB 嗎?讓你的爬蟲去里面讀取就可以了。
為什么我啟動插件以后,點網(wǎng)頁上面的元素第一次沒有反應?
第一次點擊的時候,如果發(fā)現(xiàn)沒有生成紅框框,就多點一下??吹郊t框框了再點第二個元素。
GneList 的原理是什么?
接下來的幾篇文章,我會介紹 GneList 的原理。如果你等不及的話,也可以到 Github上查看源代碼[2]。GneList 與 Gne 一樣,他們是站在其他優(yōu)秀開源項目的肩膀上做出來的,尤其是受到 web-scraper-chrome-extension[3]的啟發(fā)。因此,GneList也是完全開源的,允許非商業(yè)使用。
參考文獻
[1] Gne: https://github.com/GeneralNewsExtractor/GeneralNewsExtractor
[2] 源代碼: https://github.com/GeneralNewsExtractor/GneList
[3] web-scraper-chrome-extension: https://github.com/martinsbalodis/web-scraper-chrome-extension