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