如何将爬取的HTML表格数据追加到空Pandas DataFrame
问题原因
你的for循环仅提取了每行的td节点,没有写入DataFrame的逻辑,所以最终得到空表。此外需要注意跳过表头行、清洗提取到的文本内容。
修复后的完整代码
!pip install bs4 from bs4 import BeautifulSoup import requests import pandas as pd url = 'https://en.wikipedia.org/wiki/List_of_largest_banks?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkPY0221ENSkillsNetwork23455645-2021-01-01' r = requests.get(url) html_content = r.content # 重命名避免和后续DataFrame变量重名冲突 soup = BeautifulSoup(html_content, 'html.parser') df = pd.DataFrame(columns=["Name", "Market Cap (US$ Billion)"]) # 遍历表格行,加[1:]跳过表头行 for row in soup.find_all('tbody')[3].find_all('tr')[1:]: col = row.find_all('td') if len(col) >=2: # 过滤空行避免报错 # 提取银行名称,清理多余空格和换行 bank_name = col[1].get_text(strip=True) # 提取市值转换为浮点型 market_cap = float(col[2].get_text(strip=True)) # 追加数据到DataFrame末尾 df.loc[len(df)] = [bank_name, market_cap] df.head(5)
核心修改点
- 重命名网页内容存储变量,避免和DataFrame变量重名导致逻辑混乱
- 遍历行时增加
[1:]跳过表头行,避免解析表头无效内容 - 增加空行校验逻辑,防止遇到无内容的行时抛出异常
- 对提取的文本做格式化清洗,将市值转换为数值类型方便后续分析
- 用
df.loc方法将每行有效数据写入DataFrame
内容的提问来源于stack exchange,提问作者learnin333
相关产品推荐
相关产品推荐

