如何通過 5 個簡單的步驟抓取數據
已發表: 2020-02-17您需要多久從網站上為您的工作抓取數據,這似乎太痛苦了? 這篇博文將教您如何通過 5 個簡單的步驟抓取數據。
這篇文章是為需要從網頁或 PDF 中提取數據並希望該過程盡可能快速和輕鬆的軟件專業人員編寫的。 抓取數據的方法有很多,但本文將重點介紹專業開發人員使用的一些最流行的方法:XPath、正則表達式、Beautiful Soup (BSA)、Scrapy、Python 請求庫 (PRL) 和 Selenium Webdriver。 這些刮削工具都可以通過為每個工具提供的說明輕鬆安裝。 下麵包含一個總結這些工具的表格,描述了它們的優點/缺點以及適用時有關它們的更多信息的鏈接。 該表包括一些其他不那麼流行的方法,我也嘗試過這些方法並且為了完整性而包括在內。
可以使用任何語言在網站上抓取數據。 在本文中,我將演示如何使用 Python 抓取數據,因為它非常易於安裝且相當容易學習,特別是如果您已經了解另一種編程語言,因為其語法類似於 Java、C 和 PHP。 Python 支持多個庫來抓取表中描述的數據。 抓取是每個人都應該知道如何使用的工具,因為它可以為您的目標市場、競爭對手和/或客戶提供有價值的見解。
網頁抓取可以幫助您提取不同類型的數據。 您可以通過編寫幾行代碼從電子商務網站上抓取帶有定價的房地產列表、酒店數據甚至產品數據。 但是,如果您要爬網並提取數據,則需要處理一些事情。 確保抓取的數據採用可用格式非常重要。 您的代碼可以從多個網站提取數據。 提取的數據是乾淨的,並且在運行算法時不會給出錯誤的結果。 也就是說,如果您想編寫代碼或創建一個小型網絡抓取項目來從網站抓取數據,您可以通過五個簡單的步驟來完成。

如何以 5 種簡單的方式抓取數據
1. 為數據抓取選擇一種編程語言或工具
“人與他的工具一樣好”。 因此,您需要以適合您需求的方式選擇用於網絡抓取的工具。 雖然一些即用型軟件可能看起來很容易使用,但它們可能不允許您進行大量配置更改。 同時,許多工具可能沒有插件來保存您在數據庫或云中抓取的數據。 談到當今用於抓取數據的編程語言,有 Node.js、Python、Ruby 等。 但其中, Python是最受歡迎的一種,這要歸功於它更容易的學習曲線、簡單的語法、多個外部庫的可用性以及該語言是開源的。
有多個庫,如BeautifulSoup和Scrapy ,可用於爬取網頁、創建網絡爬蟲並在特定時間間隔運行爬取作業。 在將其他系統與您的抓取引擎集成時,Python 提供了極大的靈活性。 您可以輕鬆地將抓取的數據保存在本地計算機、數據庫、 S3 存儲中,甚至可以將它們轉儲到Word或Excel文件中。
2. 抓取單個網頁並分析組件
在您從亞馬遜上的一千個產品頁面中抓取產品信息之前,您需要訪問該頁面並獲取整個 Html 頁面以對其進行分析並確定策略。 Html 頁面中的數據可以駐留在標籤中的特定鍵值對或標籤中的文本中。 您可以使用 BeautifulSoup 之類的庫來指定要從每個網頁上提取數據的確切標籤,然後循環運行代碼。 這樣,對於每個單獨的產品網頁,您的代碼都將運行並提取相同的信息,例如價格詳細信息。
3. 確定數據清理和存儲策略
甚至在開始抓取數據之前,您就應該決定將數據存儲在哪裡。 這是因為您如何處理數據將取決於您將其存儲在何處。 有多種選擇。 您可以在 NoSQL 和 SQL 數據庫之間進行選擇,具體取決於您正在抓取的數據是否將基於非結構化數據進行結構化。 對於非結構化數據,您可以選擇 SQL 數據庫,因為您可以將數據存儲在由一組屬性組成的行中。 對於沒有設置屬性的非結構化數據,您可以使用 NoSQL 數據庫。 就保存數據的數據庫而言,對於 SQL,您可以選擇 MySQL 或 Postgres。 Amazon RDS提供雲端數據庫,您可以在其中存儲數據並根據使用情況付費。
對於 NoSQL,您可以選擇其完全託管且速度極快的解決方案之一,例如DynamoDb或ElasticSearch 。 不同的數據庫具有提供快速檢索的優勢,有些提供更便宜的每 TB 存儲空間。 您選擇的數據庫取決於您的特定用例,因此。 在您決定一項之前,需要對此進行一些研究。 如果您需要存儲大的抓取圖像和視頻,您可以使用 AWS S3或Glacier 。 當您想以存檔格式存儲大量數據時,使用後者。 您不需要經常訪問,而前者是更常用的解決方案。 這就像一個在線硬盤驅動器。 您可以創建文件夾並將文件保存在其中。

