如何使用BeautifulSoup提取HTML文档中无class和id的指定tr元素
Python爬虫提取指定表格内容方案
原有代码存在的问题
- 导入BeautifulSoup时设置了别名
soup,但后续代码仍直接调用BeautifulSoup,会触发名称未定义错误 - 重复解析HTML且调用了
prettify()方法,该方法会给文本添加额外的空白字符,导致精确文本匹配失败 - 仅匹配到了"Ένδικα Μέσα"对应的单元格,没有提取该行后续的内容单元格数据
调整后可运行代码
from bs4 import BeautifulSoup as soup import requests import csv URL = 'https://www.epant.gr/apofaseis-gnomodotiseis/item/1451-apofasi-730-2021.html' headers1 = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36", "X-Amzn-Trace-Id": "Root=1-61acac03-6279b8a6274777eb44d81aae", "X-Client-Data": "CJW2yQEIpLbJAQjEtskBCKmdygEIuevKAQjr8ssBCOaEzAEItoXMAQjLicwBCKyOzAEI3I7MARiOnssB" } page = requests.get(URL, headers = headers1) # 仅需一次解析即可,不需要prettify处理 soup_obj = soup(page.content,"html.parser") # 模糊匹配包含Ένδικα Μέσα的td,忽略前后空格 target_td = soup_obj.find('td', string=lambda text: text and "Ένδικα Μέσα" in text.strip()) if target_td: # 取当前td所在的行,再取该行第二个td的内容(就是对应值) target_content = target_td.find_next_sibling('td').get_text(strip=True) print("Ένδικα Μέσα 对应内容:", target_content) else: print("未找到匹配的单元格")
代码说明
- 简化了HTML解析逻辑,去掉冗余的二次解析和
prettify调用,避免额外空白影响匹配 - 用lambda表达式做模糊匹配,自动忽略单元格文本前后的空格、换行符,提升匹配成功率
- 找到目标标签单元格后,通过
find_next_sibling直接获取同 row 的值单元格,提取文本时自动清理多余空白
内容的提问来源于stack exchange,提问作者Θοδωρής Πάλλης
相关产品推荐
相关产品推荐

