• pd.read_html 获取网页上的表格数据


    一、pd.read_html 参数

    函数参数

    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:ulr

    其他参数请看官网:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_html.html?highlight=read_html

    一、pd.read_html 用法

    主要用于爬取网页的表格,注意图片是不能爬取的

    案例1:抓取世界大学排名榜(第1页的数据)

    # 导入库
    import pandas as pd 
    import csv
    
    # 传入要抓取的url
    url1 = "http://www.compassedu.hk/qs"
    
    #0表示选中网页中的第一个Table,或者这么使用pd.read_html(url, header=0, index_col=0,encoding = "gbk")
    df1 = pd.read_html(url1)[0]
    # 打印预览
    df1
    # 导出到CSV
    df1.to_csv(r"C:UsersQDMDesktop世界大学综合排名.csv",index=0,encoding = "gbk")
    
    # 或导出到Excel
    df1.to_excel(r"C:UsersQDMDesktop世界大学综合排名.xlsx",index=0)

    示例2:抓取新浪财经基金重仓股数据(共6页数据)

     

    import pandas as pd
    import csv
    df2 = pd.DataFrame()
    for i in range(6):
        url2 = "http://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jjzc/index.phtml?p={page}".format(page=i+1)
        df2 = pd.concat([df2,pd.read_html(url2)[0]])
        print("第{page}页抓取完成".format(page = i + 1))
        
    # 保存到CSV
    df2.to_csv(r"C:UsersQDMDesktop新浪财经数据.csv",encoding = "gbk",index=0)
    
    # 保存到Excel
    df2.to_excel(r"C:UsersQDMDesktop新浪财经数据.xlsx",index=0)

    示例3:抓取证监会披露的IPO数据(共217页数据)

    #  导入所需要用到的库
    import pandas as pd
    from pandas import DataFrame
    import csv
    import time
    
    #程序计时
    start = time.time() 
        
    #添加列名
    #"公司名称","披露类型","上市板块","保荐机构","披露时间","公告"
    df3 = DataFrame(data=None,columns=["公司名称","披露类型","上市板块","保荐机构","披露时间","公告"]) 
    for i in range(1,51):  
        url3 = "http://eid.csrc.gov.cn/ipo/1017/index.html"
         #必须加utf-8,否则乱码
        df3_1 = pd.read_html(url3,encoding = "utf-8")[0]
         #过滤掉最后一行和最后一列(NaN列)
        #df3_2 = df3_1.iloc[1:len(df3_1)-1,0:-1]
         #新的df添加列名
        df3_1.columns=["公司名称","披露类型","上市板块","保荐机构","披露时间","公告"]
         #数据合并
        df3 = pd.concat([df3,df3_1])
        print("第{page}页抓取完成".format(page = i))

    温馨提示:并不是所有表格都可以用read_html()来抓取,有的网站表面上看起来是表格,但在网页源代码中不是table格式,而是list列表格式。

    这种表格则不适用read_html爬取,得用其他的方法,比如selenium

    文章参考:https://my.oschina.net/u/3750423/blog/4473904,https://www.zhihu.com/question/441361902/answer/1800339000

  • 相关阅读:
    初识python
    文件操作
    初识python
    pycharm IDE
    初识python
    初识Python
    python之网络编程-多线程
    python之并发编程-进程之间的通信
    python之并发编程-多进程
    python之并发编程-操作系统
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/14583593.html
Copyright © 2020-2023  润新知