4. 創建網頁列表或編寫用於數據抓取的正則表達式
雖然您可以在單個網頁上測試您的代碼,但您必須要抓取數十或數百個頁面,因為您正在執行此項目。 通常,如果您要抓取幾個網頁,您可以將鏈接保存在一個數組中,並在抓取頁面時對其進行循環。 更好和更常用的解決方案是使用regex 。 簡而言之,它是一種識別具有相似 URL 結構的網站的編程方式。

例如,您可能想要抓取亞馬遜上所有筆記本電腦的產品數據。 現在您可能會看到所有 URL 都以“ www.amazon.com/laptop/ <laptopModelNo>/prodData”開頭。 您可以使用正則表達式複制此格式,以便提取所有此類 URL,並且您的網絡抓取功能僅在這些 URL 上運行。 並不是亞馬遜網站上的所有 URL。 如果您要抓取的網頁太多,我們建議您使用並行處理的方式隨時抓取大約十個網頁。 如果您正在抓取網頁並從中提取鏈接,然後抓取這些鏈接所指向的網頁,那麼您可以使用樹狀方法同時抓取來自根網頁的多個子頁面。

5. 編寫代碼並測試
到目前為止,我們討論的一切都是準備工作。 對於運行代碼並完成工作的最後一步。 Web 抓取代碼很少能完全按照您的預期工作。 這是因為並非您嘗試抓取的所有網頁都具有相同的結構。 例如,您在 100 個產品頁面上運行抓取代碼,發現其中只有 80 個已被廢棄。 這背後的原因是20個頁面可能處於缺貨狀態,並且它們的網頁結構不同。 編寫代碼時不會考慮此類異常。 但經過幾次迭代後,您可以進行所需的更改。 並從您需要的所有網頁中提取數據。

