最簡單的爬蟲:用Pandas爬取表格資料
大家好,我是小五🚀
書接上文,我們可以使用Pandas將Excel轉為html格式,在文末我說與之對應的read_html()也是一個神器!
PS:大家也很給力,點了30個贊,小五趕緊安排上
begin
最簡單的爬蟲:用Pandas爬取表格資料
有一說一,咱得先承認,用Pandas爬取表格資料有一定的局限性,
它只適合抓取Table表格型資料,那咱們先看看什么樣的網頁滿足條件?
什么樣的網頁結構?
用瀏覽器打開網頁版,F12查看網頁HTML結構,會發現符合條件的網頁結構有個共同的特點,
如果你發現HTML結構是下面這個Table格式的,那直接可以用pandas上手,
<table class="..." id="...">
<thead>
<tr>
<th>...</th>
</tr>
</thead>
<tbody>
<tr>
<td>...</td>
</tr>
<tr>...</tr>
<tr>...</tr>
...
<tr>...</tr>
<tr>...</tr>
</tbody>
</table>
這個看著不直觀,打開一個北京地區空氣質量網站,
F12,左側是網頁中的質量指數表格,它的網頁結構完美符合了Table表格型資料網頁結構,

這個網頁的資料就非常適合使用pandas來爬取,
pd.read_html()
Pandas提供read_html(),to_html()兩個函式用于讀寫html格式的檔案,這兩個函式非常有用,一個輕松將DataFrame等復雜的資料結構轉換成HTML表格;另一個不用復雜爬蟲,簡單幾行代碼即可抓取Table表格型資料,簡直是個神器!
具體的pd.read_html()引數,可以查看其官方檔案:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_html.html
下面直接拿剛才的網頁直接上手開大!
import pandas as pd
df = pd.read_html("http://www.air-level.com/air/beijing/", encoding='utf-8',header=0)[0]
這里只加了幾個引數,header是指定列標題所在的行,加上導包,只需兩行代碼,
df.head()

對比結果,可以看到成功獲取了表格資料,

多個表格
上一個案例中,不知道有小伙伴注意到沒有
pd.read_html()[0]
對于pd.read_html()獲取網頁結果后,還設定了一個索引,這是因為網頁上可能存在存在多個表格,這時候就需要靠索引來指定獲取哪個表格?
比如還是剛才的網站,空氣質量排行榜網頁就明顯由兩個表格構成的,

這時候如果用pd.read_html()來獲取右邊的表格,只需要修改獲取結果的索引即可,
import pandas as pd
df = pd.read_html("http://www.air-level.com/rank", encoding='utf-8',header=0)[1]
對比之下,可以看到成功獲取到了網頁右側的表格,

以上就是用pd.read_html()來簡單爬取靜態網頁了,但是我們之所以使用python,就是為了提高效率,如果只是一個網頁,滑鼠選擇復制也不麻煩,所以python操作最大的優點會體現在批量操作上,
批量爬取
下面給大家展示一下,如何用pandas批量爬取網頁表格資料,
以新浪財經機構持股匯總資料為例:

一共47頁,通過for回圈構建47個網頁url,再用pd.read_html()回圈爬取,
df = pd.DataFrame()
for i in range(1, 48):
url = f'http://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml?p={i}'
df = pd.concat([df, pd.read_html(url)[0]]) #合并DataFrame
還是幾行代碼,輕松解決,

一共47頁1738條資料都獲取到了,

通過以上的小案例,相信大家可以輕松掌握用Pandas批量爬取表格資料啦🚀
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/294721.html
標籤:python
