Web scraper自動收集通常只能通過瀏覽器訪問網站才能訪問的信息和數據。通過自主地這樣做,web抓取腳本在數據挖掘、數據分析、統計分析等方面打開了一個可能性的世界。
我們生活在一個比任何時候都更容易獲得信息的時代。用來傳遞你正在閱讀的這些單詞的基礎設施是一個通往更多知識、觀點和新聞的渠道,這是人類歷史上人們從未接觸過的。
事實上,即使最聰明的人的大腦被提高到100%的效率(應該有人為此**一部電影),光是在美國,仍然無法容納互聯網上存儲的1/1000的數據。
Cisco在2016年估計,互聯網流量超過了1個zettabyte,即1000000000000000000字節,或者1個sextillion字節(繼續,對著sextillion傻笑)。一個zettabyte是流媒體Netflix的四千年曆史。這就相當於,如果你,勇敢的讀者,從頭到尾不停地瀏覽辦公室50萬次。
所有這些數據和信息都非常嚇人。不是所有的都是對的。這些信息與日常生活的關係不大,但越來越多的設備將這些信息從世界各地的服務器傳送到我們的眼睛和大腦。
由於我們的眼睛和大腦不能真正處理所有這些信息,網絡抓取已經成為一種有用的方法,通過編程從互聯網收集數據。Web抓取是一個抽象的術語,它定義了從網站中提取數據以將其保存在本地的行為。
想想一種類型的數據,你也許可以通過抓取網頁來收集它。房地產清單、體育數據、你所在地區企業的電子郵件地址,甚至你最喜歡的藝術家的歌詞,都可以通過編寫一個小腳本來查找和保存。
要理解web scraper,我們首先需要了解web是如何工作的。要訪問此網站,請鍵入“makeuseof.com網站“或者您單擊了另一個網頁的鏈接(告訴我們在哪裡,說真的,我們想知道)。不管怎樣,接下來的幾個步驟都是一樣的。
首先,你的瀏覽器將獲取你輸入或點擊的網址(專業提示:在點擊之前,將鼠標懸停在鏈接上方,查看瀏覽器底部的網址,以避免受到朋克攻擊),並形成一個“請求”發送到服務器。然後服務器將處理請求併發送響應。
服務器的響應包含HTML、JavaScript、CSS、JSON和其他數據,這些數據允許您的web瀏覽器形成一個供您查看的網頁。
現代瀏覽器允許我們瞭解這個過程的一些細節。在Windows上的googlechrome中,您可以按Ctrl+Shift+I或右鍵單擊並選擇Inspect。窗口將顯示如下屏幕。
選項的選項卡列表列在窗口的頂部。現在感興趣的是網絡標籤。這將提供有關HTTP流量的詳細信息,如下所示。
在右下角,我們看到了有關HTTP請求的信息。URL是我們所期望的,而“method”是一個HTTP“GET”請求。響應中的狀態代碼列為200,這意味著服務器認為請求有效。
在狀態碼下面是遠程地址,這是服務器的面向公眾的IP地址makeuseof.com網站服務器。客戶端通過DNS協議獲得這個地址。
下一節將列出有關響應的詳細信息。響應頭不僅包含狀態代碼,還包含響應包含的數據或內容的類型。在本例中,我們將使用標準編碼查看“text/html”。這告訴我們,響應實際上是呈現網站的HTML代碼。
此外,服務器可以返回數據對象作為對GET請求的響應,而不是隻返回HTML供web頁面呈現。網站的應用程序編程接口(或API)通常使用這種類型的交換。
仔細閱讀如上所示的Network選項卡,您可以看到是否存在這種類型的交換。調查CrossFit開放式排行榜時,會顯示用數據填充表格的請求。
通過單擊響應,將顯示JSON數據,而不是呈現網站的HTML代碼。JSON中的數據是一系列標籤和值,它們位於一個分層的、輪廓分明的列表中。
手動解析HTML代碼或遍歷數以千計的JSON鍵/值對非常類似於讀取矩陣。乍一看,這看起來像胡言亂語。信息可能太多,無法手動解碼。
現在,在你要求藍色藥丸離開這裡之前,你應該知道我們不必手動解碼HTML代碼!無知不是幸福,這牛排很好吃。
網絡刮板可以為您執行這些困難的任務。抓取框架有Python、JavaScript、Node和其他語言。一個最簡單的方法開始刮是使用蟒蛇和美麗的湯。
只要安裝了Python和BeautifulSoup,入門只需要幾行代碼。這裡有一個小腳本,以獲得一個網站的來源,讓BeautifulSoup評估它。
from bs4 import BeautifulSoupimport requestsurl = "http://www.athleticvolume.com/programming/"content = requests.get(url)soup = BeautifulSoup(content.text)print(soup)非常簡單,我們向一個URL發出GET請求,然後將響應放入一個對象中。打印對象將顯示URL的HTML源代碼。這個過程就像我們手動訪問網站並單擊“查看源代碼”。
具體來說,這是一個網站,張貼交叉適合風格的鍛鍊每天,但只有一天。我們可以構建我們的scraper來獲取每天的訓練,然後將其添加到訓練的彙總列表中。基本上,我們可以創建一個基於文本的訓練歷史數據庫,以便輕鬆搜索。
BeaufiulSoup的神奇之處在於,它能夠使用內置的findAll()函數搜索所有HTML代碼。在這個特定的例子中,網站使用了幾個“sqs block content”標籤。因此,腳本需要遍歷所有這些標記並找到我們感興趣的標記。
此外,該節中還有許多標記。腳本可以將每個標記中的所有文本添加到局部變量中。為此,請向腳本中添加一個簡單的循環:
for div_class in soup.findAll('div', {'class': 'sqs-block-content'}): recordThis = False for p in div_class.findAll('p'): if 'PROGRAM' in p.text.upper(): recordThis = True if recordThis: program += p.text program += ''瞧!刮網器誕生了。
前進有兩條路。
探索web抓取的一種方法是使用已經構建的工具。網站刮刀(偉大的名字!)擁有200000用戶,使用簡單。此外,Parse Hub允許用戶將蒐集的數據導出到Excel和Google工作表中。
此外,webscraper還提供了一個Chrome插件,可以幫助可視化網站的構建過程。從名稱來看,最棒的是OctoParse,它是一個強大的刮刀,具有直觀的界面。
最後,既然你已經瞭解了網頁抓取的背景知識,提高你自己的小網頁抓取器,使其能夠自己爬行和運行是一個有趣的嘗試。
...瀏覽。如果你認為這是一個有用的工作位,那麼你會喜歡什麼回程機鉻擴充套件可以做。 ...
... 什麼是離開facebook的活動工具(the off-facebook activity tool)? ...
... 無論您被迫做什麼,最終訪問資料通常意味著下載一個壓縮資料夾,其中包含一系列檔案,通常副檔名不同,如.csv或.json。 ...
...他們網站的神祕虛擬訪客感到好奇。有多少人?他們在讀什麼?加拿大人使用Firefox每個會話檢視多少頁? ...