Web Scraper 高級用法——抓取表格數據 | 簡易數據分析 11


這是簡易數據分析系列的第 11 篇文章。

今天我們講講如何抓取網頁表格里的數據。首先我們分析一下,網頁里的經典表格是怎么構成的。

  • First Name 所在的行比較特殊,是一個表格的表頭,表示信息分類
  • 2-5 行是表格的主體,展示分類內容

經典表格就這些知識點,沒了。下面我們寫個簡單的表格 Web Scraper 爬蟲。

1.制作 Sitemap

我們今天的練手網站是

http://www.huochepiao.com/search/chaxun/result.asp?txtChuFa=�Ϻ�&txtDaoDa=����

爬蟲的內容是抓取上海到北京的所有列車時刻表。

我們先創建一個包含整個表格的 container,Type 類型選為 Table,表示我們要抓取表格。

具體的參數如上圖所示,因為比較簡單,就不多說了。

在這個面板下向下翻,會發現多了一個不一樣的面板。觀察一下你就會發現,這些數據其實就是表格數據類型的分類,在這個案例里,他把車次、出發站、開車時間等分類都列了出來。

Table columns 這個分類里,每一行的內容旁邊的選擇按鈕默認都是打勾的,也就是說默認都會抓取這些列的內容。如果你不想抓取某類內容,去掉對應的勾選就可以了。

在你點擊 Save selector 的按鈕時,會發現 Result key 的一些選項報錯,說什么 invalid format 格式無效:

解決這個報錯很簡單,一般來說是 Result key 名字的長度不夠,你給加個空格加個標點符號就行。如果還報錯,就試試換成英文名字:

解決報錯保存成功后,我們就可以按照 Web Scraper 的爬取套路抓取數據了。

2.為什么我不建議你用 Web Scraper 的 Table Selector?

如果你按照剛剛的教程做下里,就會感覺很順利,但是查看數據時就會傻眼了。

剛開始抓取時,我們先用 Data preview 預覽一下數據,會發現數據很完美:

抓取數據后,在瀏覽器的預覽面板預覽,會發現車次這一列數據為 null,意味着沒有抓取到相關內容:

我們下載抓取的 CSV 文件后,在預覽器里打開,會發現車次的數據出現了,但出發站的數據又為 null 了!

這不是坑爹呢!

關於這個問題我調查了半天,應該是 Web Scraper 對中文關鍵字索引的支持不太友好,所以會拋出一些詭異的 bug,因此我並不建議大家用它的 Table 功能。

如果真的想抓取表格數據,我們可以用之前的方案,先創建一個類型為 Element 的 container,然后在 container 里再手動創建子選擇器,這樣就可以規避這個問題。

上面只是一個原因,還有一個原因是,在現代網站,很少有人用 HTML 原始表格了

HTML 提供了表格的基礎標簽,比如說 <table><thead><tbody> 等標簽,這些標簽上提供了默認的樣式。好處是在互聯網剛剛發展起來時,可以提供開箱即用的表格;缺點是樣式太單一,不太好定制,后來很多網站用其它標簽模擬表格,就像 PPT里用各種大小方塊組合出一個表格一樣,方便定制:

出於這個原因,當你在用 Table Selector 匹配一個表格時,可能會死活匹配不上,因為從 Web Scraper 的角度考慮,你看到的那個表格就是個高仿,根本不是原裝正品,自然是不認的。

3.總結

我們並不建議直接使用 Web Scraper 的 Table Selector,因為對中文支持不太友好,也不太好匹配現代網頁。如果有抓取表格的需求,可以用之前的創建父子選擇器的方法來做。

4.推薦閱讀

簡易數據分析 10 | Web Scraper 翻頁——抓取「滾動加載」類型網頁

5.聯系我

因為文章發在各大平台上,賬號較多不能及時回復評論和私信,有問題可關注公眾號 ——「鹵蛋實驗室」,(或 wx 搜索 egglabs)關注上車防失聯。

img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM