You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化网页抓取数据的分离方法及Pandas表格处理咨询

更优的数据分离方法(BeautifulSoup版)

别用手动定位索引的方式,太依赖固定位置,网页结构一变就崩。直接基于表格的行/单元格结构提取更靠谱:

  • 先定位到目标表格(比如用soup.find('table', attrs={'id': '目标表格ID'}),没有ID就用class或其他属性筛选)
  • 遍历表格的每一行(跳过表头行):
    table = soup.find('table', id='inflation-table')
    data = []
    # 跳过表头,从第二行开始遍历
    for row in table.find_all('tr')[1:]:
        cells = row.find_all('td')
        # 确保当前行有足够的单元格
        if len(cells) >= 3:
            year = cells[0].text.strip()
            avg_inflation = cells[1].text.strip()
            dec_inflation = cells[2].text.strip()
            data.append({'年份': year, '年均通胀率': avg_inflation, '12月通胀率': dec_inflation})
    
  • 这种方式直接对应单元格的语义位置,哪怕表格加了辅助列/调整顺序,只要核心数据的位置不变就没问题,比手动索引灵活得多。
pd.read_html获取的DataFrame处理步骤

先搞清楚DataFrame的结构,再一步步清理:

  1. 查看基础结构:先运行print(df.head())和df.info(),确认有没有多余的空行、表头错位、非数值数据等问题。
  2. 清理无效行/列:
    • 去掉全空的行/列:df = df.dropna(how='all', axis=0)(清理行)、df = df.dropna(how='all', axis=1)(清理列)
    • 如果表头错位(比如表头在第二行),重置表头:
      df.columns = df.iloc[0]  # 把第一行设为列名
      df = df[1:]  # 删除原来的表头行
      df = df.reset_index(drop=True)  # 重置索引
      
  3. 修正数据类型:把通胀率列转成数值型(方便后续计算):
    # 先去掉百分号,再转数值,无效值设为NaN
    df['年均通胀率'] = pd.to_numeric(df['年均通胀率'].str.replace('%', ''), errors='coerce')
    df['12月通胀率'] = pd.to_numeric(df['12月通胀率'].str.replace('%', ''), errors='coerce')
    
  4. 提取目标数据:直接筛选需要的列即可,顺便去掉有缺失值的行:
    target_df = df[['年份', '年均通胀率', '12月通胀率']].dropna()
    

内容的提问来源于stack exchange,提问作者user4356954

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:25:13