如何从含多嵌入标签的网页爬取指定td元素?Python爬虫问题
问题说明
使用Python编写网页爬虫时遇到问题:当前代码会爬取网页内多个标签的文本,无法仅提取目标**「enhanced form」**区域下的单个td元素。需修正代码,实现仅提取该区域内指定td的文本并输出到Excel表格。
修正后的代码
import requests from bs4 import BeautifulSoup from openpyxl import Workbook url = "https://www.racingandsports.com.au/form-guide/thoroughbred/australia/cranbourne/2024-04-26/R8/enhanced-form" # 发送GET请求获取网页内容 response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.content, "html.parser") # 先定位到「enhanced form」对应的容器(需根据页面实际HTML结构调整定位规则) enhanced_form_container = soup.find("div", class_="enhanced-form") table = None if enhanced_form_container: # 在目标容器内查找表格 table = enhanced_form_container.find("table", id="tblStats") else: # 若找不到容器,降级查找页面中的目标表格 table = soup.find("table", id="tblStats") if table: wb = Workbook() ws = wb.active ws.title = "EnhancedFormData" # 定位目标行并提取单个td(示例为第一行的第6个td,可根据需求调整) target_row = table.find("tbody").find("tr") if target_row: tds = target_row.find_all("td") if len(tds) >= 6: target_text = tds[5].get_text(strip=True) ws.cell(row=1, column=1, value=target_text) wb.save("enhanced_form_output.xlsx") print("单个td文本已成功写入enhanced_form_output.xlsx") else: print("目标行的td数量不足,无法提取指定位置的元素") else: print("表格tbody内未找到目标行") else: print("未找到id为'tblStats'的表格") else: print(f"网页请求失败,状态码:{response.status_code}")
核心修正内容
- 精准区域锁定:先定位「enhanced form」对应的容器元素,再从中查找目标表格,避免抓取到页面其他无关区域的内容。
- 单个元素提取:不再遍历所有行,而是直接定位目标行并提取指定位置的td,确保只获取目标元素的文本。
- 异常防护:增加td数量判断,避免因页面结构变化或元素缺失导致的索引错误。
注:若实际需求是提取「enhanced form」区域下的多个td,可将代码调整为遍历目标区域内的指定行集合,但需明确“单个td”的具体指向。
内容的提问来源于stack exchange,提问作者NewGuy1
相关产品推荐
相关产品推荐

