1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        最簡(jiǎn)單的爬蟲:用Pandas爬取表格數(shù)據(jù)

        共 1902字,需瀏覽 4分鐘

         ·

        2021-11-15 15:39



        最簡(jiǎn)單的爬蟲:用Pandas爬取表格數(shù)據(jù)

        有一說(shuō)一,咱得先承認(rèn),用Pandas爬取表格數(shù)據(jù)有一定的局限性。

        它只適合抓取Table表格型數(shù)據(jù),那咱們先看看什么樣的網(wǎng)頁(yè)滿足條件?

        什么樣的網(wǎng)頁(yè)結(jié)構(gòu)?

        用瀏覽器打開(kāi)網(wǎng)頁(yè),F(xiàn)12查看其HTML的結(jié)構(gòu),會(huì)發(fā)現(xiàn)符合條件的網(wǎng)頁(yè)結(jié)構(gòu)都有個(gè)共同的特點(diǎn)。

        如果你發(fā)現(xiàn)HTML結(jié)構(gòu)是下面這個(gè)Table格式的,那直接可以用Pandas上手。

        "..."?id="...">
        ?????
        ?????
        ?????...
        ?????
        ?????
        ?????
        ????????
        ????????????...
        ????????
        ????????...
        ????????...
        ????????...
        ????????...
        ????????...
        ????

        這個(gè)看著不直觀,打開(kāi)一個(gè)北京地區(qū)空氣質(zhì)量網(wǎng)站。

        F12,左側(cè)是網(wǎng)頁(yè)中的質(zhì)量指數(shù)表格,它的網(wǎng)頁(yè)結(jié)構(gòu)完美符合了Table表格型數(shù)據(jù)網(wǎng)頁(yè)結(jié)構(gòu)。

        它就非常適合使用pandas來(lái)爬取。

        pd.read_html()

        Pandas提供read_html(),to_html()兩個(gè)函數(shù)用于讀寫html格式的文件。這兩個(gè)函數(shù)非常有用,一個(gè)輕松將DataFrame等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成HTML表格;另一個(gè)不用復(fù)雜爬蟲,簡(jiǎn)單幾行代碼即可抓取Table表格型數(shù)據(jù),簡(jiǎn)直是個(gè)神器![1]

        具體的pd.read_html()參數(shù),可以查看其官方文檔:

        https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_html.html

        下面直接拿剛才的網(wǎng)頁(yè)直接上手開(kāi)大!

        import?pandas?as?pd
        df?=?pd.read_html("http://www.air-level.com/air/beijing/",?encoding='utf-8',header=0)[0]

        這里只加了幾個(gè)參數(shù),header是指定列標(biāo)題所在的行。加上導(dǎo)包,只需兩行代碼。

        df.head()

        對(duì)比結(jié)果,可以看到成功獲取了表格數(shù)據(jù)。

        多個(gè)表格

        上一個(gè)案例中,不知道有小伙伴注意到?jīng)]有

        pd.read_html()[0]

        對(duì)于pd.read_html()獲取網(wǎng)頁(yè)結(jié)果后,還加了一個(gè)[0]。這是因?yàn)榫W(wǎng)頁(yè)上可能存在多個(gè)表格,這時(shí)候就需要靠列表的切片tables[x]來(lái)指定獲取哪個(gè)表格。

        比如還是剛才的網(wǎng)站,空氣質(zhì)量排行榜網(wǎng)頁(yè)就明顯由兩個(gè)表格構(gòu)成的。

        這時(shí)候如果用pd.read_html()來(lái)獲取右邊的表格,只需要稍微修改即可。

        import?pandas?as?pd
        df?=?pd.read_html("http://www.air-level.com/rank",?encoding='utf-8',header=0)[1]

        對(duì)比之下,可以看到成功獲取到了網(wǎng)頁(yè)右側(cè)的表格。

        以上就是用pd.read_html()來(lái)簡(jiǎn)單爬取靜態(tài)網(wǎng)頁(yè)。但是我們之所以使用Python,其實(shí)是為了提高效率??墒侨魞H僅一個(gè)網(wǎng)頁(yè),鼠標(biāo)選擇復(fù)制豈不是更簡(jiǎn)單。所以Python操作最大的優(yōu)點(diǎn)會(huì)體現(xiàn)在批量操作上。

        批量爬取

        下面給大家展示一下,如何用Pandas批量爬取網(wǎng)頁(yè)表格數(shù)據(jù)??

        以新浪財(cái)經(jīng)機(jī)構(gòu)持股匯總數(shù)據(jù)為例:

        一共47頁(yè),通過(guò)for循環(huán)構(gòu)建47個(gè)網(wǎng)頁(yè)url,再用pd.read_html()循環(huán)爬取。

        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頁(yè)1738條數(shù)據(jù)都獲取到了。

        通過(guò)以上的小案例,相信大家可以輕松掌握用Pandas批量爬取表格數(shù)據(jù)啦??

        參考資料

        [1]

        Python讀財(cái): 天秀!Pandas還能用來(lái)寫爬蟲?


        為了提供一個(gè)更好的解答問(wèn)題、交流問(wèn)題、沉淀知識(shí)的平臺(tái),陳老師和小伙伴們一起創(chuàng)辦了一個(gè)知識(shí)星球為大家答疑解惑,沉淀更多知識(shí)。截止目前,已有150+干貨內(nèi)容沉淀?,F(xiàn)在至11月11日24點(diǎn),掃碼加入星球,還能享受20元優(yōu)惠哦,折后價(jià)僅179元。


        點(diǎn)擊“閱讀原文”了解知識(shí)星球
        瀏覽 48
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            性欧美大战久久久久久久 | 骚综合网 | 波多野结衣中文字幕乱码 | av一区在线观看无码成人 | 淫色淫香综合网 | 日本三级影视 | 国产欧美黄片 | 性欧美大战久久久久久久83 | 成人精品福利视频 | 超碰影院在线观看 |