旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國(guó)統(tǒng)一咨詢熱線:010-5367 2995
首頁(yè) > 熱門文章 > 大數(shù)據(jù)分析 > 數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取

時(shí)間:2020-09-07來(lái)源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-09-07點(diǎn)擊量:作者:Sissi



  互聯(lián)網(wǎng)是絕對(duì)大量的數(shù)據(jù)源。不幸的是,如果沒(méi)有方便組織的CSV文件可供下載和分析,則絕大部分。如果要從許多網(wǎng)站捕獲數(shù)據(jù),則需要嘗試進(jìn)行網(wǎng)絡(luò)抓取。
 

  如果您還是一個(gè)初學(xué)者,請(qǐng)不要擔(dān)心-在數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取中,我們將從頭開始介紹如何使用Python從頭開始進(jìn)行Web抓取,首先回答一些有關(guān)Web抓取的常見(jiàn)問(wèn)題。
 

  如果您已經(jīng)熟悉了該概念,請(qǐng)隨意滾動(dòng)瀏覽這些內(nèi)容,然后直接進(jìn)入數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取!
 

  什么是Python中的網(wǎng)頁(yè)搜刮?
 

  一些網(wǎng)站提供的數(shù)據(jù)集可以CSV格式下載,也可以通過(guò)應(yīng)用程序編程接口(API)訪問(wèn)。但是許多具有有用數(shù)據(jù)的網(wǎng)站卻沒(méi)有提供這些方便的選擇。
 

  例如,考慮國(guó)家氣象局的網(wǎng)站。它包含每個(gè)位置的最新天氣預(yù)報(bào),但是無(wú)法通過(guò)CSV或API訪問(wèn)該天氣數(shù)據(jù)。
 

  如果我們想分析這些數(shù)據(jù),或者下載它以便在其他應(yīng)用程序中使用,我們將不會(huì)刻意復(fù)制粘貼所有內(nèi)容。Web抓取是一項(xiàng)使我們能夠使用編程來(lái)完成繁重工作的技術(shù)。我們將編寫一些代碼,這些代碼將在NWS站點(diǎn)上查找,僅獲取我們要使用的數(shù)據(jù),然后以所需的格式輸出。
 

  在數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取中,我們將向您展示如何使用Python 3和Beautiful Soup庫(kù)執(zhí)行網(wǎng)絡(luò)抓取。我們將從國(guó)家氣象局抓取天氣預(yù)報(bào),然后使用pandas庫(kù)進(jìn)行分析。
 

  Web爬網(wǎng)如何工作?
 

  抓取網(wǎng)絡(luò)時(shí),我們編寫代碼將請(qǐng)求發(fā)送到托管我們指定頁(yè)面的服務(wù)器。通常,我們的代碼會(huì)像瀏覽器一樣下載該頁(yè)面的源代碼。但是,它不是在視覺(jué)上顯示頁(yè)面,而是在頁(yè)面中進(jìn)行過(guò)濾以查找我們指定的HTML元素,并提取我們指示其提取的任何內(nèi)容。
 

  例如,如果我們想從網(wǎng)站獲取H2標(biāo)簽內(nèi)的所有標(biāo)題,則可以編寫一些代碼來(lái)實(shí)現(xiàn)。我們的代碼將從其服務(wù)器請(qǐng)求網(wǎng)站的內(nèi)容并下載。然后,它將通過(guò)頁(yè)面的HTML查找H2標(biāo)簽。只要找到H2標(biāo)簽,它就會(huì)復(fù)制標(biāo)簽內(nèi)的所有文本,并以我們指定的任何格式輸出。
 

  需要注意的一件事:從服務(wù)器的角度來(lái)看,通過(guò)Web抓取請(qǐng)求頁(yè)面與在Web瀏覽器中加載頁(yè)面相同。當(dāng)我們使用代碼提交這些請(qǐng)求時(shí),我們可能比普通用戶更快地“加載”頁(yè)面,從而很快耗盡了網(wǎng)站所有者的服務(wù)器資源。
 

  為什么要使用Python進(jìn)行網(wǎng)頁(yè)爬取?
 

  可以使用許多其他編程語(yǔ)言進(jìn)行Web抓取。例如,我們也有使用R進(jìn)行網(wǎng)絡(luò)抓取的教程。
 

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

  我們將在數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取結(jié)尾介紹其他一些Web抓取常見(jiàn)問(wèn)題解答,但現(xiàn)在是時(shí)候開始研究我們的Web抓取項(xiàng)目!每個(gè)網(wǎng)絡(luò)抓取項(xiàng)目都應(yīng)從回答以下問(wèn)題開始:
 

  網(wǎng)站搜刮合法嗎?
 

  不幸的是,這里沒(méi)有一個(gè)簡(jiǎn)單的答案。一些網(wǎng)站明確允許網(wǎng)頁(yè)抓取。其他人明確禁止這樣做。許多網(wǎng)站沒(méi)有以一種方式或另一種方式提供任何明確的指導(dǎo)。
 

  在抓取任何網(wǎng)站之前,我們應(yīng)該查看一個(gè)條款和條件頁(yè)面,以查看是否有關(guān)于抓取的明確規(guī)則。如果有,我們應(yīng)該跟隨他們。如果沒(méi)有,那么它就更像是一個(gè)判斷。
 

  但是請(qǐng)記住,Web抓取會(huì)消耗主機(jī)網(wǎng)站的服務(wù)器資源。如果我們只刮一頁(yè),那不會(huì)造成問(wèn)題。但是,如果我們的代碼每十分鐘刮一次1,000頁(yè),那么對(duì)于網(wǎng)站所有者而言,這可能很快就會(huì)變得昂貴。
 

  因此,除了遵循網(wǎng)站上發(fā)布的所有和所有有關(guān)網(wǎng)絡(luò)抓取的明確規(guī)則之外,遵循以下最佳做法也是一個(gè)好主意:
 

  1)永遠(yuǎn)不要比您需要的刮擦次數(shù)更多

  2)考慮緩存您抓取的內(nèi)容,以便在處理用于過(guò)濾和分析它的代碼時(shí)僅下載一次,而不是每次運(yùn)行代碼時(shí)都重新下載

  3)考慮使用功能time.sleep()來(lái)在代碼中構(gòu)建暫停,例如在太短的時(shí)間內(nèi)避免過(guò)多的請(qǐng)求使不堪重負(fù)的服務(wù)器癱瘓。
 

  在數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取的案例中,NWS的數(shù)據(jù)是公共領(lǐng)域的,其術(shù)語(yǔ)不禁止Web抓取,因此我們可以繼續(xù)進(jìn)行。
 

  網(wǎng)頁(yè)的組成部分
 

  當(dāng)我們?cè)L問(wèn)網(wǎng)頁(yè)時(shí),我們的網(wǎng)絡(luò)瀏覽器會(huì)向網(wǎng)絡(luò)服務(wù)器發(fā)出請(qǐng)求。此請(qǐng)求稱為GET請(qǐng)求,因?yàn)槲覀冋趶姆?wù)器獲取文件。然后,服務(wù)器發(fā)回文件,這些文件告訴我們的瀏覽器如何為我們呈現(xiàn)頁(yè)面。文件分為幾種主要類型:
 

  1)HTML —包含頁(yè)面的主要內(nèi)容。

  2)CSS —添加樣式以使頁(yè)面看起來(lái)更好。

  3)JS — Javascript文件為網(wǎng)頁(yè)增加了交互性。

  4)圖片-JPG和PNG等圖片格式允許網(wǎng)頁(yè)顯示圖片。
 

  瀏覽器收到所有文件后,它將呈現(xiàn)頁(yè)面并將其顯示給我們。要使頁(yè)面漂亮地呈現(xiàn),在幕后發(fā)生了很多事情,但是當(dāng)我們進(jìn)行網(wǎng)頁(yè)抓取時(shí),我們不需要擔(dān)心其中的大多數(shù)問(wèn)題。進(jìn)行網(wǎng)頁(yè)抓取時(shí),我們會(huì)對(duì)網(wǎng)頁(yè)的主要內(nèi)容感興趣,因此我們看一下HTML。
 

  HTML
 

  超文本標(biāo)記語(yǔ)言(HyperText Markup Language,HTML)是用于創(chuàng)建網(wǎng)頁(yè)的一種語(yǔ)言。HTML不是像Python這樣的編程語(yǔ)言,而是一種標(biāo)記語(yǔ)言,它告訴瀏覽器如何布局內(nèi)容。HTML使您可以執(zhí)行與Microsoft Word等字處理器中類似的操作-使文本加粗,創(chuàng)建段落等。因?yàn)镠TML不是一種編程語(yǔ)言,所以它幾乎不像Python那樣復(fù)雜。
 

  讓我們快速瀏覽一下HTML,以便我們了解足夠有效地進(jìn)行抓取。HTML由稱為標(biāo)簽的元素組成。最基本的標(biāo)簽是標(biāo)簽。此標(biāo)記告訴Web瀏覽器,其中的所有內(nèi)容都是HTML。我們可以使用以下標(biāo)記來(lái)制作一個(gè)簡(jiǎn)單的HTML文檔:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  我們尚未在頁(yè)面上添加任何內(nèi)容,因此,如果我們?cè)赪eb瀏覽器中查看HTML文檔,則不會(huì)看到任何內(nèi)容:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  在html標(biāo)簽內(nèi),我們放置了另外兩個(gè)標(biāo)簽,head標(biāo)簽和body標(biāo)簽。網(wǎng)頁(yè)的主要內(nèi)容進(jìn)入body標(biāo)記。該head標(biāo)簽包含有關(guān)網(wǎng)頁(yè)標(biāo)題,以及其它信息一般不會(huì)在網(wǎng)頁(yè)抓取有用的數(shù)據(jù):

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  我們?nèi)匀粵](méi)有在頁(yè)面中添加任何內(nèi)容(位于body標(biāo)記內(nèi)),因此我們?cè)僖部床坏饺魏蝺?nèi)容:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  您可能在上面已經(jīng)注意到,我們將head和body標(biāo)記放在了html標(biāo)記內(nèi)。在HTML中,標(biāo)簽是嵌套的,可以放在其他標(biāo)簽內(nèi)。
 

  現(xiàn)在,我們將以p標(biāo)簽的形式將我們的第一個(gè)內(nèi)容添加到頁(yè)面。所述p標(biāo)記定義一個(gè)段,并在標(biāo)簽內(nèi)的任何文本顯示為一個(gè)單獨(dú)的段落:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  外觀如下:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  標(biāo)簽的常用名稱取決于它們相對(duì)于其他標(biāo)簽的位置:
 

  1)child—孩子是另一個(gè)標(biāo)簽內(nèi)的標(biāo)簽。因此,p上面的兩個(gè)標(biāo)簽都是該body標(biāo)簽的子級(jí)。

  2)parent—父標(biāo)簽是另一個(gè)標(biāo)簽在其中的標(biāo)簽。在上方,html標(biāo)簽是標(biāo)簽的父級(jí)body。

  3)sibiling—同胞是與另一個(gè)標(biāo)簽嵌套在同一父對(duì)象中的標(biāo)簽。例如,head和body是兄弟姐妹,因?yàn)樗鼈兌荚趦?nèi)部html。這兩個(gè)p標(biāo)簽都是同級(jí)標(biāo)簽,因?yàn)樗鼈兌荚趦?nèi)部body。
 

  我們還可以向HTML標(biāo)記添加屬性以更改其行為:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  外觀如下:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  在上面的示例中,我們添加了兩個(gè)a標(biāo)簽。a標(biāo)簽是鏈接,并告訴瀏覽器呈現(xiàn)到另一個(gè)網(wǎng)頁(yè)的鏈接。href標(biāo)簽的屬性確定鏈接的位置。
 

  a并且p是極為常見(jiàn)的html標(biāo)簽。以下是一些其他內(nèi)容:
 

  1)div —表示頁(yè)面的劃分或區(qū)域。

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

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

  4)table —創(chuàng)建一個(gè)表格。

  5)form -創(chuàng)建輸入表單。
 

  有關(guān)標(biāo)簽的完整列表,請(qǐng)參見(jiàn)此處。
 

  在進(jìn)行實(shí)際的Web抓取之前,讓我們了解class和id屬性。這些特殊屬性賦予HTML元素名稱,并使它們?cè)谖覀冏トr(shí)更易于與之交互。一個(gè)元素可以具有多個(gè)類,并且一個(gè)類可以在元素之間共享。每個(gè)元素只能有一個(gè)ID,并且一個(gè)ID在頁(yè)面上只能使用一次。類和ID是可選的,并非所有元素都具有它們。
 

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

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  外觀如下:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  請(qǐng)求庫(kù)
 

  我們要抓取網(wǎng)頁(yè)的第一件事就是下載網(wǎng)頁(yè)。我們可以使用Python 請(qǐng)求庫(kù)下載頁(yè)面。請(qǐng)求庫(kù)將向GET網(wǎng)絡(luò)服務(wù)器發(fā)出請(qǐng)求,該服務(wù)器將為我們下載給定網(wǎng)頁(yè)的HTML內(nèi)容。我們可以使用幾種不同類型的請(qǐng)求requests,其中GET只有一種。如果您想了解更多信息,請(qǐng)查看我們的API教程。
 

  讓我們嘗試下載一個(gè)簡(jiǎn)單的示例網(wǎng)站http://5wd995.cn/data/2642.html。我們需要先使用request.get方法下載它。

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  運(yùn)行請(qǐng)求后,我們得到一個(gè)Response對(duì)象。該對(duì)象具有一個(gè)status_code屬性,該屬性指示頁(yè)面是否已成功下載:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  A status_codeof 200表示頁(yè)面下載成功。這里我們不會(huì)完全探討狀態(tài)代碼,但是以“ a”開頭的狀態(tài)代碼2通常表示成功,而以“ a” 4或“ a” 開頭的代碼5表示錯(cuò)誤。
 

  我們可以使用content屬性輸出頁(yè)面的HTML內(nèi)容:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  使用BeautifulSoup解析頁(yè)面
 

  如您在上面看到的,我們現(xiàn)在已經(jīng)下載了一個(gè)HTML文檔。
 

  我們可以使用BeautifulSoup庫(kù)來(lái)解析此文檔,并從p標(biāo)記中提取文本。我們首先必須導(dǎo)入庫(kù),并創(chuàng)建BeautifulSoup該類的實(shí)例來(lái)解析我們的文檔:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  現(xiàn)在,我們可以使用對(duì)象prettify上的方法,打印出格式良好的頁(yè)面HTML內(nèi)容BeautifulSoup:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  由于所有標(biāo)簽都是嵌套的,因此我們可以一次在整個(gè)結(jié)構(gòu)中移動(dòng)一層。我們可以首先使用children屬性來(lái)選擇頁(yè)面頂層的所有元素soup。請(qǐng)注意,它c(diǎn)hildren返回一個(gè)列表生成器,因此我們需要list在其上調(diào)用該函數(shù):

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

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

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  如您所見(jiàn),所有項(xiàng)目都是BeautifulSoup對(duì)象。第一個(gè)是Doctype對(duì)象,其中包含有關(guān)文檔類型的信息。第二個(gè)是NavigableString,表示在HTML文檔中找到的文本。最后一項(xiàng)是一個(gè)Tag對(duì)象,其中包含其他嵌套標(biāo)簽。對(duì)象,也是我們最常處理的最重要的對(duì)象類型Tag。
 

  該Tag對(duì)象使我們可以瀏覽HTML文檔,并提取其他標(biāo)簽和文本。您可以在此處了解有關(guān)各種BeautifulSoup對(duì)象的更多信息。
 

  現(xiàn)在,我們可以通過(guò)選擇html列表中的第三項(xiàng)來(lái)選擇標(biāo)簽及其子元素:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  該children屬性返回的列表中的每個(gè)項(xiàng)目也是一個(gè)BeautifulSoup對(duì)象,因此我們也可以在children上調(diào)用方法html。
 

  現(xiàn)在,我們可以在html標(biāo)記內(nèi)找到子代:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  如您在上方看到的,這里有兩個(gè)標(biāo)簽head,和body。我們想要提取p標(biāo)簽內(nèi)的文本,因此我們將深入研究正文:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  現(xiàn)在,我們可以p通過(guò)找到body標(biāo)簽的子標(biāo)簽來(lái)獲得標(biāo)簽:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  現(xiàn)在我們可以隔離p標(biāo)簽:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  隔離標(biāo)簽后,我們可以使用get_text方法提取標(biāo)簽內(nèi)的所有文本:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  一次查找標(biāo)簽的所有實(shí)例
 

  上面我們做的事情對(duì)于弄清楚如何導(dǎo)航頁(yè)面很有用,但是花了很多命令才能完成相當(dāng)簡(jiǎn)單的事情。如果要提取單個(gè)標(biāo)簽,則可以改用find_all方法,該方法將在頁(yè)面上找到標(biāo)簽的所有實(shí)例。

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  請(qǐng)注意,這會(huì)find_all返回一個(gè)列表,因此我們必須遍歷或使用列表索引來(lái)提取文本:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  如果只想查找標(biāo)簽的第一個(gè)實(shí)例,則可以使用find方法,該方法將返回一個(gè)BeautifulSoup對(duì)象:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  按類別和ID搜索標(biāo)簽
 

  我們之前介紹了類和id,但是可能不清楚它們?yōu)槭裁从杏?。CSS使用類和ID來(lái)確定將某些樣式應(yīng)用于哪些HTML元素。在抓取時(shí),我們也可以使用它們來(lái)指定要抓取的特定元素。為了說(shuō)明這一原理,我們將使用以下頁(yè)面:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  我們可以通過(guò)URL訪問(wèn)上述文檔http://5wd995.cn/data/2642.html。首先下載頁(yè)面并創(chuàng)建一個(gè)BeautifulSoup對(duì)象:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  現(xiàn)在,我們可以使用該find_all方法按類或ID搜索項(xiàng)目。在以下示例中,我們將搜索p具有class的所有標(biāo)簽outer-text:
 

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  在下面的示例中,我們將查找具有class的所有標(biāo)簽outer-text:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  我們還可以通過(guò)id搜索元素:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  使用CSS選擇器
 

  您也可以使用CSS選擇器搜索項(xiàng)目。這些選擇器是CSS語(yǔ)言允許開發(fā)人員指定樣式的HTML標(biāo)簽的方式。這里有些例子:
 

  1)p a—查找a標(biāo)簽內(nèi)的所有標(biāo)簽p。

  2)body p a-找到所有a一個(gè)內(nèi)部標(biāo)簽p上標(biāo)簽內(nèi)body的標(biāo)簽。

  3)html body—查找body標(biāo)簽內(nèi)的所有標(biāo)簽html。

  4)p.outer-text—查找所有p帶有類別的標(biāo)簽outer-text。

  5)p#first—查找pID為的所有標(biāo)簽first。

  6)body p.outer-text—查找p標(biāo)簽outer-text內(nèi)部具有類的所有body標(biāo)簽。
 

  您可以在此處了解有關(guān)CSS選擇器的更多信息。
 

  BeautifulSoup對(duì)象支持使用select方法通過(guò)CSS選擇器搜索頁(yè)面。我們可以使用CSS選擇器p在頁(yè)面中找到所有位于這樣的標(biāo)簽div:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  請(qǐng)注意,上述select方法會(huì)返回BeautifulSoup對(duì)象列表,就像find和一樣find_all。
 

  下載天氣數(shù)據(jù)
 

  現(xiàn)在,我們已經(jīng)足夠了解,可以從國(guó)家氣象局的網(wǎng)站上提取有關(guān)當(dāng)?shù)靥鞖獾男畔?。第一步是找到我們要抓取的?yè)面。我們將從此頁(yè)面提取有關(guān)天氣信息。

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  我們將提取有關(guān)擴(kuò)展預(yù)測(cè)的數(shù)據(jù)。
 

  從圖像中可以看到,該頁(yè)面包含有關(guān)下周擴(kuò)展預(yù)報(bào)的信息,包括一天中的時(shí)間,溫度和條件的簡(jiǎn)要說(shuō)明。
 

  使用Chrome DevTools探索頁(yè)面結(jié)構(gòu)
 

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

  您可以通過(guò)單擊啟動(dòng)Chrome中的開發(fā)人員工具View -> Developer -> Developer Tools。您應(yīng)該最終在瀏覽器底部看到一個(gè)面板,如下所示。確保Elements面板突出顯示:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  Chrome開發(fā)者工具。
 

  元素面板將在頁(yè)面上顯示所有HTML標(biāo)記,并讓您瀏覽它們。這是一個(gè)非常方便的功能!
 

  右鍵單擊“擴(kuò)展的預(yù)測(cè)”附近的頁(yè)面,然后單擊“檢查”,我們將在元素面板中打開包含文本“擴(kuò)展的預(yù)測(cè)”的標(biāo)簽:
 

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  擴(kuò)展的預(yù)測(cè)文本。
 

  然后,我們可以在“元素”面板中向上滾動(dòng)以找到“最外面的”元素,其中包含與擴(kuò)展的預(yù)測(cè)相對(duì)應(yīng)的所有文本。在這種情況下,它是一個(gè)divID 為的標(biāo)簽seven-day-forecast:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  包含擴(kuò)展預(yù)測(cè)項(xiàng)目的div。
 

  如果您在控制臺(tái)上單擊鼠標(biāo)并瀏覽div,您將發(fā)現(xiàn)div該類中包含了每個(gè)預(yù)測(cè)項(xiàng)(例如“ Tonight”,“ Thursday”和“ Thursday Night”)tombstone-container。
 

  現(xiàn)在我們知道足夠的信息來(lái)下載頁(yè)面并開始對(duì)其進(jìn)行解析。在下面的代碼中,我們:
 

  1)下載包含預(yù)測(cè)的網(wǎng)頁(yè)。

  2)創(chuàng)建一個(gè)BeautifulSoup類來(lái)分析頁(yè)面。

  3)找到divID為的seven-day-forecast,并分配給seven_day

  4)在中seven_day,找到每個(gè)單獨(dú)的預(yù)測(cè)項(xiàng)目。

  5)提取并打印第一個(gè)預(yù)測(cè)項(xiàng)目。

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  從頁(yè)面中提取信息
 

  如您所見(jiàn),預(yù)測(cè)項(xiàng)內(nèi)tonight是我們想要的所有信息。還有4,我們可以提取信息:
 

  1)預(yù)測(cè)項(xiàng)目的名稱-在這種情況下為Tonight。

  2)條件的說(shuō)明-存儲(chǔ)在的title屬性中img。

  3)條件的簡(jiǎn)短說(shuō)明-在這種情況下為Mostly Clear。

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

  我們將首先提取預(yù)測(cè)項(xiàng)的名稱,簡(jiǎn)短描述和溫度,因?yàn)樗鼈兌枷嗨疲?/p>

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  現(xiàn)在,我們可以title從img標(biāo)記中提取屬性。為此,我們只將BeautifulSoup對(duì)象視為字典,然后將想要的屬性作為鍵傳遞:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  從頁(yè)面中提取所有信息
 

  現(xiàn)在,我們知道如何提取每條信息,可以將我們的知識(shí)與CSS選擇器和列表推導(dǎo)相結(jié)合,以一次提取所有信息。
 

  在下面的代碼中,我們:
 

  1)選擇與類的所有項(xiàng)目period-name與類物品內(nèi)部tombstone-container在seven_day。

  2)使用列表推導(dǎo)get_text對(duì)每個(gè)BeautifulSoup對(duì)象調(diào)用該方法。

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  如您在上面看到的,我們的技術(shù)按順序?yàn)槲覀儷@取了每個(gè)期間名稱。我們可以應(yīng)用相同的技術(shù)來(lái)獲取其他3字段:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  將我們的數(shù)據(jù)合并到Pandas Dataframe中
 

  現(xiàn)在,我們可以將數(shù)據(jù)合并到Pandas DataFrame中并進(jìn)行分析。DataFrame是可以存儲(chǔ)表格數(shù)據(jù)的對(duì)象,從而使數(shù)據(jù)分析變得容易。如果您想了解有關(guān)pandas的更多信息,請(qǐng)?jiān)诖颂幟赓M(fèi)試用我們的課程。
 

  為了做到這一點(diǎn),我們將調(diào)用DataFrame類,并傳入我們擁有的每個(gè)項(xiàng)目列表。我們將它們作為字典的一部分傳遞。每個(gè)字典鍵將成為DataFrame中的一列,每個(gè)列表將成為該列中的值:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  現(xiàn)在,我們可以對(duì)數(shù)據(jù)進(jìn)行一些分析。例如,我們可以使用正則表達(dá)式和Series.str.extract方法提取數(shù)字溫度值:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

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

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  我們也只能選擇夜間發(fā)生的行:

