网络爬虫系列1:pd.read_html参数

使用pandas库里面 read_html 方法,获取网页上的表格数据。注意返回的是 list (url网页上所有表格的list,每个表格对应一个df,所有表格组成一个list,每个df作为list中的元素,比如网页上一共有四个表格, 那么会返回一个包含4个元素的list,每个元素都是一个df,每个df都代表一个表格。

温馨提示:并不是所有表格都可以用read_html()来抓取,有的网站表面上看起来是表格,但在网页源代码中不是table格式,而是list列表格式。这种表格则不适用read_html爬取,得用其他的方法,比如selenium。

案例1:抓取世界大学排名榜

import pandas as pd
import datetime
now=datetime.datetime.now().strftime('%Y-%m-%d')
url = 'https://ranking.promisingedu.com/qs'
lst_dfs = pd.read_html(url, header=0, index_col=0)  # 就是这句获取的网页表格数据
df_sch = lst_dfs[0]  # 返回第一个表格
#print(df_sch.head(5))  # 展示数据
df_sch.to_excel('ranking_edu' + now + '.xlsx') # 导出为电子表格

案例2:获取新浪财经数据(共8页)

import pandas as pd
import csv
import datetime
now=datetime.datetime.now().strftime('%Y-%m-%d')
df2 = pd.DataFrame()
for i in range(8):
    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"新浪财经数据.csv", encoding="gbk", index=0)
# 保存到Excel
df2.to_excel(r'新浪财经数据' + now + '.xlsx', index=0)

案例3:获取证监会披露深市IPO公司数据(共49页)

#  导入所需要用到的库
import pandas as pd
from pandas import DataFrame  #此处不能上面有import pandas而省略
import csv
import time
import datetime
now=datetime.datetime.now().strftime('%Y-%m-%d')
# 程序计时
start = time.time()

# 添加列名"公司名称","披露类型","上市板块","保荐机构","披露时间","公告"
df3 = DataFrame(data=None, columns=["公司名称", "披露类型", "上市板块", "保荐机构", "披露时间", "公告"])
#url1 = "http://eid.csrc.gov.cn/ipo/1017/index.html"
#df3_1 = pd.read_html(url1, encoding="utf-8")[0]
#print(df3_1)

for i in range(1, 50):
    url3 = "http://eid.csrc.gov.cn/ipo/1017/index_{page}.html".format(page=i+1)
    # 必须加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]
    df3 = pd.concat([df3, df3_1])   # 数据合并
    print("第{page}页抓取完成".format(page=i))
# 保存到Excel
df3.to_excel(r'证监会披露深市IPO公司1' + now + '.xlsx', index=0)

案例4:获取城市天气

import pandas as pd
import datetime
now=datetime.datetime.now().strftime('%Y-%m-%d')

df=pd.read_html('http://www.tianqihoubao.com/weather/top/weifang.html',encoding='gbk',header=0)[0]  #[0]为选择第1张table,
df=df.iloc[1:,:]  #数据从第2行开始,因为表头有两行
df_rename=df.rename(columns={"白天": "白天天气状况","白天.1": "白天风力方向", "白天.2": "白天最高温度",
                             "夜间": "夜间天气状况", "夜间.1": "夜间风力方向", "夜间.2": "夜间最低温度"})
#print(df_rename)
df_rename['日期']=df_rename['日期'].str[0:10]
df_rename['白天—最高温度']=df_rename['白天最高温度'].str[:-1].astype(int) #新增‘白天—最高温度’列,并删除‘℃’取int类型数据
df_rename['黑夜—最低温度']=df_rename['夜间最低温度'].str[:-1].astype(int) #新增‘黑夜—最低温度’列,并删除‘℃’取int类型数据
#print(df_rename)
data0= df_rename.sort_values(by='日期')  #先对数据按日期排序
# 保存到Excel
data0.to_excel(r'weifang_weather' + now + '.xlsx', index=0)

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值