如何使用BeautifulSoup从ul标签中提取li标签及文本内容?
问题根因
代码未达预期有两个核心原因:
- 发起请求时未携带浏览器标识头,被站点反爬规则拦截,返回的不是浏览器中看到的正常页面源码,自然匹配不到目标节点。
- 你使用的
html.parser解析器对该站点不规范的标签嵌套容错性差,会出现标签父子关系解析错位,导致遍历ul时漏抓内部li。
修复代码
先安装缺失依赖(如果没装的话):pip install lxml requests beautifulsoup4
替换成如下代码运行即可:
import requests from bs4 import BeautifulSoup as BSoup # 构造请求头模拟普通浏览器访问,绕过基础反爬 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" } resp = requests.get('https://solar.world.org/reuse/Aluminum.Foil', headers=headers) # 换用容错性更强的lxml解析器,避免标签解析错位 soup = BSoup(resp.content, 'lxml') # 用css选择器直接匹配所有ul下的li节点,避免双层遍历受解析错位影响 for item in soup.select('ul li'): content = item.get_text(strip=True) if content: print(content)
注意事项
- 如果运行后返回内容还是不对,先打印
resp.text查看返回源码,如果是拦截提示,可以在headers里补充Referer: https://solar.world.org/字段再尝试。 - 提取文本时加
strip=True是为了去掉文本前后多余的换行、空格,输出更干净。
内容的提问来源于stack exchange,提问作者GuruRandapa
相关产品推荐
相关产品推荐

