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

使用BeautifulSoup提取网页第6个合规信息表格遇阻求助

解决无法提取合规信息表格数据的问题

我看了你的代码和目标网页,问题主要出在表格定位和数据提取的逻辑上,咱们一步步来修正:

1. 先梳理现有代码的核心问题

  • 你的link列表仅包含一个URL,但循环里用了未定义的start和end参数,导致循环逻辑混乱
  • 提取表格数据时,item.find_all("td", {"class": "tabletitle"})[0].table的写法完全错误,没法正确抓取表格的行数据
  • 文件写入环节的列名和数据结构不匹配,最终输出的内容会不符合预期

2. 修正后的完整可运行代码

import requests
import random
import time
from bs4 import BeautifulSoup
import unicodecsv

# 目标网页URL
target_url = "http://ec.europa.eu/environment/ets/ohaDetails.do?returnURL=&languageCode=en&accountID=&registryCode=&buttonAction=all&action=&account.registryCode=&accountType=&identifierInReg=&accountHolder=&primaryAuthRep=&installationIdentifier=&installationName=&accountStatus=&permitIdentifier=&complianceStatus=&mainActivityType=-1&searchType=oha&resultList.currentPageNumber=1&nextList=Next%C2%A0%3E&selectedPeriods="

# 添加请求头模拟浏览器,避免被服务器拦截
request_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 发送请求并解析页面
response = requests.get(target_url, headers=request_headers)
time.sleep(random.randint(2, 5))
soup = BeautifulSoup(response.content, "lxml")

# 获取所有class为bordertb的表格,目标是第6个(索引为5,因为列表从0开始计数)
all_tables = soup.find_all("table", class_="bordertb")
if len(all_tables) < 6:
    print("未找到第6个表格,请检查页面结构是否发生变化")
    exit()
compliance_table = all_tables[5]

# 提取表格的表头和数据行
output_data = []
# 提取表头
header_row = compliance_table.find("tr", class_="tabletitle")
if header_row:
    table_headers = [td.get_text(strip=True) for td in header_row.find_all("td")]
    output_data.append(table_headers)

# 提取所有数据行(跳过表头行)
data_rows = compliance_table.find_all("tr")[1:]
for row in data_rows:
    row_cells = [td.get_text(strip=True) for td in row.find_all("td")]
    if row_cells:  # 过滤空行
        output_data.append(row_cells)

# 将数据写入TSV文件
with open("Exhibit_2_EXP_data.tsv", "wb") as outfile:
    writer = unicodecsv.writer(outfile, delimiter="\t")
    writer.writerows(output_data)

print("合规信息表格数据提取完成,已保存到Exhibit_2_EXP_data.tsv")

3. 关键修正点说明

  • 模拟浏览器请求:添加User-Agent请求头,避免服务器拒绝非浏览器发起的请求
  • 精准定位目标表格:直接通过列表索引all_tables[5]获取第6个表格,符合页面结构的实际情况
  • 正确提取行数据:先抓取表头,再遍历所有数据行,逐个提取单元格的文本内容,确保数据结构完整
  • 优化文件写入:使用writerows一次性写入整个二维列表,保证表头和数据行一一对应

如果后续页面结构发生变化,你可以通过浏览器开发者工具(F12)检查目标表格的class或其他属性,调整定位逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:54:28