替代數據抓取方法
使用 Excel 篩選功能抓取數據
這是從任何網頁抓取數據的最簡單方法。 除了 Excel,它不需要額外的工具,它不會在您的目標網站或系統上留下足跡,即不進行 API 調用,不設置 cookie 等。如果您可以訪問安裝了 Excel 的 PC/Mac,那麼到目前為止最簡單的數據抓取方法。
這個怎麼運作
在 Excel 中,打開一個新工作表並在第一個單元格中寫下您的目標網站的 URL(例如 http://www.joes-hardware-store.com/)。 在下一個單元格中,輸入將從目標網頁中提取數據的 HTML 或 XPath 數據過濾器公式(參見下表,了解本示例中使用的 XPath 數據過濾器公式)。 如果要抓取多列數據,請對每列數據重複步驟 1 並將它們並排放置。
如何在 Excel 中獲取 XPath 數據過濾器
在 Excel 中,單擊文件 > 選項 > 高級,然後轉到顯示部分。 選中“在功能區中顯示開發人員選項卡”旁邊的框,然後單擊“確定”。 這顯示在下面的屏幕截圖 1 中:
在 Excel 中,單擊 Developer > Reference 然後向下滾動並找到 Microsoft XML Document 3.0(如下面的屏幕截圖 2 所示):
點擊 MSXML3 Apress 然後點擊 OK(如下面的截圖 3 所示):
現在我們已經安裝了 MSXML3 參考,讓我們試一試。 在 Excel 中,在單元格 A1 中輸入您的目標網頁 URL,然後在單元格 B1 中輸入 XPath 數據過濾器公式(例如,要在網頁上獲取商品“123”的價格,請將 XPath 數據過濾器公式放入單元格 B1 中,如圖所示下面的屏幕截圖 4 和 5):
現在,使用 Excel 的 CTRL+C 快捷方式將單元格 B1 的內容複製到所有剩餘的單元格中。 如下圖 6 所示:
將您的目標網頁 URL(在單元格 A1 中)複製到 Excel 的地址欄中。 按 Enter 將其加載到瀏覽器中,然後您的數據神奇地出現在 Excel 中
如您所見,這是一種非常有效的數據抓取方式。 目標網站或您的系統上沒有留下任何足跡,即沒有進行 API 調用,沒有設置 cookie 等。
使用 Microsoft Word 中的 Text-to-Columns 功能按列分隔數據
這種方法比第一種方法複雜一些,但它可以用來從任何具有明確定義的列的網站上抓取數據。 它需要 MS Word 和 Excel 以及一些如下所述的額外工具。 好消息是這種方法確實會在您的目標網站上留下足跡,因此如果您出於營銷目的而抓取網站並希望避免檢測,則此方法不適合您。
這個怎麼運作
在 MS Word 中,創建一個新文檔,例如 Joe's Hardware Store Product Listing Scraping Tool,然後將您的目標網頁複製/粘貼到文本框中(參見下面的屏幕截圖 1)。 通過按 CTRL + G 在 MS Word 中選擇 Goto 功能,然後準確鍵入 <<!DOCTYPE HTML [ENTER]。 這顯示在下面的屏幕截圖 2 中:
通過按 ALT + F5 選擇 MS Word 中的運行功能(如屏幕截圖 3 所示),您應該會看到與此類似的內容(請參見下面的屏幕截圖 4):
在 Excel 中,選擇 Filters > Text to Columns,如下面的屏幕截圖 5 所示:
選擇 Delimited 然後從下拉菜單中選擇您的分隔符(對於本示例,我們使用默認選擇的逗號)。
現在,單擊下一步並定義“逗號”的位置,即將您的網絡數據分隔成列(例如,我使用“,”作為分隔符)。 然後,單擊下一步並定義您希望 Excel 如何處理空單元格,即忽略它們或用空白值替換(對於本示例,我們將其設置為“忽略空值”)。 然後,單擊 Finish 以完成 Text-to-Columns 功能。
如果您的目標網頁沒有明確定義的列,您可能需要將其設置為“替代值”,如下面的屏幕截圖 6 所示:
正如您從上面的屏幕截圖 7 中看到的,我的數據已成功分離為單獨的文本列,現在我可以輕鬆地將它們複製/粘貼到計算機上的另一個位置。
此方法對於從通常具有明確定義的列標題的 PDF 文件中提取數據特別有用。 如果您的目標是使用 Excel 宏從多個 PDF 文件中自動提取數據,它將為您節省大量時間,因為現在,您可以反複使用相同的 MS Word 模板為每個 PDF 文件快速創建多個文檔。 3. 使用 MS Excel VBA 編輯器來抓取數據
對於這種方法,我們將使用一個名為 xvba 的工具,它可以從這裡下載,它的工作原理就像一個 API(應用程序接口)。 好消息是您根本不需要編寫任何代碼。 壞消息是您必須輸入目標網頁的 HTML,即我建議您使用 MS Word 執行此操作,因為它會迫使您將網頁真正分解為其組件(參見下面的屏幕截圖 1)。
方括號內的數字是電子表格中的單個單元格,其中列標題和行標題用作每個數據字段的名稱。 它們的作用類似於變量,即它們被 Excel 視為文本,並且會根據電子表格的結構而改變(例如,如果您選擇不同的列來過濾數據)。
在 Google 表格中使用 IMPORTXML
當您使用 IMPORTXML 從網頁中抓取數據時,第一步是打開 Google 表格。 第二步是轉到工具 > 腳本編輯器。 第三步是將目標網站的 HTML 代碼複製/粘貼到文本框中,如下面的屏幕截圖 7 所示:
正如您從上面的屏幕截圖 8 中看到的,我的數據已成功分離為單獨的文本列,現在我可以輕鬆地將它們複製/粘貼到計算機上的另一個位置。 我們過去曾使用這種方法為在線營銷活動抓取 Facebook 和 Twitter 數據。 當您不想使用 GOTO 命令時,這也是從使用 AJAX 的網站上抓取數據的好方法。
在 Google 表格中使用 IMPORTHTML
此方法類似於方法 3,但我們將使用 IMPORTHTML 而不是使用 IMPORTXML 。 第一步是打開 Google 表格。 第二步是轉到工具 > 腳本編輯器。 第三步是將目標網站的 HTML 代碼複製/粘貼到文本框中。
使用 chrome 擴展
您可以使用 chrome 擴展程序(例如 Data Scraper 和 Save To CSV)來抓取 Web 數據。 由於有免費和付費版本的 chrome 擴展(Data Scraper),我建議兩者都看看哪個更適合你。
結論
最多抓取幾百頁(同時確保在每次運行之間留出幾秒鐘的間隙)。 使用 Python 編寫的 DIY 解決方案可以每月抓取一次網站。 但是,如果您正在尋找企業級 DaaS 解決方案,我們PromptCloud的團隊會提供端到端解決方案,您可以在其中向我們提出要求,然後我們將數據交給您,然後您可以即插即用。
基礎設施、代理管理,確保您在抓取數據時不會被阻止。 定期運行抓取引擎以更新數據。 我們還會進行更改以適應在相關網站的 UI 中所做的更改。 一切都在我們完全託管的解決方案中處理。 這是一項按使用付費的基於雲的服務。 這將滿足您所有的網絡抓取要求。 無論您是在處理初創公司、跨國公司還是您的研究工作需要數據。 我們為所有人提供數據抓取解決方案。
