數據分析如何使用python中Beautiful Soup進行WEB抓取

  互聯網是絕對大量的數據源。不幸的是,如果沒有方便組織的CSV文件可供下載和分析,則絕大部分。如果要從許多網站捕獲數據,則需要嘗試進行網絡抓取。

  如果您還是一個初學者,請不要擔心-在數據分析如何使用python中Beautiful Soup進行WEB抓取中,我們將從頭開始介紹如何使用Python從頭開始進行Web抓取,首先回答一些有關Web抓取的常見問題。

  如果您已經熟悉了該概念,請隨意滾動瀏覽這些內容,然後直接進入數據分析如何使用python中Beautiful Soup進行WEB抓取!

  什麼是Python中的網頁搜刮?

  一些網站提供的數據集可以CSV格式下載,也可以通過應用程序編程接口(API)訪問。但是許多具有有用數據的網站卻沒有提供這些方便的選擇。

  例如,考慮國家氣象局的網站。它包含每個位置的最新天氣預報,但是無法通過CSV或API訪問該天氣數據。

  如果我們想分析這些數據,或者下載它以便在其他應用程序中使用,我們將不會刻意複製粘貼所有內容。Web抓取是一項使我們能夠使用編程來完成繁重工作的技術。我們將編寫一些代碼,這些代碼將在NWS站點上查找,僅獲取我們要使用的數據,然後以所需的格式輸出。

  在數據分析如何使用python中Beautiful Soup進行WEB抓取中,我們將向您展示如何使用Python 3和Beautiful Soup庫執行網絡抓取。我們將從國家氣象局抓取天氣預報,然後使用pandas庫進行分析。

  Web爬網如何工作?

  抓取網絡時,我們編寫代碼將請求發送到託管我們指定頁面的服務器。通常,我們的代碼會像瀏覽器一樣下載該頁面的源代碼。但是,它不是在視覺上顯示頁面,而是在頁面中進行過濾以查找我們指定的HTML元素,並提取我們指示其提取的任何內容。

  例如,如果我們想從網站獲取H2標籤內的所有標題,則可以編寫一些代碼來實現。我們的代碼將從其服務器請求網站的內容並下載。然後,它將通過頁面的HTML查找H2標籤。只要找到H2標籤,它就會複製標籤內的所有文本,並以我們指定的任何格式輸出。

  需要注意的一件事:從服務器的角度來看,通過Web抓取請求頁面與在Web瀏覽器中加載頁面相同。當我們使用代碼提交這些請求時,我們可能比普通用戶更快地「加載」頁面,從而很快耗盡了網站所有者的服務器資源。

  爲什麼要使用Python進行網頁爬取?

  可以使用許多其他編程語言進行Web抓取。例如,我們也有使用R進行網絡抓取的教程。

  但是,使用Python和Beautiful Soup庫是最流行的Web抓取方法之一。這就意味着,一旦您掌握了Beautiful Soup的基礎知識,那裏就會有很多教程,操作視頻和一些示例代碼,可幫助您加深知識。

  我們將在數據分析如何使用python中Beautiful Soup進行WEB抓取結尾介紹其他一些Web抓取常見問題解答,但現在是時候開始研究我們的Web抓取項目!每個網絡抓取項目都應從回答以下問題開始:

  網站搜刮合法嗎?

  不幸的是,這裏沒有一個簡單的答案。一些網站明確允許網頁抓取。其他人明確禁止這樣做。許多網站沒有以一種方式或另一種方式提供任何明確的指導。

  在抓取任何網站之前,我們應該查看一個條款和條件頁面,以查看是否有關於抓取的明確規則。如果有,我們應該跟隨他們。如果沒有,那麼它就更像是一個判斷。

  但是請記住,Web抓取會消耗主機網站的服務器資源。如果我們只刮一頁,那不會造成問題。但是,如果我們的代碼每十分鐘刮一次1,000頁,那麼對於網站所有者而言,這可能很快就會變得昂貴。

  因此,除了遵循網站上發佈的所有和所有有關網絡抓取的明確規則之外,遵循以下最佳做法也是一個好主意:

  1)永遠不要比您需要的刮擦次數更多

  2)考慮緩存您抓取的內容,以便在處理用於過濾和分析它的代碼時僅下載一次,而不是每次運行代碼時都重新下載

  3)考慮使用功能time.sleep()來在代碼中構建暫停,例如在太短的時間內避免過多的請求使不堪重負的服務器癱瘓。

  在數據分析如何使用python中Beautiful Soup進行WEB抓取的案例中,NWS的數據是公共領域的,其術語不禁止Web抓取,因此我們可以繼續進行。

  網頁的組成部分

  當我們訪問網頁時,我們的網絡瀏覽器會向網絡服務器發出請求。此請求稱爲GET請求,因爲我們正在從服務器獲取文件。然後,服務器發回文件,這些文件告訴我們的瀏覽器如何爲我們呈現頁面。文件分爲幾種主要類型:

  1)HTML —包含頁面的主要內容。

  2)CSS —添加樣式以使頁面看起來更好。

  3)JS — Javascript文件爲網頁增加了交互性。

  4)圖片-JPG和PNG等圖片格式允許網頁顯示圖片。

  瀏覽器收到所有文件後,它將呈現頁面並將其顯示給我們。要使頁面漂亮地呈現,在幕後發生了很多事情,但是當我們進行網頁抓取時,我們不需要擔心其中的大多數問題。進行網頁抓取時,我們會對網頁的主要內容感興趣,因此我們看一下HTML。

  HTML

  超文本標記語言(HyperText Markup Language,HTML)是用於創建網頁的一種語言。HTML不是像Python這樣的編程語言,而是一種標記語言,它告訴瀏覽器如何佈局內容。HTML使您可以執行與Microsoft Word等字處理器中類似的操作-使文本加粗,創建段落等。因爲HTML不是一種編程語言,所以它幾乎不像Python那樣複雜。

  讓我們快速瀏覽一下HTML,以便我們瞭解足夠有效地進行抓取。HTML由稱爲標籤的元素組成。最基本的標籤是標籤。此標記告訴Web瀏覽器,其中的所有內容都是HTML。我們可以使用以下標記來製作一個簡單的HTML文檔:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們尚未在頁面上添加任何內容,因此,如果我們在Web瀏覽器中查看HTML文檔,則不會看到任何內容:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  在html標籤內,我們放置了另外兩個標籤,head標籤和body標籤。網頁的主要內容進入body標記。該head標籤包含有關網頁標題,以及其它信息一般不會在網頁抓取有用的數據:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們仍然沒有在頁面中添加任何內容(位於body標記內),因此我們再也看不到任何內容:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  您可能在上面已經注意到,我們將head和body標記放在了html標記內。在HTML中,標籤是嵌套的,可以放在其他標籤內。

  現在,我們將以p標籤的形式將我們的第一個內容添加到頁面。所述p標記定義一個段,並在標籤內的任何文本顯示爲一個單獨的段落:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  外觀如下:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  標籤的常用名稱取決於它們相對於其他標籤的位置:

  1)child—孩子是另一個標籤內的標籤。因此,p上面的兩個標籤都是該body標籤的子級。

  2)parent—父標籤是另一個標籤在其中的標籤。在上方,html標籤是標籤的父級body。

  3)sibiling—同胞是與另一個標籤嵌套在同一父對象中的標籤。例如,head和body是兄弟姐妹,因爲它們都在內部html。這兩個p標籤都是同級標籤,因爲它們都在內部body。

  我們還可以向HTML標記添加屬性以更改其行爲:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  外觀如下:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  在上面的示例中,我們添加了兩個a標籤。a標籤是鏈接,並告訴瀏覽器呈現到另一個網頁的鏈接。href標籤的屬性確定鏈接的位置。

  a並且p是極爲常見的html標籤。以下是一些其他內容:

  1)div —表示頁面的劃分或區域。

  2)b -加粗其中的任何文本。

  3)i —斜體顯示裏面的任何文本。

  4)table —創建一個表格。

  5)form -創建輸入表單。

  有關標籤的完整列表,請參見此處。

  在進行實際的Web抓取之前,讓我們瞭解class和id屬性。這些特殊屬性賦予HTML元素名稱,並使它們在我們抓取時更易於與之交互。一個元素可以具有多個類,並且一個類可以在元素之間共享。每個元素只能有一個ID,並且一個ID在頁面上只能使用一次。類和ID是可選的,並非所有元素都具有它們。

  我們可以在示例中添加類和ID:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  外觀如下:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  請求庫

  我們要抓取網頁的第一件事就是下載網頁。我們可以使用Python 請求庫下載頁面。請求庫將向GET網絡服務器發出請求,該服務器將爲我們下載給定網頁的HTML內容。我們可以使用幾種不同類型的請求requests,其中GET只有一種。如果您想了解更多信息,請查看我們的API教程。

  讓我們嘗試下載一個簡單的示例網站https://www.aaa-cg.com.cn/data/2642.html。我們需要先使用request.get方法下載它。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  運行請求後,我們得到一個Response對象。該對象具有一個status_code屬性,該屬性指示頁面是否已成功下載:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  A status_codeof 200表示頁面下載成功。這裏我們不會完全探討狀態代碼,但是以「 a」開頭的狀態代碼2通常表示成功,而以「 a」 4或「 a」 開頭的代碼5表示錯誤。

  我們可以使用content屬性輸出頁面的HTML內容:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  使用BeautifulSoup解析頁面

  如您在上面看到的,我們現在已經下載了一個HTML文檔。

  我們可以使用BeautifulSoup庫來解析此文檔,並從p標記中提取文本。我們首先必須導入庫,並創建BeautifulSoup該類的實例來解析我們的文檔:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以使用對象prettify上的方法,打印出格式良好的頁面HTML內容BeautifulSoup:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  由於所有標籤都是嵌套的,因此我們可以一次在整個結構中移動一層。我們可以首先使用children屬性來選擇頁面頂層的所有元素soup。請注意,它children返回一個列表生成器,因此我們需要list在其上調用該函數:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  上面告訴我們,在頁面的頂層有兩個標籤-初始標籤和標籤。n列表中也有換行符()。讓我們看看列表中每個元素的類型是:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  如您所見,所有項目都是BeautifulSoup對象。第一個是Doctype對象,其中包含有關文檔類型的信息。第二個是NavigableString,表示在HTML文檔中找到的文本。最後一項是一個Tag對象,其中包含其他嵌套標籤。對象,也是我們最常處理的最重要的對象類型Tag。

  該Tag對象使我們可以瀏覽HTML文檔,並提取其他標籤和文本。您可以在此處瞭解有關各種BeautifulSoup對象的更多信息。

  現在,我們可以通過選擇html列表中的第三項來選擇標籤及其子元素:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  該children屬性返回的列表中的每個項目也是一個BeautifulSoup對象,因此我們也可以在children上調用方法html。

  現在,我們可以在html標記內找到子代:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  如您在上方看到的,這裏有兩個標籤head,和body。我們想要提取p標籤內的文本,因此我們將深入研究正文:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以p通過找到body標籤的子標籤來獲得標籤:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在我們可以隔離p標籤:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  隔離標籤後,我們可以使用get_text方法提取標籤內的所有文本:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  一次查找標籤的所有實例

  上面我們做的事情對於弄清楚如何導航頁面很有用,但是花了很多命令才能完成相當簡單的事情。如果要提取單個標籤,則可以改用find_all方法,該方法將在頁面上找到標籤的所有實例。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  請注意,這會find_all返回一個列表,因此我們必須遍歷或使用列表索引來提取文本:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  如果只想查找標籤的第一個實例,則可以使用find方法,該方法將返回一個BeautifulSoup對象:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  按類別和ID搜索標籤

  我們之前介紹了類和id,但是可能不清楚它們爲什麼有用。CSS使用類和ID來確定將某些樣式應用於哪些HTML元素。在抓取時,我們也可以使用它們來指定要抓取的特定元素。爲了說明這一原理,我們將使用以下頁面:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們可以通過URL訪問上述文檔https://www.aaa-cg.com.cn/data/2642.html。首先下載頁面並創建一個BeautifulSoup對象:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以使用該find_all方法按類或ID搜索項目。在以下示例中,我們將搜索p具有class的所有標籤outer-text:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  在下面的示例中,我們將查找具有class的所有標籤outer-text:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們還可以通過id搜索元素:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  使用CSS選擇器

  您也可以使用CSS選擇器搜索項目。這些選擇器是CSS語言允許開發人員指定樣式的HTML標籤的方式。這裏有些例子:

  1)p a—查找a標籤內的所有標籤p。

  2)body p a-找到所有a一個內部標籤p上標籤內body的標籤。

  3)html body—查找body標籤內的所有標籤html。

  4)p.outer-text—查找所有p帶有類別的標籤outer-text。

  5)p#first—查找pID爲的所有標籤first。

  6)body p.outer-text—查找p標籤outer-text內部具有類的所有body標籤。

  您可以在此處瞭解有關CSS選擇器的更多信息。

  BeautifulSoup對象支持使用select方法通過CSS選擇器搜索頁面。我們可以使用CSS選擇器p在頁面中找到所有位於這樣的標籤div:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  請注意,上述select方法會返回BeautifulSoup對象列表,就像find和一樣find_all。

  下載天氣數據

  現在,我們已經足夠了解,可以從國家氣象局的網站上提取有關當地天氣的信息。第一步是找到我們要抓取的頁面。我們將從此頁面提取有關天氣信息。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們將提取有關擴展預測的數據。

  從圖像中可以看到,該頁面包含有關下週擴展預報的信息,包括一天中的時間,溫度和條件的簡要說明。

  使用Chrome DevTools探索頁面結構

  我們需要做的第一件事是使用Chrome Devtools檢查頁面。如果您使用的是其他瀏覽器,則Firefox和Safari具有等效功能。建議還是使用Chrome。

  您可以通過單擊啓動Chrome中的開發人員工具View -> Developer -> Developer Tools。您應該最終在瀏覽器底部看到一個面板,如下所示。確保Elements面板突出顯示:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  Chrome開發者工具。

  元素面板將在頁面上顯示所有HTML標記,並讓您瀏覽它們。這是一個非常方便的功能!

  右鍵單擊「擴展的預測」附近的頁面,然後單擊「檢查」,我們將在元素面板中打開包含文本「擴展的預測」的標籤:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  擴展的預測文本。

  然後,我們可以在「元素」面板中向上滾動以找到「最外面的」元素,其中包含與擴展的預測相對應的所有文本。在這種情況下,它是一個divID 爲的標籤seven-day-forecast:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  包含擴展預測項目的div。

  如果您在控制檯上單擊鼠標並瀏覽div,您將發現div該類中包含了每個預測項(例如「 Tonight」,「 Thursday」和「 Thursday Night」)tombstone-container。

  現在我們知道足夠的信息來下載頁面並開始對其進行解析。在下面的代碼中,我們:

  1)下載包含預測的網頁。

  2)創建一個BeautifulSoup類來分析頁面。

  3)找到divID爲的seven-day-forecast,並分配給seven_day

  4)在中seven_day,找到每個單獨的預測項目。

  5)提取並打印第一個預測項目。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  從頁面中提取信息

  如您所見,預測項內tonight是我們想要的所有信息。還有4,我們可以提取信息:

  1)預測項目的名稱-在這種情況下爲Tonight。

  2)條件的說明-存儲在的title屬性中img。

  3)條件的簡短說明-在這種情況下爲Mostly Clear。

  4)溫度低-在這種情況下,49度。

  我們將首先提取預測項的名稱,簡短描述和溫度,因爲它們都相似:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以title從img標記中提取屬性。爲此,我們只將BeautifulSoup對象視爲字典,然後將想要的屬性作爲鍵傳遞:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  從頁面中提取所有信息

  現在,我們知道如何提取每條信息,可以將我們的知識與CSS選擇器和列表推導相結合,以一次提取所有信息。

  在下面的代碼中,我們:

  1)選擇與類的所有項目period-name與類物品內部tombstone-container在seven_day。

  2)使用列表推導get_text對每個BeautifulSoup對象調用該方法。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  如您在上面看到的,我們的技術按順序爲我們獲取了每個期間名稱。我們可以應用相同的技術來獲取其他3字段:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  將我們的數據合併到Pandas Dataframe中

  現在,我們可以將數據合併到Pandas DataFrame中並進行分析。DataFrame是可以存儲表格數據的對象,從而使數據分析變得容易。如果您想了解有關pandas的更多信息,請在此處免費試用我們的課程。

  爲了做到這一點,我們將調用DataFrame類,並傳入我們擁有的每個項目列表。我們將它們作爲字典的一部分傳遞。每個字典鍵將成爲DataFrame中的一列,每個列表將成爲該列中的值:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以對數據進行一些分析。例如,我們可以使用正則表達式和Series.str.extract方法提取數字溫度值:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  然後,我們可以找到所有高溫和低溫的平均值:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們也只能選擇夜間發生的行:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  此Web爬網項目的後續步驟

  您現在應該對如何抓取網頁和提取數據有了很好的瞭解。下一步不錯的選擇是選擇一個網站,然後嘗試自己進行一些網絡抓取。一些要抓取的數據的好例子是:

  1)新聞文章

  2)體育比分

  3)天氣預報

  4)股票價格

  5)網上零售商價格

  您可能還想繼續抓取國家氣象局,並查看可以從頁面或您自己的城市中提取的其他數據。

  還有問題嗎?讓我們看一下其他一些Web抓取常見問題解答:

  爲什麼要進行網絡爬網?何時需要?

  如果沒有組織格式的數據可用,則需要進行網絡抓取以解鎖更強大的分析。

  這對於各種個人項目可能很有用。例如,您可能想要抓取體育網站來分析與您最喜歡的球隊相關的統計信息。

  但是,在業務環境中,Web抓取對於數據分析師和數據科學家也很重要。除非您將其抓取(或不費力氣地手工將其複製到電子表格中進行分析),否則網絡上的大量數據根本無法獲得。當這些數據可能包含對您的公司或您的行業有價值的見解時,您將不得不轉向網絡抓取。

  我可以用網頁爬蟲做什麼?

  使用網絡抓取時,最大的限制可能是您可以做什麼,而不是可以做什麼。有了正確的代碼,幾乎所有公共網站上的數據都可以通過網絡抓取進行下載,過濾和格式化。

  但是,是否允許甚至合法是另一回事。

  正如我們在數據分析如何使用python中Beautiful Soup進行WEB抓取開頭所提到的,在嘗試抓取網站之前,確定網站的網站抓取政策非常重要。如果允許抓取,則應確保遵循數據分析如何使用python中Beautiful Soup進行WEB抓取前面概述的最佳做法,以確保您不會對相關網站造成過大的負擔。

  用於Web搜尋的Python庫

  1)請求 -這個關鍵庫實際上是將數據從Web服務器獲取到您的計算機所必需的,並且它還包含其他一些很酷的功能,例如緩存。

  2)Beautiful Soup 4-這是我們在這裏使用的庫,它旨在使基於HTML標籤的數據過濾變得簡單。

  3)lmxl —快速的HTML和XML解析器(現在也與Beautiful Soup集成!)

  4)Selenium —一種Web驅動程序工具,當您需要從請求庫無法訪問的網站獲取數據時非常有用,因爲它被隱藏在諸如登錄表單或強制單擊鼠標之類的內容之後。

  5)Scrapy-一個完整的Web抓取框架,對於一次性數據分析項目來說可能會過時,但是當生產項目,管道等需要抓取時,它非常適合。

  如果您想了解有關此處涵蓋的任何主題的更多信息,請查看我們免費提供的交互式課程:Python中的Web Scraping

  互聯網是絕對大量的數據源。不幸的是,如果沒有方便組織的CSV文件可供下載和分析,則絕大部分。如果要從許多網站捕獲數據,則需要嘗試進行網絡抓取。

  如果您還是一個初學者,請不要擔心-在數據分析如何使用python中Beautiful Soup進行WEB抓取中,我們將從頭開始介紹如何使用Python從頭開始進行Web抓取,首先回答一些有關Web抓取的常見問題。

  如果您已經熟悉了該概念,請隨意滾動瀏覽這些內容,然後直接進入數據分析如何使用python中Beautiful Soup進行WEB抓取!

  什麼是Python中的網頁搜刮?

  一些網站提供的數據集可以CSV格式下載,也可以通過應用程序編程接口(API)訪問。但是許多具有有用數據的網站卻沒有提供這些方便的選擇。

  例如,考慮國家氣象局的網站。它包含每個位置的最新天氣預報,但是無法通過CSV或API訪問該天氣數據。

  如果我們想分析這些數據,或者下載它以便在其他應用程序中使用,我們將不會刻意複製粘貼所有內容。Web抓取是一項使我們能夠使用編程來完成繁重工作的技術。我們將編寫一些代碼,這些代碼將在NWS站點上查找,僅獲取我們要使用的數據,然後以所需的格式輸出。

  在數據分析如何使用python中Beautiful Soup進行WEB抓取中,我們將向您展示如何使用Python 3和Beautiful Soup庫執行網絡抓取。我們將從國家氣象局抓取天氣預報,然後使用pandas庫進行分析。

  Web爬網如何工作?

  抓取網絡時,我們編寫代碼將請求發送到託管我們指定頁面的服務器。通常,我們的代碼會像瀏覽器一樣下載該頁面的源代碼。但是,它不是在視覺上顯示頁面,而是在頁面中進行過濾以查找我們指定的HTML元素,並提取我們指示其提取的任何內容。

  例如,如果我們想從網站獲取H2標籤內的所有標題,則可以編寫一些代碼來實現。我們的代碼將從其服務器請求網站的內容並下載。然後,它將通過頁面的HTML查找H2標籤。只要找到H2標籤,它就會複製標籤內的所有文本,並以我們指定的任何格式輸出。

  需要注意的一件事:從服務器的角度來看,通過Web抓取請求頁面與在Web瀏覽器中加載頁面相同。當我們使用代碼提交這些請求時,我們可能比普通用戶更快地「加載」頁面,從而很快耗盡了網站所有者的服務器資源。

  爲什麼要使用Python進行網頁爬取?

  可以使用許多其他編程語言進行Web抓取。例如,我們也有使用R進行網絡抓取的教程。

  但是,使用Python和Beautiful Soup庫是最流行的Web抓取方法之一。這就意味着,一旦您掌握了Beautiful Soup的基礎知識,那裏就會有很多教程,操作視頻和一些示例代碼,可幫助您加深知識。

  我們將在數據分析如何使用python中Beautiful Soup進行WEB抓取結尾介紹其他一些Web抓取常見問題解答,但現在是時候開始研究我們的Web抓取項目!每個網絡抓取項目都應從回答以下問題開始:

  網站搜刮合法嗎?

  不幸的是,這裏沒有一個簡單的答案。一些網站明確允許網頁抓取。其他人明確禁止這樣做。許多網站沒有以一種方式或另一種方式提供任何明確的指導。

  在抓取任何網站之前,我們應該查看一個條款和條件頁面,以查看是否有關於抓取的明確規則。如果有,我們應該跟隨他們。如果沒有,那麼它就更像是一個判斷。

  但是請記住,Web抓取會消耗主機網站的服務器資源。如果我們只刮一頁,那不會造成問題。但是,如果我們的代碼每十分鐘刮一次1,000頁,那麼對於網站所有者而言,這可能很快就會變得昂貴。

  因此,除了遵循網站上發佈的所有和所有有關網絡抓取的明確規則之外,遵循以下最佳做法也是一個好主意:

  1)永遠不要比您需要的刮擦次數更多

  2)考慮緩存您抓取的內容,以便在處理用於過濾和分析它的代碼時僅下載一次,而不是每次運行代碼時都重新下載

  3)考慮使用功能time.sleep()來在代碼中構建暫停,例如在太短的時間內避免過多的請求使不堪重負的服務器癱瘓。

  在數據分析如何使用python中Beautiful Soup進行WEB抓取的案例中,NWS的數據是公共領域的,其術語不禁止Web抓取,因此我們可以繼續進行。

  網頁的組成部分

  當我們訪問網頁時,我們的網絡瀏覽器會向網絡服務器發出請求。此請求稱爲GET請求,因爲我們正在從服務器獲取文件。然後,服務器發回文件,這些文件告訴我們的瀏覽器如何爲我們呈現頁面。文件分爲幾種主要類型:

  1)HTML —包含頁面的主要內容。

  2)CSS —添加樣式以使頁面看起來更好。

  3)JS — Javascript文件爲網頁增加了交互性。

  4)圖片-JPG和PNG等圖片格式允許網頁顯示圖片。

  瀏覽器收到所有文件後,它將呈現頁面並將其顯示給我們。要使頁面漂亮地呈現,在幕後發生了很多事情,但是當我們進行網頁抓取時,我們不需要擔心其中的大多數問題。進行網頁抓取時,我們會對網頁的主要內容感興趣,因此我們看一下HTML。

  HTML

  超文本標記語言(HyperText Markup Language,HTML)是用於創建網頁的一種語言。HTML不是像Python這樣的編程語言,而是一種標記語言,它告訴瀏覽器如何佈局內容。HTML使您可以執行與Microsoft Word等字處理器中類似的操作-使文本加粗,創建段落等。因爲HTML不是一種編程語言,所以它幾乎不像Python那樣複雜。

  讓我們快速瀏覽一下HTML,以便我們瞭解足夠有效地進行抓取。HTML由稱爲標籤的元素組成。最基本的標籤是標籤。此標記告訴Web瀏覽器,其中的所有內容都是HTML。我們可以使用以下標記來製作一個簡單的HTML文檔:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們尚未在頁面上添加任何內容,因此,如果我們在Web瀏覽器中查看HTML文檔,則不會看到任何內容:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  在html標籤內,我們放置了另外兩個標籤,head標籤和body標籤。網頁的主要內容進入body標記。該head標籤包含有關網頁標題,以及其它信息一般不會在網頁抓取有用的數據:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們仍然沒有在頁面中添加任何內容(位於body標記內),因此我們再也看不到任何內容:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  您可能在上面已經注意到,我們將head和body標記放在了html標記內。在HTML中,標籤是嵌套的,可以放在其他標籤內。

  現在,我們將以p標籤的形式將我們的第一個內容添加到頁面。所述p標記定義一個段,並在標籤內的任何文本顯示爲一個單獨的段落:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  外觀如下:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  標籤的常用名稱取決於它們相對於其他標籤的位置:

  1)child—孩子是另一個標籤內的標籤。因此,p上面的兩個標籤都是該body標籤的子級。

  2)parent—父標籤是另一個標籤在其中的標籤。在上方,html標籤是標籤的父級body。

  3)sibiling—同胞是與另一個標籤嵌套在同一父對象中的標籤。例如,head和body是兄弟姐妹,因爲它們都在內部html。這兩個p標籤都是同級標籤,因爲它們都在內部body。

  我們還可以向HTML標記添加屬性以更改其行爲:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  外觀如下:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  在上面的示例中,我們添加了兩個a標籤。a標籤是鏈接,並告訴瀏覽器呈現到另一個網頁的鏈接。href標籤的屬性確定鏈接的位置。

  a並且p是極爲常見的html標籤。以下是一些其他內容:

  1)div —表示頁面的劃分或區域。

  2)b -加粗其中的任何文本。

  3)i —斜體顯示裏面的任何文本。

  4)table —創建一個表格。

  5)form -創建輸入表單。

  有關標籤的完整列表,請參見此處。

  在進行實際的Web抓取之前,讓我們瞭解class和id屬性。這些特殊屬性賦予HTML元素名稱,並使它們在我們抓取時更易於與之交互。一個元素可以具有多個類,並且一個類可以在元素之間共享。每個元素只能有一個ID,並且一個ID在頁面上只能使用一次。類和ID是可選的,並非所有元素都具有它們。

  我們可以在示例中添加類和ID:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  外觀如下:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  請求庫

  我們要抓取網頁的第一件事就是下載網頁。我們可以使用Python 請求庫下載頁面。請求庫將向GET網絡服務器發出請求,該服務器將爲我們下載給定網頁的HTML內容。我們可以使用幾種不同類型的請求requests,其中GET只有一種。如果您想了解更多信息,請查看我們的API教程。

  讓我們嘗試下載一個簡單的示例網站https://www.aaa-cg.com.cn/data/2642.html。我們需要先使用request.get方法下載它。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  運行請求後,我們得到一個Response對象。該對象具有一個status_code屬性,該屬性指示頁面是否已成功下載:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  A status_codeof 200表示頁面下載成功。這裏我們不會完全探討狀態代碼,但是以「 a」開頭的狀態代碼2通常表示成功,而以「 a」 4或「 a」 開頭的代碼5表示錯誤。

  我們可以使用content屬性輸出頁面的HTML內容:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  使用BeautifulSoup解析頁面

  如您在上面看到的,我們現在已經下載了一個HTML文檔。

  我們可以使用BeautifulSoup庫來解析此文檔,並從p標記中提取文本。我們首先必須導入庫,並創建BeautifulSoup該類的實例來解析我們的文檔:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以使用對象prettify上的方法,打印出格式良好的頁面HTML內容BeautifulSoup:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  由於所有標籤都是嵌套的,因此我們可以一次在整個結構中移動一層。我們可以首先使用children屬性來選擇頁面頂層的所有元素soup。請注意,它children返回一個列表生成器,因此我們需要list在其上調用該函數:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  上面告訴我們,在頁面的頂層有兩個標籤-初始標籤和標籤。n列表中也有換行符()。讓我們看看列表中每個元素的類型是:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  如您所見,所有項目都是BeautifulSoup對象。第一個是Doctype對象,其中包含有關文檔類型的信息。第二個是NavigableString,表示在HTML文檔中找到的文本。最後一項是一個Tag對象,其中包含其他嵌套標籤。對象,也是我們最常處理的最重要的對象類型Tag。

  該Tag對象使我們可以瀏覽HTML文檔,並提取其他標籤和文本。您可以在此處瞭解有關各種BeautifulSoup對象的更多信息。

  現在,我們可以通過選擇html列表中的第三項來選擇標籤及其子元素:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  該children屬性返回的列表中的每個項目也是一個BeautifulSoup對象,因此我們也可以在children上調用方法html。

  現在,我們可以在html標記內找到子代:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  如您在上方看到的,這裏有兩個標籤head,和body。我們想要提取p標籤內的文本,因此我們將深入研究正文:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以p通過找到body標籤的子標籤來獲得標籤:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在我們可以隔離p標籤:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  隔離標籤後,我們可以使用get_text方法提取標籤內的所有文本:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  一次查找標籤的所有實例

  上面我們做的事情對於弄清楚如何導航頁面很有用,但是花了很多命令才能完成相當簡單的事情。如果要提取單個標籤,則可以改用find_all方法,該方法將在頁面上找到標籤的所有實例。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  請注意,這會find_all返回一個列表,因此我們必須遍歷或使用列表索引來提取文本:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  如果只想查找標籤的第一個實例,則可以使用find方法,該方法將返回一個BeautifulSoup對象:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  按類別和ID搜索標籤

  我們之前介紹了類和id,但是可能不清楚它們爲什麼有用。CSS使用類和ID來確定將某些樣式應用於哪些HTML元素。在抓取時,我們也可以使用它們來指定要抓取的特定元素。爲了說明這一原理,我們將使用以下頁面:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們可以通過URL訪問上述文檔https://www.aaa-cg.com.cn/data/2642.html。首先下載頁面並創建一個BeautifulSoup對象:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以使用該find_all方法按類或ID搜索項目。在以下示例中,我們將搜索p具有class的所有標籤outer-text:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  在下面的示例中,我們將查找具有class的所有標籤outer-text:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們還可以通過id搜索元素:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  使用CSS選擇器

  您也可以使用CSS選擇器搜索項目。這些選擇器是CSS語言允許開發人員指定樣式的HTML標籤的方式。這裏有些例子:

  1)p a—查找a標籤內的所有標籤p。

  2)body p a-找到所有a一個內部標籤p上標籤內body的標籤。

  3)html body—查找body標籤內的所有標籤html。

  4)p.outer-text—查找所有p帶有類別的標籤outer-text。

  5)p#first—查找pID爲的所有標籤first。

  6)body p.outer-text—查找p標籤outer-text內部具有類的所有body標籤。

  您可以在此處瞭解有關CSS選擇器的更多信息。

  BeautifulSoup對象支持使用select方法通過CSS選擇器搜索頁面。我們可以使用CSS選擇器p在頁面中找到所有位於這樣的標籤div:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  請注意,上述select方法會返回BeautifulSoup對象列表,就像find和一樣find_all。

  下載天氣數據

  現在,我們已經足夠了解,可以從國家氣象局的網站上提取有關當地天氣的信息。第一步是找到我們要抓取的頁面。我們將從此頁面提取有關天氣信息。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們將提取有關擴展預測的數據。

  從圖像中可以看到,該頁面包含有關下週擴展預報的信息,包括一天中的時間,溫度和條件的簡要說明。

  使用Chrome DevTools探索頁面結構

  我們需要做的第一件事是使用Chrome Devtools檢查頁面。如果您使用的是其他瀏覽器,則Firefox和Safari具有等效功能。建議還是使用Chrome。

  您可以通過單擊啓動Chrome中的開發人員工具View -> Developer -> Developer Tools。您應該最終在瀏覽器底部看到一個面板,如下所示。確保Elements面板突出顯示:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  Chrome開發者工具。

  元素面板將在頁面上顯示所有HTML標記,並讓您瀏覽它們。這是一個非常方便的功能!

  右鍵單擊「擴展的預測」附近的頁面,然後單擊「檢查」,我們將在元素面板中打開包含文本「擴展的預測」的標籤:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  擴展的預測文本。

  然後,我們可以在「元素」面板中向上滾動以找到「最外面的」元素,其中包含與擴展的預測相對應的所有文本。在這種情況下,它是一個divID 爲的標籤seven-day-forecast:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  包含擴展預測項目的div。

  如果您在控制檯上單擊鼠標並瀏覽div,您將發現div該類中包含了每個預測項(例如「 Tonight」,「 Thursday」和「 Thursday Night」)tombstone-container。

  現在我們知道足夠的信息來下載頁面並開始對其進行解析。在下面的代碼中,我們:

  1)下載包含預測的網頁。

  2)創建一個BeautifulSoup類來分析頁面。

  3)找到divID爲的seven-day-forecast,並分配給seven_day

  4)在中seven_day,找到每個單獨的預測項目。

  5)提取並打印第一個預測項目。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  從頁面中提取信息

  如您所見,預測項內tonight是我們想要的所有信息。還有4,我們可以提取信息:

  1)預測項目的名稱-在這種情況下爲Tonight。

  2)條件的說明-存儲在的title屬性中img。

  3)條件的簡短說明-在這種情況下爲Mostly Clear。

  4)溫度低-在這種情況下,49度。

  我們將首先提取預測項的名稱,簡短描述和溫度,因爲它們都相似:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以title從img標記中提取屬性。爲此,我們只將BeautifulSoup對象視爲字典,然後將想要的屬性作爲鍵傳遞:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  從頁面中提取所有信息

  現在,我們知道如何提取每條信息,可以將我們的知識與CSS選擇器和列表推導相結合,以一次提取所有信息。

  在下面的代碼中,我們:

  1)選擇與類的所有項目period-name與類物品內部tombstone-container在seven_day。

  2)使用列表推導get_text對每個BeautifulSoup對象調用該方法。

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  如您在上面看到的,我們的技術按順序爲我們獲取了每個期間名稱。我們可以應用相同的技術來獲取其他3字段:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  將我們的數據合併到Pandas Dataframe中

  現在,我們可以將數據合併到Pandas DataFrame中並進行分析。DataFrame是可以存儲表格數據的對象,從而使數據分析變得容易。如果您想了解有關pandas的更多信息,請在此處免費試用我們的課程。

  爲了做到這一點,我們將調用DataFrame類,並傳入我們擁有的每個項目列表。我們將它們作爲字典的一部分傳遞。每個字典鍵將成爲DataFrame中的一列,每個列表將成爲該列中的值:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  現在,我們可以對數據進行一些分析。例如,我們可以使用正則表達式和Series.str.extract方法提取數字溫度值:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  然後,我們可以找到所有高溫和低溫的平均值:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  我們也只能選擇夜間發生的行:

  

