在資源匱乏,搞人工智能和大數(shù)據(jù)應(yīng)用沒有數(shù)據(jù),,做社交應(yīng)用找不到用戶,,開發(fā)圖片應(yīng)用缺少圖片,的情況下,,如何冷啟動(dòng),? 最好的辦法就是做一個(gè)爬蟲,批量從互聯(lián)網(wǎng)搞“拿來主義”,。 11月2日晚上8點(diǎn),,本文作者就爬蟲話題,推出更詳盡的在線直播免費(fèi)公開課,,歡迎各位讀者掃碼聽課—— 從抓取對象進(jìn)行分類,,爬蟲大致分為三類:靜態(tài)網(wǎng)頁爬蟲、動(dòng)態(tài)網(wǎng)頁爬蟲,、移動(dòng)應(yīng)用程序爬蟲,。 下面一一展開。 靜態(tài)網(wǎng)頁爬蟲 這可以算是最古老的一類爬蟲了,,第一代搜索引擎走的就是這條技術(shù)路線?;ヂ?lián)網(wǎng)的開放性決定了,,所有我們能夠?yàn)g覽到的HTML網(wǎng)頁的內(nèi)容,都可以被爬蟲抓取到,。 靜態(tài)網(wǎng)頁是由簡單的 HTML 文本 + JS + CSS 構(gòu)成的,,開發(fā)者通常最關(guān)心HTML文本,而CSS 和 JS 仍然具有很高的使用頻率,。通過CSS,,我們可以快速定位并提取出所需要的數(shù)據(jù),,這在后續(xù)的數(shù)據(jù)清洗的時(shí)候非常有用,如果沒有CSS的id 和 class,,唯一可以利用的也許就只有html 的 tag 以及 正則表達(dá)式,,提取數(shù)據(jù)的難度會(huì)增大很多。至于說通過JS,,這是下一個(gè)故事了,。 以小象官網(wǎng)為例,用一個(gè)非常簡單的python爬蟲就可以獲取到,。 內(nèi)容精彩的網(wǎng)頁,,源代碼看起來通常是這個(gè)樣子,而我們需要的,,通常是正文部分的的核心內(nèi)容,,一般通過標(biāo)簽、CSS還有正則,,就可以提取出來,。實(shí)際上,我們可能會(huì)遇到各種復(fù)雜情況,,有些時(shí)候我們希望以自動(dòng)化的方式從中抽取內(nèi)容,,而不用人為地針對每個(gè)網(wǎng)頁,使用css 等方法來抽取,,在公開課里,,我們會(huì)介紹如何用一些算法,自動(dòng)識(shí)別正文并抽取,。 動(dòng)態(tài)網(wǎng)頁爬蟲 讓我們一起來看上面這張截圖,,它來自京東網(wǎng)站的一個(gè)頁面。請注意,,iPhone X 的價(jià)格并沒有顯示出來,。如果我們看到網(wǎng)頁的源代碼
會(huì)發(fā)現(xiàn),在原始的 HTML 里就沒有顯示價(jià)格,,那么價(jià)格數(shù)據(jù)在哪兒存放呢,?我們需要了解的是,在動(dòng)態(tài)頁面中,,HTML只是一個(gè)模板,,而頁面中的動(dòng)態(tài)信息、數(shù)據(jù),,都是由程序異步的方式填上去的,,這個(gè)程序就是javascript。 對于這樣的情況,,我們直接抓取 HTML 是沒有用的,,價(jià)格信息并不包含在 HTML 里,,所以我們需要使用一些別的技術(shù)來獲取到價(jià)格數(shù)據(jù),這里先賣個(gè)關(guān)子,。 11月2日晚上8點(diǎn),,本文作者就爬蟲話題,推出更詳盡的在線直播免費(fèi)公開課,,歡迎各位讀者掃碼聽課—— 移動(dòng)應(yīng)用程序爬蟲 在移動(dòng)互聯(lián)網(wǎng)時(shí)代,,HTML 網(wǎng)頁所提供的內(nèi)容已經(jīng)極大減少了,現(xiàn)在幾乎沒有哪個(gè)主流的應(yīng)用不支持移動(dòng)端,,倒是有很多應(yīng)用只有移動(dòng)端而沒有網(wǎng)站,,因此當(dāng)我們需要獲取此類應(yīng)用的數(shù)據(jù)時(shí),傳統(tǒng)的HTML爬蟲就不管用了,。 這一類應(yīng)用里,,爬蟲應(yīng)用最多的是微信公眾號,在公開課里,,我會(huì)講到如何抓取微信公眾號的數(shù)據(jù),。 說到微信公眾號,我們必須了解的是:移動(dòng)APP大致可分為兩大類應(yīng)用:H5 應(yīng)用及原生APP,,這兩者有什么區(qū)別呢,?H5的應(yīng)用本質(zhì)上是在本地用H5頁面進(jìn)行呈現(xiàn),也就是說,,我們所看到的應(yīng)用頁面本質(zhì)上是一個(gè)網(wǎng)頁,,比如微信公眾號就是這樣的,我們所看到的每一篇公眾號文章其實(shí)就是一個(gè)網(wǎng)頁,,APP 使用內(nèi)嵌的 WebView 來加載和渲染 HTML 網(wǎng)頁,,這其實(shí)跟瀏覽器的功能完全一樣;另一類就是原生APP了,,比如微博的瀑布流,,這里用的是native 控件來展示。使用native 控件時(shí),,布局都是在程序里預(yù)設(shè)好的,。 上面的截圖來自QQ音樂,我們看到的所有藍(lán)色部分都是動(dòng)態(tài)數(shù)據(jù),,包括中間的音樂專輯封面,。這些數(shù)據(jù)可以是本地的,也可以來自網(wǎng)絡(luò)請求,,如果從網(wǎng)絡(luò)請求,,通常是 HTTP 協(xié)議,,我們通過抓包工具可以拿到這些數(shù)據(jù),。 在native app 里,,經(jīng)常也會(huì)使用 H5 來渲染,但這跟微信公眾號是有區(qū)別的,。我們知道,,HTML相對于普通APP有一個(gè)很大的優(yōu)勢,就是復(fù)雜元素的布局上,,我們可以基于HTML的規(guī)則,,讓瀏覽器(WebView)動(dòng)態(tài)給元素布局,而在原生APP中,,沒一個(gè)元素的位置擺放,,需要程序去設(shè)定。所以,,對于圖文混合的文章來說,,使用原生APP 動(dòng)態(tài)解析、布局非常困難,,這時(shí)交給HTML 網(wǎng)頁就簡單了,。例如上面這篇網(wǎng)易新聞的文章,有標(biāo)題,、圖片,、文字,每一篇文章的標(biāo)題文字排版都不同,,通過 HTML 技術(shù),,簡單地使用下面的形式就可以解決,但使用native 的方法則會(huì)復(fù)雜很多,。 這里是一個(gè)模板,,從原始的 widget 變成了HTML,其中數(shù)據(jù)部分是單獨(dú)通過接口獲取的,,這與微信公眾號那一類完全獲取整個(gè)HTML 仍然有本質(zhì)的區(qū)別,,簡單說,就是如果抓包的話,,我們會(huì)看到的微信公眾號的數(shù)據(jù)是網(wǎng)站的HTML 網(wǎng)頁,,而在網(wǎng)易新聞客戶端,通常會(huì)看到一個(gè) JSON 格式的響應(yīng),。 為什么會(huì)有這樣的區(qū)別呢,?因?yàn)槲⑿殴娞柺敲總€(gè)公眾號平臺(tái)自己定義的,而網(wǎng)易新聞的文章格式是固定的,,所以HTML可以把模板和內(nèi)容拆開,,把模板存儲(chǔ)在應(yīng)用里,而內(nèi)容則從網(wǎng)絡(luò)獲取,,從而大大節(jié)省每次網(wǎng)絡(luò)請求的開銷,。 APP 里的內(nèi)容抓取,,無論是從內(nèi)嵌HTML還是純粹的數(shù)據(jù)接口,都會(huì)比較困難,。除了要學(xué)會(huì)抓包,、反編譯,通常還要能看懂二進(jìn)制或者混淆過的Java代碼,,能從一些蛛絲馬跡去尋找我們需要的關(guān)鍵數(shù)據(jù),。這是為什么呢?因?yàn)镠TML的解析工作是在瀏覽器上,,瀏覽器是所有網(wǎng)站共享的,,大家必須遵從HTTP 協(xié)議以及HTML 的規(guī)范,因?yàn)檫@是標(biāo)準(zhǔn)的,,也就是開放的,,所以各個(gè)網(wǎng)站能自定義的東西不多;而APP就不一樣了,,數(shù)據(jù)如何傳輸,,如何加密,格式怎么定,,都是我自己說了算,,不需要也根本就不想讓別人能看懂。 除了微信公眾號,,我還會(huì)介紹如何從淘寶,、京東、微博這些網(wǎng)站抓取數(shù)據(jù),,每個(gè)網(wǎng)站都有自己的特點(diǎn),,我們應(yīng)使用不同的方法,例如,,針對淘寶和京東,,我們可采用動(dòng)態(tài)網(wǎng)頁的方式進(jìn)行抓取,;而對于微博,,我們則直接分析它的網(wǎng)絡(luò)請求,找出微博的數(shù)據(jù)接口,,直接通過接口來獲取,,這個(gè)效率比起一般的網(wǎng)絡(luò)請求 + 解析要快得多。 最后是一個(gè)大家特別關(guān)心的問題,,就是如何應(yīng)對反爬蟲,。在這個(gè)領(lǐng)域,我們也擁有豐富的經(jīng)驗(yàn),包括Google,、微信公眾號,、馬蜂窩這些做了非常嚴(yán)格的反爬蟲措施的網(wǎng)站,我們也仍然可以做到每天10萬量級的抓取速度,,具體會(huì)在公開課介紹給大家。 既然是分布式爬蟲,,說明我們整套系統(tǒng)是基于分布式的,。分布式有非常多的好處,其中一方面就是在應(yīng)對網(wǎng)站的反爬限制上,,除此之外,,分布式系統(tǒng)還具有一些非常明顯的優(yōu)勢:
借著分布式系統(tǒng),我們也會(huì)介紹 IAAS +PAAS 這樣的技術(shù),,在實(shí)際使用中,,IAAS 這樣的虛擬化技術(shù),對于分布式爬蟲系統(tǒng)的管理和維護(hù)非常重要,。 最后,,我們會(huì)介紹爬蟲的延展應(yīng)用,比如文本抽取,、分類,、搜索等。數(shù)據(jù)的抓取和清洗以及兩個(gè)重要的文本應(yīng)用:分類與檢索,,這是幾乎任何一套包含爬蟲的數(shù)據(jù)系統(tǒng)里不可缺少的,。 通過這些內(nèi)容的介紹,我們會(huì)把整個(gè)基礎(chǔ)架構(gòu)和應(yīng)用能介紹完整,。 11月2日晚上8點(diǎn),,本文作者就爬蟲話題,推出更詳盡的在線直播免費(fèi)公開課,,歡迎各位讀者掃碼聽課——
|
|