<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這個Pandas函數(shù)可以自動爬取Web圖表

          共 3061字,需瀏覽 7分鐘

           ·

          2021-01-18 22:44

          Pandas作為數(shù)據(jù)科學(xué)領(lǐng)域鰲頭獨占的利器,有著豐富多樣的函數(shù),能實現(xiàn)各種意想不到的功能。

          作為學(xué)習(xí)者沒辦法一次性掌握Pandas所有的方法,需要慢慢積累,多看多練。

          這次為大家介紹一個非常實用且神奇的函數(shù)-read_html(),它可免去寫爬蟲的煩惱,自動幫你抓取靜態(tài)網(wǎng)頁中的表格。

          簡單用法:pandas.read_html(url)

          主要參數(shù):

          • io:接收網(wǎng)址、文件、字符串
          • header:指定列名所在的行
          • encoding:The encoding used to decode the web page
          • attrs:傳遞一個字典,用其中的屬性篩選出特定的表格

          只需要傳入url,就可以抓取網(wǎng)頁中的所有表格,抓取表格后存到列表,列表中的每一個表格都是dataframe格式。

          我們先簡單抓取天天基金網(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

          通過'id': 'oTable'的篩選后,只有一個表格,我們直接爬取到了基金凈值表。

          data[1]

          但這里只爬取了第一頁的數(shù)據(jù)表,因為天天基金網(wǎng)基金凈值數(shù)據(jù)每一頁的url是相同的,所以read_html()函數(shù)無法獲取其他頁的表格,這可能運用了ajax動態(tài)加載技術(shù)來防止爬蟲。

          ?

          一般來說,一個爬蟲對象的數(shù)據(jù)一次展現(xiàn)不完全時,就要多次展示,網(wǎng)站的處理辦法有兩種:

          1、下一個頁面的url和上一個頁面的url不同,即每個頁面的url是不同的,一般是是序號累加,處理方法是將所有的html頁面下載至本地,從而拿到所有數(shù)據(jù);(天天基金網(wǎng)顯示不是這種類型) 2、下一個頁面的url和上一個頁面的url相同,即展示所有數(shù)據(jù)的url是一樣的,這樣的話網(wǎng)頁上一般會有“下一頁”或“輸入框”與“確認”按鈕,處理方法是將代碼中觸發(fā)“下一頁”或“輸入框”與“確認”按鈕點擊事件來實現(xiàn)翻頁,從而拿到所有數(shù)據(jù)。(天天基金網(wǎng)是這種類型)

          ?

          剛只是簡單地使用了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)

          詳細參數(shù)

          「io:」 str, path object 或 file-like objectURL,file-like對象或包含HTML的原始字符串。請注意,lxml僅接受http,ftp和文件url協(xié)議。如果您的網(wǎng)址以'https'您可以嘗試刪除's'。
          「match:」 str 或 compiled regular expression, 可選參數(shù)將返回包含與該正則表達式或字符串匹配的文本的表集。除非HTML非常簡單,否則您可能需要在此處傳遞非空字符串。默認為“。+”(匹配任何非空字符串)。默認值將返回頁面上包含的所有表。此值轉(zhuǎn)換為正則表達式,以便Beautiful Soup和lxml之間具有一致的行為。
          「flavor:」 str 或 None要使用的解析引擎。‘bs4’和‘html5lib’彼此同義,它們都是為了向后兼容。默認值None嘗試使用lxml解析,如果失敗,它會重新出現(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ù)后要跳過的行數(shù)。從0開始。如果給出整數(shù)序列或切片,將跳過該序列索引的行。請注意,單個元素序列的意思是“跳過第n行”,而整數(shù)的意思是“跳過n行”。
          「attrs:」 dict 或 None, 可選參數(shù)這是屬性的詞典,您可以傳遞該屬性以用于標(biāo)識HTML中的表。在傳遞給lxml或Beautiful Soup之前,不會檢查它們的有效性。但是,這些屬性必須是有效的HTML表屬性才能正常工作。例如, attrs = {'id': 'table'} 是有效的屬性字典,因為‘id’ HTML標(biāo)記屬性是任何HTML標(biāo)記的有效HTML屬性,這個文件。attrs = {'asdf': 'table'} 不是有效的屬性字典,因為‘a(chǎn)sdf’即使是有效的XML屬性,也不是有效的HTML屬性。可以找到有效的HTML 4.01表屬性這里。可以找到HTML 5規(guī)范的工作草案這里。它包含有關(guān)現(xiàn)代Web表屬性的最新信息。
          「parse_dates:」 bool, 可選參數(shù)參考read_csv()更多細節(jié)。
          「thousands:」 str, 可選參數(shù)用來解析成千上萬個分隔符。默認為','。
          「encoding:」 str 或 None, 可選參數(shù)用于解碼網(wǎng)頁的編碼。默認為NoneNone保留先前的編碼行為,這取決于基礎(chǔ)解析器庫(例如,解析器庫將嘗試使用文檔提供的編碼)。
          「decimal:」 str, 默認為 ‘.’可以識別為小數(shù)點的字符(例如,對于歐洲數(shù)據(jù),請使用“,”)。
          「converters:」 dict, 默認為 None用于在某些列中轉(zhuǎn)換值的函數(shù)的字典。鍵可以是整數(shù)或列標(biāo)簽,值是采用一個輸入?yún)?shù),單元格(而非列)內(nèi)容并返回轉(zhuǎn)換后內(nèi)容的函數(shù)。
          「na_values:」 iterable, 默認為 None自定義NA值。
          「keep_default_na:」 bool, 默認為 True如果指定了na_values并且keep_default_na為False,則默認的NaN值將被覆蓋,否則將附加它們。
          「displayed_only:」 bool, 默認為 True是否應(yīng)解析具有“display:none”的元素。

          最后, read_html() 僅支持靜態(tài)網(wǎng)頁解析,你可以通過其他方法獲取動態(tài)頁面加載后response.text 傳入 read_html() 再獲取表格數(shù)據(jù)。


          加入知識星球【我們談?wù)摂?shù)據(jù)科學(xué)】

          300+小伙伴一起學(xué)習(xí)!






          · 推薦閱讀?·

          Matplotlib可視化三大步驟,教你輕松制圖

          5個基本概念,從統(tǒng)計學(xué)到機器學(xué)習(xí)

          9個讓PyTorch模型訓(xùn)練提速的技巧!


          瀏覽 74
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  东京热成人小说 | 无码人妻一级毛片免费 | 青青草成人自拍 | 豆花视频网站 | 日本猛少妇色XXXXX猛叫 色秘 乱码一区二区三区唱戏 |