當前位置:
首頁 > 最新 > 數據通靈術之爬蟲技巧

數據通靈術之爬蟲技巧

俗話說"巧婦難為無米之炊"。如果你是一個數據忍者,卻因為沒有數據而煩惱,這卷"數據通靈術"或許是你需要的。首先你要看透術名那華麗的外衣,它的真面目是:爬蟲技巧。

此卷通靈術包含了爬蟲的基礎入門術,動態載入破解術,登陸破解術,以及額外贈送的手機APP爬取篇。

爬蟲簡介

簡單來說,爬蟲就是從網上自動下載網頁,經過解析處理得到你想到要的數據。 這裡的步驟和關鍵詞有兩個:下載, 解析。本文的所有技巧也都是圍繞這個兩個關鍵詞。

入門篇

大多數的爬蟲都是爬取網頁上的數據。新手入門,就先搞清楚網頁到底是什麼。網頁的源代碼其實就是純文本,包含了HTML, CSS 和 JavaScript 。

HTML: 標記語言,只有語法,沒有變數和邏輯,不能稱之為編程語言。

CSS: 層疊樣式表,控制元素的展現形式。

JavaScript: 腳本語言,可以動態操作HTML中元素的增刪改。

一般來說,數據是在HTML元素中(否則你看不見它)。詳細的HTML介紹可以參考W3School的 HTML 教程。

下載術

在R語言或Python中下載網頁是很簡單的。以下的兩行代碼,使用R的

readLines函數讀取了豆瓣電影 Top 250 的網頁源碼:

html_lines=readLines( https://movie.douban.com/top250 )

doc=paste0(html_lines,collapse= )

其他的R包也有類似的函數,如RCurl::getURLhttr::GET。Python中的標配是requests模塊。讀文檔,不細講。

解析術

下載後的純文本是類似下邊的HTML標籤,然而你需要的只是電影名稱。

肖申克的救贖

/The ShawshankRedemption

/月黑高飛(港) /刺激1995(台)

解析術就是將所需數據抽取出來的技巧。接下來介紹三種方法: 正則表達式,Xpath 和 CSS選擇器。這些技巧都是通用的,基本不需要考慮編程語言的選擇,都會支持的。

正則表達式

正則表達式是通過描述文本規則來達到抽取目的。承接上文的豆瓣電影,使用正則來抽取電影名字:

#匹配包含class="title"字元的行 無關正則

title_lines=grep( class="title" ,html_lines,value=T)

#用正則抽取>字元和

titles=gsub( .*>(.*?)

如果想看看第二行的效果,可以試試下邊的代碼:

gsub( .*>(.*?)

肖生克的救贖",perl=T)

其中.*>(.*?)

這個例子包含了正則中的通配符,貪婪匹配和懶惰匹配,以及分組的概念。看你骨骼驚奇,送你這本正則表達式30分鐘入門教程秘籍http://deerchao.net/tutorials/regex/regex.htm。學成歸來之後,再來讀讀R語言中的正則表達式https://github.com/yihui/r-ninja/blob/master/04-character.Rmd#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F吧。

XPath

XPath是XML路徑語言,適用於HTML和XML這兩種標記語言。了解HTML的樹狀結構之後,便自可得其精髓。

下邊的代碼試用xml2::read_html函數解析下載的網頁源代碼,接下來使用XPath語言尋找所有包含class="title"屬性的span標籤。

library(xml2)

dom=read_html(doc)

title_nodes=xml_find_all(dom, .//span[@class="title"] )

xml_text(title_nodes)

深入學習XPath可參考HTML DOM 教程http://www.w3school.com.cn/htmldom/和XPath 教程http://www.w3school.com.cn/xpath/index.asp。

CSS選擇器

CSS選擇器是通過標籤的CSS屬性達到篩選的目的。類似與XPath,它同樣需要先將純文本解析成DOM文檔,再進行選擇操作。

這裡借用rvest包來實現,篩選出class="title"的標籤並拿到標籤內的文本。

讀讀CSS 元素選擇器教程http://www.w3school.com.cn/css/css_selector_type.asp,可以學到更多用法。另外,這個一邊學一邊練習的小網站http://flukeout.github.io/也很帶感呢。

三種技巧相比之下,XPath的CSS選擇器明顯簡單易用,但它們只適用於HTML和XML文檔。正則表達式雖然規則複雜,但及其強大。利劍在手,任君選擇。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 統計之都 的精彩文章:

TAG:統計之都 |