BeautifulSoup解析Lexico词典页面返回不完整结果的问题排查
解决Lexico词典页面BeautifulSoup解析内容截断问题
你遇到的问题是用BeautifulSoup提取class为semb的<ul>标签内容时,结果只到第二个<li>中途就终止,大概率是以下两个原因导致:
1. 请求未模拟浏览器,返回内容被网站截断
很多网站会对不带浏览器标识的请求返回不完整内容,你需要给请求添加User-Agent头模拟浏览器访问:
import requests from bs4 import BeautifulSoup url = 'https://www.lexico.com/definition/iron' 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' } req = requests.get(url, headers=headers) # 验证返回内容是否完整:将响应内容保存到本地文件查看 with open('lexico_iron.html', 'w', encoding='utf-8') as f: f.write(req.text)
2. lxml解析器对不规范HTML容错性差
Lexico的页面HTML可能存在未闭合标签等不规范情况,lxml解析器遇到这类问题会提前终止解析,换成Python内置的html.parser解析器即可:
soup = BeautifulSoup(req.text, 'html.parser') semb = soup.find('ul', attrs={'class':'semb'}) print(semb)
验证步骤
- 先执行添加请求头的代码,把响应内容保存到本地文件,打开查看
semb对应的<ul>标签是否完整。如果文件里内容完整,那就是解析器的问题;如果文件里内容就截断,继续调整请求头(比如添加Accept、Referer等字段)。
内容的提问来源于stack exchange,提问作者K4pk4n
相关产品推荐
相关产品推荐

