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

使用Pandas爬取合并多页网页表格时触发HTTP Error 400报错求助

错误原因

你的代码存在两个核心问题,直接触发400报错和后续逻辑错误:

  1. 字符串格式化顺序写反:你写的pd.read_html(url).format(i)是先请求带{}占位符的无效URL,再对返回结果做格式化,正确顺序是先用format把页码拼接到URL中,再发起请求,无效URL自然会返回400错误。
  2. pd.read_html()的返回值是页面内所有表格组成的列表,不是单个DataFrame,直接append会把列表存入数组,后续合并会报错,需要指定要提取的表格对应的索引(这类列表页的目标表格一般是索引为0的第一个表格)。
  3. 原代码没有实现最终的多表合并逻辑,循环结束后仅把每页表格存到了列表中,没有拼接成完整的DataFrame。
修正代码
import pandas as pd
import ssl

ssl._create_default_https_context = ssl._create_unverified_context

dfs = []
base_url = 'https://www.emporis.com/city/100422/singapore-singapore/status/all-buildings/{}'

for i in range(1, 3):
    # 先拼接当前页码,生成有效请求URL
    current_url = base_url.format(i)
    # 读取页面所有表格,取第一个目标表格
    page_df = pd.read_html(current_url)[0]
    dfs.append(page_df)

# 纵向合并所有分页表格,重置索引
final_merged_df = pd.concat(dfs, ignore_index=True)
print(final_merged_df.head(15))
补充说明

如果爬取更多页码时出现403、连接超时类问题,是网站反爬机制拦截了pandas默认的请求标识,此时可以先用requests库构造带常规浏览器User-Agent的请求拿到页面HTML源码,再把源码传入pd.read_html()做解析即可。爬取前请遵守目标网站的访问规则,控制请求频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:01:26