excelperfect 標(biāo)簽:Python與Excel,pandas 現(xiàn)如今,人們隨時(shí)隨地都可以連接到互聯(lián)網(wǎng)上,互聯(lián)網(wǎng)可能是最大的公共數(shù)據(jù)庫(kù),學(xué)習(xí)如何從互聯(lián)網(wǎng)上獲取數(shù)據(jù)至關(guān)重要。因此,有必要了解如何使用Python和pandas庫(kù)從web頁(yè)面獲取表數(shù)據(jù)。此外,如果你已經(jīng)在使用Excel PowerQuery,這相當(dāng)于“從Web獲取數(shù)據(jù)”功能,但這里的功能更強(qiáng)大100倍。 從網(wǎng)站獲取數(shù)據(jù)(網(wǎng)頁(yè)抓取) HTML是每個(gè)網(wǎng)站背后的語(yǔ)言。當(dāng)我們?cè)L問(wèn)一個(gè)網(wǎng)站時(shí),發(fā)生的事情如下: 1.在瀏覽器的地址欄中輸入地址(URL),瀏覽器向目標(biāo)網(wǎng)站的服務(wù)器發(fā)送請(qǐng)求。 2.服務(wù)器接收請(qǐng)求并發(fā)回組成網(wǎng)頁(yè)的HTML代碼。 3.瀏覽器接收HTML代碼,動(dòng)態(tài)運(yùn)行,并創(chuàng)建一個(gè)網(wǎng)頁(yè)供我們查看。 Web抓取基本上意味著,我們可以使用Python向網(wǎng)站服務(wù)器發(fā)送請(qǐng)求,接收HTML代碼,然后提取所需的數(shù)據(jù),而不是使用瀏覽器。 這里不會(huì)涉及太多的HTML,只是介紹一些要點(diǎn),以便我們對(duì)網(wǎng)站和網(wǎng)頁(yè)抓取的工作原理有一個(gè)基本的了解。HTML元素或“HTML標(biāo)記”是用<>包圍的特定關(guān)鍵字。例如,以下HTML代碼是網(wǎng)頁(yè)的標(biāo)題,將鼠標(biāo)懸停在網(wǎng)頁(yè)中該選項(xiàng)卡上,將在瀏覽器上看到相同的標(biāo)題。注意,大多數(shù)HTML元素都需要一個(gè)開(kāi)始標(biāo)記(例如,<title>)和一個(gè)相應(yīng)的結(jié)束標(biāo)記(例如,</title>)。 <title>Python pandas獲取網(wǎng)頁(yè)中的表數(shù)據(jù)(網(wǎng)頁(yè)抓?。?/span></title> 類(lèi)似地,下面的代碼將在瀏覽器上繪制一個(gè)表,你可以嘗試將其復(fù)制并粘貼到記事本中,然后將其保存為“表示例.html”文件,應(yīng)該能夠在瀏覽器中打開(kāi)它。簡(jiǎn)要說(shuō)明如下:
<html> <table> <tr> <th>用戶(hù)姓名</th> <th>國(guó)家</th> <th>城市</th> <th>性別</th> <th>年齡</th> </tr> <tr> <td>Forrest Gump</td> <td>USA</td> <td>New York</td> <td>M></td> <td>50</td> </tr> <tr> <td>Mary Jane</td> <td>CANADA</td> <td>Toronto</td> <td>F</td> <td>30</td> </tr> </table> </html> 使用pandas進(jìn)行網(wǎng)頁(yè)抓取的要求 了解了網(wǎng)站的基本構(gòu)建塊以及如何解釋HTML(至少是表格部分!)。這里只介紹HTML表格的原因是,大多數(shù)時(shí)候,當(dāng)我們?cè)噲D從網(wǎng)站獲取數(shù)據(jù)時(shí),它都是表格格式。pandas是從網(wǎng)站獲取表格格式數(shù)據(jù)的完美工具! 因此,使用pandas從網(wǎng)站獲取數(shù)據(jù)的唯一要求是數(shù)據(jù)必須存儲(chǔ)在表中,或者用HTML術(shù)語(yǔ)來(lái)講,存儲(chǔ)在<table>…</table>標(biāo)記中。pandas將能夠使用我們剛才介紹的HTML標(biāo)記提取表、標(biāo)題和數(shù)據(jù)行。 如果試圖使用pandas從不包含任何表(<table>…</table>標(biāo)記)的網(wǎng)頁(yè)中“提取數(shù)據(jù)”,將無(wú)法獲取任何數(shù)據(jù)。對(duì)于那些沒(méi)有存儲(chǔ)在表中的數(shù)據(jù),我們需要其他方法來(lái)抓取網(wǎng)站。 網(wǎng)絡(luò)抓取示例 我們前面的示例大多是帶有幾個(gè)數(shù)據(jù)點(diǎn)的小表,讓我們使用稍微大一點(diǎn)的更多數(shù)據(jù)來(lái)處理。 我們將從百度百科獲取最新世界500公司名稱(chēng)和相關(guān)信息: https://baike.baidu.com/item/%E4%B8%96%E7%95%8C500%E5%BC%BA/640042?fr=aladdin 圖1(如果出現(xiàn)錯(cuò)誤,根據(jù)錯(cuò)誤提示處理。我的計(jì)算機(jī)上是沒(méi)有安裝lxml,安裝后正常) 上面的df實(shí)際上是一個(gè)列表,這很有趣……列表中似乎有3個(gè)項(xiàng)目。讓我們看看pandas為我們收集了什么數(shù)據(jù)…… 圖2 第一個(gè)數(shù)據(jù)框架df[0]似乎與此無(wú)關(guān),只是該網(wǎng)頁(yè)中最先抓取的一個(gè)表。查看網(wǎng)頁(yè),可以知道這個(gè)表是中國(guó)舉辦過(guò)的財(cái)富全球論壇。 圖3 第二個(gè)數(shù)據(jù)框架df[1]是該頁(yè)面上的另一個(gè)表,注意,其末尾,它表示有[500行x 6列]。這個(gè)表就是世界財(cái)富500強(qiáng)排名表。 圖4 第三個(gè)數(shù)據(jù)框架df[2]是該頁(yè)面上的第3個(gè)表,其末尾表示有[110行x 5列]。這個(gè)表是中國(guó)上榜企業(yè)表。 注意,始終要檢查pd.read_html()返回的內(nèi)容,一個(gè)網(wǎng)頁(yè)可能包含多個(gè)表,因此將獲得數(shù)據(jù)框架列表,而不是單個(gè)數(shù)據(jù)框架! 注:本文學(xué)習(xí)整理自pythoninoffice.com。 歡迎到知識(shí)星球:完美Excel社群,進(jìn)行技術(shù)交流和提問(wèn),獲取更多電子資料,并通過(guò)社群加入專(zhuān)門(mén)的微信討論群,更方便交流。
|
|
來(lái)自: hercules028 > 《Python and AI》