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

Selenium+BS4爬取表格异常:仅获单个单元格求助

问题:爬取网站表格仅返回单个单元格

我在练习爬取目标网站的表格时遇到问题:只能打印出表格的1个单元格,无法获取完整表格。目标网站地址:https://stats.paj.gr.jp/en/pub/current_en_n2.html

我的代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC 
from bs4 import BeautifulSoup
import pandas as pd

path = "C:\\Users\Jun Hui\\Desktop\\Quant Trading\\chromedriver-win32\\chromedriver.exe"

service = webdriver.chrome.service.Service(path)
service.start()

url = "https://stats.paj.gr.jp/en/pub/current_en_n2.html"
driver = webdriver.Chrome(service=service)
driver.get(url)

link_element1 = driver.find_element(By.XPATH,"//a[@href='index.html']")
link_element1.click()
link_element2 = driver.find_element(By.XPATH,"//a[@href='./current_en_n2.html']")
link_element2.click()

page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

table = soup.find("table")
rows = table.find_all("tr")
for row in rows:
    cells = row.find_all("td")
    for cell in cells:
        print(cell.text.strip(), end="\t")
    print()

问题分析与解决方案

问题原因

  1. 多余的页面跳转:先访问目标页面又跳转到首页再返回,不仅无意义,还可能导致页面未完全加载就抓取源码,触发元素异常。
  2. 未等待表格加载:页面存在动态渲染可能,直接获取源码时表格还未完全生成,导致soup.find("table")仅抓取到部分内容。
  3. 未处理表头元素:原代码只提取td数据单元格,遗漏了表头th元素,同时可能丢失行结构信息。

修正后的代码(Selenium+BeautifulSoup)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
from bs4 import BeautifulSoup
import pandas as pd

# 配置ChromeDriver路径
path = "C:\\Users\Jun Hui\\Desktop\\Quant Trading\\chromedriver-win32\\chromedriver.exe"
service = webdriver.chrome.service.Service(path)
driver = webdriver.Chrome(service=service)

url = "https://stats.paj.gr.jp/en/pub/current_en_n2.html"
driver.get(url)

# 显式等待表格加载完成,最长等待10秒,确保页面渲染完毕
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.TAG_NAME, "table")))

# 获取完整页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

table = soup.find("table")
rows = table.find_all("tr")

# 同时处理表头(th)和数据单元格(td)
for row in rows:
    cells = row.find_all(["th", "td"])
    for cell in cells:
        print(cell.text.strip(), end="\t")
    print()

# 关闭浏览器释放资源
driver.quit()

更简洁的方案:直接用Pandas读取表格

该网站表格为静态渲染,可跳过Selenium,用Pandas快速抓取:

import pandas as pd

url = "https://stats.paj.gr.jp/en/pub/current_en_n2.html"
# 抓取页面中所有表格,返回DataFrame列表
tables = pd.read_html(url)
# 取第一个表格(目标表格)
target_table = tables[0]

# 打印表格内容
print(target_table)
# 保存为CSV文件
target_table.to_csv("paj_stats_table.csv", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:10:56