使用Python爬取网页表格中产品成分信息的代码排障求助
问题根因
原有代码无法提取成分的核心问题有3个:
- 执行
table1 = soup.find(...).text.strip()时直接拿到了字符串类型的纯文本,后续对字符串调用.find_all('tr')会直接触发属性错误,根本无法遍历表格节点 - 选择器使用的是前端构建工具生成的动态哈希类名,类名会随页面版本更新随机变化,定位逻辑不稳定
- 页面的成分信息没有放在传统
<table>标签的<tr>/<td>结构中,原有遍历表格行的逻辑完全不匹配页面实际DOM结构

修正后可运行代码
import requests from bs4 import BeautifulSoup # 目标页面地址 url = "https://mamaearth.in/product/mamaearth-me-deo-for-a-scent-that-s-unique-to-you-120-ml" # 补全请求头绕过基础反爬 req_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" } resp = requests.get(url, headers=req_headers) soup = BeautifulSoup(resp.text, "lxml") # 通过固定的Composition标题定位成分区块,不受动态类名影响 comp_title = soup.find(lambda tag: tag.text.strip() == "Composition" and tag.name in ["h3", "h4", "p", "div"]) comp_content = comp_title.find_next_sibling() # 提取所有成分名称,直接输出结果 ingredients = [item.text.strip() for item in comp_content.find_all("li")] print(ingredients)
代码说明
- 移除了提前提取文本的错误逻辑,全程操作BeautifulSoup标签对象完成节点查找
- 放弃易失效的动态类选择器,通过页面固定的「Composition」板块标题定位内容,长期运行稳定性更高
- 适配页面实际用无序列表存储成分的结构,直接提取列表项文本,不需要依赖pandas生成冗余表格
- 运行后直接输出截图红圈标注的全部成分名称,无多余内容
内容的提问来源于stack exchange,提问作者Abhishek Singh
相关产品推荐
相关产品推荐

