Web抓取是一種收集專案和工作資料的通用有效方法。在本指南中,我們將瀏覽Python網路抓取庫的基本堆疊。
為什麼只有5個包?
有數十種用於Web抓取的軟體包……但是您只需要少數幾個就可以抓取幾乎所有網站。這是一個自己認定的說法。這裡決定採用我們最喜歡的5個用於網路抓取的Python庫。它們一起涵蓋了所有重要基礎,並且有較好的檔案。
我需要學習下面的每個包嗎?
不,但是每個人都會有需要,因為這是您如何與網站進行交流。其餘的取決於您的用例。經驗法則如下:
您應該至少學習BeautifulSoup或lxml中的一種。選擇哪個對您來說更直觀(請參見下文)。
如果您需要使用JavaScript收集的資料來抓取網站,請學習Selenium。
如果您需要構建真正的蜘蛛或網路爬蟲,而不僅僅是在這裡和那裡刮幾頁,請學習Scrapy。
那個必較適合你用餐呢 ?
. 農場:Requests
. 燉菜:Beautiful Soup 4
. 色拉:lxml
. 餐廳:Selenium
. 廚師:Scrapy
農場/Requests
對於新增到資料科學工具箱中至關重要。這是一個簡單但功能強大的HTTP包,這意味著您可以使用它來訪問網頁。我們將其稱為“農場”,因為您將使用它來獲取菜餚的原料(即原始HTML)(即可用資料)。它的簡單性絕對是其最大的優勢。它非常易於使用,您無需閱讀文件即可直接進入。例如,如果您想取得頁面的內容,簡單如下。:但這不僅是Requests所能做的。它可以訪問API,釋出到窗體等等。另外,它具有特色……這是唯一自稱為非基因,有機和素食的包。你一定會喜歡的。
import requests
page = requests.get('http://examplesite.com')
contents = page.content
資源
. 快速入門指南 –官方文檔案。涵蓋了實用主題,例如傳遞引數,處理響應和配置標頭。
燉菜/Beautiful Soup 4
有了食材之後,現在呢?現在,您將它們製成燉菜……美麗的燉菜。Beautiful Soup(BS4)是一個解析包,可以使用不同的解析器。解析器只是一個可以從HTML和XML文檔案提取資料的程式。Beautiful Soup的預設解析器來自Python的標準庫。它既靈活又寬容,但是有點慢。好訊息是,如果需要速度,可以將其解析器換成更快的解析器。BS4的一個優點是它能夠自動檢測編碼。這使它可以優雅地處理帶有特殊字元的HTML文件。此外,BS4可以幫助您瀏覽已解析的文件並找到所需的內容。這使得構建通用應用程式變得快捷而輕鬆。例如,如果您想找到我們之前取得網頁中的所有連結,則只有下面幾行,這種迷人的簡單性使其成為最受歡迎的Python Web抓取包之一!
from bs4 import BeautifulSoup
soup = BeautifulSoup(contents, 'html.parser')
soup.find_all('a')
資源
. 快速入門指南
. 一起使用BeautifulSoup和Requests的簡短示例
色拉/lxml
Lxml是高效能,生產質量的HTML和XML解析包。我們稱其為“色拉”,因為無論您選擇哪種飲食,您都可以依靠它對自己有益。在所有Python網路抓取包中,我們最喜歡使用lxml。它簡單,快速且功能豐富。即使這樣,如果您有使用XPath或CSS的經驗,也很容易上手。它的原始速度和力量也幫助其在行業中被廣泛採用。
BeautifulSoup對上lxml
歷史上,經驗法則是:如果需要速度,請使用lxml。如果需要處理雜亂的文件,請選擇BeautifulSoup。但是,這種區別不再成立。Beautiful Soup現在支援使用lxml解析器,反之亦然。一旦學習了另一種,也很容易學習另一種。因此,一開始,我們建議您同時嘗試並選擇一種對您而言更直觀的選擇。我們更喜歡lxml,但是許多人對Beautiful Soup始終如一。
資源
. 官方文件
. 使用lxml和Requests進行HTML Scraping –簡短而有趣的教程,介紹了使用Requests提取網頁,然後使用XPath選擇器來挖掘所需的資料。比正式文件更適合初學者。
餐廳:Selenium
有時,您確實需要去餐廳吃某些菜。農場很棒,但是您找不到那裡的一切。
同樣,有時Requests包不足以抓取網站。那裡的某些站點使用JavaScript來提供內容。例如,他們可能要等到您向下滾動頁面或單擊按鈕才能載入某些內容。其他站點可能需要您單擊窗體才能檢視其內容。或從下拉選單中選擇選項。或進行部落雨舞……對於這些網站,您將需要更強大的功能。您將需要Selenium(可以處理部落雨舞以外的所有事物)。Selenium是使瀏覽器自動化的工具,也稱為Web驅動程式。有了它,您實際上可以開啟Google Chrome視窗,訪問網站,然後單擊連結。很酷吧?它還帶有Python繫結,可直接在您的應用程式中對其進行控制。與您選擇的解析庫整合變得輕而易舉。
資源
. Selenium with Python – Selenium的Python繫結文件
. 用Selenium進行Web爬網 –優秀,詳盡的3部分教程,介紹如何使用Selenium爬網
. 使用Selenium和lxml
廚師:Scrapy
好的,我們剛才講了很多。您已經有了Requests和Selenium,可以從網頁中獲取HTML / XML。然後,您可以使用Beautiful Soup或lxml將其解析為有用的資料。但是,如果您還需要更多呢?如果您需要一個可以系統地爬整個網站的完整蜘蛛,該怎麼辦?Scrapy!從技術上講,Scrapy甚至不是一個包……這是一個完整的Web抓取框架。這意味著您可以使用它來管理請求,保留使用者會話,遵循復位向並處理輸出管道。這也意味著您可以與其他Python Web抓取包交換單個模組。例如,如果您需要插入Selenium來抓取動態網頁。因此,如果您需要重新使用搜尋器,對其進行縮放,管理複雜的資料管道或製作其他一些複雜的蜘蛛,那麼Scrapy就是為您量身定製的。
資源
. Scrapy文件
. 使用Scrapy從網站中提取資料 -使用Scrapy抓取電子商務網站的詳細教程
. Scrapy的建立者基於雲的爬網服務