數據分析如何使用python中Beautiful Soup進行WEB抓取

 

  此Web爬網項目的後續步驟

  您現在應該對如何抓取網頁和提取數據有了很好的瞭解。下一步不錯的選擇是選擇一個網站,然後嘗試自己進行一些網絡抓取。一些要抓取的數據的好例子是:

  1)新聞文章

  2)體育比分

  3)天氣預報

  4)股票價格

  5)網上零售商價格

  您可能還想繼續抓取國家氣象局,並查看可以從頁面或您自己的城市中提取的其他數據。

  還有問題嗎?讓我們看一下其他一些Web抓取常見問題解答:

  爲什麼要進行網絡爬網?何時需要?

  如果沒有組織格式的數據可用,則需要進行網絡抓取以解鎖更強大的分析。

  這對於各種個人項目可能很有用。例如,您可能想要抓取體育網站來分析與您最喜歡的球隊相關的統計信息。

  但是,在業務環境中,Web抓取對於數據分析師和數據科學家也很重要。除非您將其抓取(或不費力氣地手工將其複製到電子表格中進行分析),否則網絡上的大量數據根本無法獲得。當這些數據可能包含對您的公司或您的行業有價值的見解時,您將不得不轉向網絡抓取。

  我可以用網頁爬蟲做什麼?

  使用網絡抓取時,最大的限制可能是您可以做什麼,而不是可以做什麼。有了正確的代碼,幾乎所有公共網站上的數據都可以通過網絡抓取進行下載,過濾和格式化。

  但是,是否允許甚至合法是另一回事。

  正如我們在數據分析如何使用python中Beautiful Soup進行WEB抓取開頭所提到的,在嘗試抓取網站之前,確定網站的網站抓取政策非常重要。如果允許抓取,則應確保遵循數據分析如何使用python中Beautiful Soup進行WEB抓取前面概述的最佳做法,以確保您不會對相關網站造成過大的負擔。

  用於Web搜尋的Python庫

  1)請求 -這個關鍵庫實際上是將數據從Web服務器獲取到您的計算機所必需的,並且它還包含其他一些很酷的功能,例如緩存。

  2)Beautiful Soup 4-這是我們在這裏使用的庫,它旨在使基於HTML標籤的數據過濾變得簡單。

  3)lmxl —快速的HTML和XML解析器(現在也與Beautiful Soup集成!)

  4)Selenium —一種Web驅動程序工具,當您需要從請求庫無法訪問的網站獲取數據時非常有用,因爲它被隱藏在諸如登錄表單或強制單擊鼠標之類的內容之後。

  5)Scrapy-一個完整的Web抓取框架,對於一次性數據分析項目來說可能會過時,但是當生產項目,管道等需要抓取時,它非常適合。

  如果您想了解有關此處涵蓋的任何主題的更多信息,請查看我們免費提供的交互式課程:Python中的Web Scraping

 

摘自:https://www.aaa-cg.com.cn/data/2650.html