數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取
 

  此Web爬網(wǎng)項(xiàng)目的后續(xù)步驟
 

  您現(xiàn)在應(yīng)該對(duì)如何抓取網(wǎng)頁(yè)和提取數(shù)據(jù)有了很好的了解。下一步不錯(cuò)的選擇是選擇一個(gè)網(wǎng)站,然后嘗試自己進(jìn)行一些網(wǎng)絡(luò)抓取。一些要抓取的數(shù)據(jù)的好例子是:
 

  1)新聞文章

  2)體育比分

  3)天氣預(yù)報(bào)

  4)股票價(jià)格

  5)網(wǎng)上零售商價(jià)格
 

  您可能還想繼續(xù)抓取國(guó)家氣象局,并查看可以從頁(yè)面或您自己的城市中提取的其他數(shù)據(jù)。
 

  還有問(wèn)題嗎?讓我們看一下其他一些Web抓取常見(jiàn)問(wèn)題解答:
 

  為什么要進(jìn)行網(wǎng)絡(luò)爬網(wǎng)?何時(shí)需要?
 

  如果沒(méi)有組織格式的數(shù)據(jù)可用,則需要進(jìn)行網(wǎng)絡(luò)抓取以解鎖更強(qiáng)大的分析。
 

  這對(duì)于各種個(gè)人項(xiàng)目可能很有用。例如,您可能想要抓取體育網(wǎng)站來(lái)分析與您最喜歡的球隊(duì)相關(guān)的統(tǒng)計(jì)信息。
 

  但是,在業(yè)務(wù)環(huán)境中,Web抓取對(duì)于數(shù)據(jù)分析師和數(shù)據(jù)科學(xué)家也很重要。除非您將其抓取(或不費(fèi)力氣地手工將其復(fù)制到電子表格中進(jìn)行分析),否則網(wǎng)絡(luò)上的大量數(shù)據(jù)根本無(wú)法獲得。當(dāng)這些數(shù)據(jù)可能包含對(duì)您的公司或您的行業(yè)有價(jià)值的見(jiàn)解時(shí),您將不得不轉(zhuǎn)向網(wǎng)絡(luò)抓取。
 

  我可以用網(wǎng)頁(yè)爬蟲做什么?
 

  使用網(wǎng)絡(luò)抓取時(shí),最大的限制可能是您可以做什么,而不是可以做什么。有了正確的代碼,幾乎所有公共網(wǎng)站上的數(shù)據(jù)都可以通過(guò)網(wǎng)絡(luò)抓取進(jìn)行下載,過(guò)濾和格式化。
 

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

  正如我們?cè)?a href="http://5wd995.cn/data/2650.html" target="_blank">數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取開頭所提到的,在嘗試抓取網(wǎng)站之前,確定網(wǎng)站的網(wǎng)站抓取政策非常重要。如果允許抓取,則應(yīng)確保遵循數(shù)據(jù)分析如何使用python中Beautiful Soup進(jìn)行WEB抓取前面概述的最佳做法,以確保您不會(huì)對(duì)相關(guān)網(wǎng)站造成過(guò)大的負(fù)擔(dān)。
 

  用于Web搜尋的Python庫(kù)
 

  1)請(qǐng)求 -這個(gè)關(guān)鍵庫(kù)實(shí)際上是將數(shù)據(jù)從Web服務(wù)器獲取到您的計(jì)算機(jī)所必需的,并且它還包含其他一些很酷的功能,例如緩存。

  2)Beautiful Soup 4-這是我們?cè)谶@里使用的庫(kù),它旨在使基于HTML標(biāo)簽的數(shù)據(jù)過(guò)濾變得簡(jiǎn)單。

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

  4)Selenium —一種Web驅(qū)動(dòng)程序工具,當(dāng)您需要從請(qǐng)求庫(kù)無(wú)法訪問(wèn)的網(wǎng)站獲取數(shù)據(jù)時(shí)非常有用,因?yàn)樗浑[藏在諸如登錄表單或強(qiáng)制單擊鼠標(biāo)之類的內(nèi)容之后。

  5)Scrapy-一個(gè)完整的Web抓取框架,對(duì)于一次性數(shù)據(jù)分析項(xiàng)目來(lái)說(shuō)可能會(huì)過(guò)時(shí),但是當(dāng)生產(chǎn)項(xiàng)目,管道等需要抓取時(shí),它非常適合。
 

  如果您想了解有關(guān)此處涵蓋的任何主題的更多信息,請(qǐng)查看我們免費(fèi)提供的交互式課程:Python中的Web Scraping

 



 

預(yù)約申請(qǐng)免費(fèi)試聽課

填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動(dòng)者教育科技有限公司版權(quán)所有
備案號(hào):京ICP備12034770號(hào)

?2007-2022/ 5wd995.cn 北京漫動(dòng)者數(shù)字科技有限公司 備案號(hào): 京ICP備12034770號(hào) 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號(hào)

網(wǎng)站地圖