您好,登錄后才能下訂單哦!
這篇文章主要介紹了Pandas函數(shù)如何自動(dòng)爬取Web圖表,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
介紹一個(gè)非常實(shí)用且神奇的函數(shù)-read_html()
,它可免去寫(xiě)爬蟲(chóng)的煩惱,自動(dòng)幫你抓取靜態(tài)網(wǎng)頁(yè)中的表格。
簡(jiǎn)單用法:pandas.read_html(url)
主要參數(shù):
只需要傳入url,就可以抓取網(wǎng)頁(yè)中的所有表格,抓取表格后存到列表,列表中的每一個(gè)表格都是dataframe格式。
我們先簡(jiǎn)單抓取天天基金網(wǎng)的基金凈值表格,目標(biāo)url:http://fund.eastmoney.com/fund.html
可以看到上面html里是table表格數(shù)據(jù),剛好適合抓取。
import pandas as pd
url = "http://fund.eastmoney.com/fund.html"
data = pd.read_html(url,attrs = {'id': 'oTable'})
# 查看表格數(shù)量
tablenum = len(data)
print(tablenum)
輸出:1
通過(guò)'id': 'oTable'的篩選后,只有一個(gè)表格,我們直接爬取到了基金凈值表。
data[1]
但這里只爬取了第一頁(yè)的數(shù)據(jù)表,因?yàn)樘焯旎鹁W(wǎng)基金凈值數(shù)據(jù)每一頁(yè)的url是相同的,所以read_html()函數(shù)無(wú)法獲取其他頁(yè)的表格,這可能運(yùn)用了ajax動(dòng)態(tài)加載技術(shù)來(lái)防止爬蟲(chóng)。
?一般來(lái)說(shuō),一個(gè)爬蟲(chóng)對(duì)象的數(shù)據(jù)一次展現(xiàn)不完全時(shí),就要多次展示,網(wǎng)站的處理辦法有兩種:
1、下一個(gè)頁(yè)面的url和上一個(gè)頁(yè)面的url不同,即每個(gè)頁(yè)面的url是不同的,一般是是序號(hào)累加,處理方法是將所有的html頁(yè)面下載至本地,從而拿到所有數(shù)據(jù);(天天基金網(wǎng)顯示不是這種類(lèi)型) 2、下一個(gè)頁(yè)面的url和上一個(gè)頁(yè)面的url相同,即展示所有數(shù)據(jù)的url是一樣的,這樣的話(huà)網(wǎng)頁(yè)上一般會(huì)有“下一頁(yè)”或“輸入框”與“確認(rèn)”按鈕,處理方法是將代碼中觸發(fā)“下一頁(yè)”或“輸入框”與“確認(rèn)”按鈕點(diǎn)擊事件來(lái)實(shí)現(xiàn)翻頁(yè),從而拿到所有數(shù)據(jù)。(天天基金網(wǎng)是這種類(lèi)型)
?
剛只是簡(jiǎn)單地使用了read_html()
獲取web表格的功能,它還有更加復(fù)雜的用法,需要了解其參數(shù)含義。
pandas.read_html(
io, match='.+', flavor=None, header=None, index_col=None, skiprows=None, attrs=None, parse_dates=False, thousands=', ', encoding=None, decimal='.', converters=None, na_values=None, keep_default_na=True, displayed_only=True
)
「io:」 str, path object 或 file-like objectURL,file-like對(duì)象或包含HTML的原始字符串。請(qǐng)注意,lxml僅接受http,ftp和文件url協(xié)議。如果您的網(wǎng)址以'https'您可以嘗試刪除's'。
「match:」 str 或 compiled regular expression, 可選參數(shù)將返回包含與該正則表達(dá)式或字符串匹配的文本的表集。除非HTML非常簡(jiǎn)單,否則您可能需要在此處傳遞非空字符串。默認(rèn)為“。+”(匹配任何非空字符串)。默認(rèn)值將返回頁(yè)面上包含的所有表。此值轉(zhuǎn)換為正則表達(dá)式,以便Beautiful Soup和lxml之間具有一致的行為。
「flavor:」 str 或 None要使用的解析引擎?!産s4’和‘html5lib’彼此同義,它們都是為了向后兼容。默認(rèn)值None嘗試使用lxml解析,如果失敗,它會(huì)重新出現(xiàn)bs4+html5lib。
「header:」 int 或 list-like 或 None, 可選參數(shù)該行(或MultiIndex)用于創(chuàng)建列標(biāo)題。
「index_col:」 int 或 list-like 或 None, 可選參數(shù)用于創(chuàng)建索引的列(或列列表)。
「skiprows:」 int 或 list-like 或 slice 或 None, 可選參數(shù)解析列整數(shù)后要跳過(guò)的行數(shù)。從0開(kāi)始。如果給出整數(shù)序列或切片,將跳過(guò)該序列索引的行。請(qǐng)注意,單個(gè)元素序列的意思是“跳過(guò)第n行”,而整數(shù)的意思是“跳過(guò)n行”。
「attrs:」 dict 或 None, 可選參數(shù)這是屬性的詞典,您可以傳遞該屬性以用于標(biāo)識(shí)HTML中的表。在傳遞給lxml或Beautiful Soup之前,不會(huì)檢查它們的有效性。但是,這些屬性必須是有效的HTML表屬性才能正常工作。例如, attrs = {'id': 'table'} 是有效的屬性字典,因?yàn)椤甶d’ HTML標(biāo)記屬性是任何HTML標(biāo)記的有效HTML屬性,這個(gè)文件。attrs = {'asdf': 'table'} 不是有效的屬性字典,因?yàn)椤產(chǎn)sdf’即使是有效的XML屬性,也不是有效的HTML屬性??梢哉业接行У腍TML 4.01表屬性這里。可以找到HTML 5規(guī)范的工作草案這里。它包含有關(guān)現(xiàn)代Web表屬性的最新信息。
「parse_dates:」 bool, 可選參數(shù)參考read_csv()更多細(xì)節(jié)。
「thousands:」 str, 可選參數(shù)用來(lái)解析成千上萬(wàn)個(gè)分隔符。默認(rèn)為','。
「encoding:」 str 或 None, 可選參數(shù)用于解碼網(wǎng)頁(yè)的編碼。默認(rèn)為NoneNone
保留先前的編碼行為,這取決于基礎(chǔ)解析器庫(kù)(例如,解析器庫(kù)將嘗試使用文檔提供的編碼)。
「decimal:」 str, 默認(rèn)為 ‘.’可以識(shí)別為小數(shù)點(diǎn)的字符(例如,對(duì)于歐洲數(shù)據(jù),請(qǐng)使用“,”)。
「converters:」 dict, 默認(rèn)為 None用于在某些列中轉(zhuǎn)換值的函數(shù)的字典。鍵可以是整數(shù)或列標(biāo)簽,值是采用一個(gè)輸入?yún)?shù),單元格(而非列)內(nèi)容并返回轉(zhuǎn)換后內(nèi)容的函數(shù)。
「na_values:」 iterable, 默認(rèn)為 None自定義NA值。
「keep_default_na:」 bool, 默認(rèn)為 True如果指定了na_values并且keep_default_na為False,則默認(rèn)的NaN值將被覆蓋,否則將附加它們。
「displayed_only:」 bool, 默認(rèn)為 True是否應(yīng)解析具有“display:none”的元素。
最后, read_html() 僅支持靜態(tài)網(wǎng)頁(yè)解析,你可以通過(guò)其他方法獲取動(dòng)態(tài)頁(yè)面加載后response.text 傳入 read_html() 再獲取表格數(shù)據(jù)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Pandas函數(shù)如何自動(dòng)爬取Web圖表”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。