使用Python的BeautifulSoup爬取产品时无法输出产品列表求助
解决网页爬取产品列表无输出的问题
问题原因分析
你的代码执行后productlist无输出,大概率是以下两个原因:
- 网站反爬机制拦截:虽然你添加了基础的
User-Agent,但网站可能识别出这是爬虫请求,返回的内容并非实际产品页面(可能是空页面或验证页)。 - 页面结构已变更:目标网站的产品列表元素类名可能已从
product-grid__item修改为其他名称。
分步解决方案
1. 先验证请求是否获取到正确内容
在解析前先打印响应状态码和部分内容,确认请求是否成功:
import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'} k = requests.get('https://www.thewhiskyexchange.com/c/35/japanese-whisky', headers=headers) # 打印状态码,200表示请求成功 print(k.status_code) # 打印页面前500个字符,判断是否是实际产品页面 print(k.text[:500])
如果状态码不是200,说明请求被拦截;如果状态码是200但内容里没有产品相关文字,大概率是反爬导致返回了无效内容。
2. 完善请求头,模拟真实浏览器
给请求头添加更多字段,让请求更接近真实浏览器行为:
import requests from bs4 import BeautifulSoup headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Referer': 'https://www.thewhiskyexchange.com/', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', } # 使用Session保持会话,提升请求成功率 session = requests.Session() response = session.get('https://www.thewhiskyexchange.com/c/35/japanese-whisky', headers=headers) soup = BeautifulSoup(response.text, 'lxml') # 换成lxml解析器,解析更稳定 productlist = soup.find_all("li", class_="product-grid__item") print(len(productlist)) # 打印产品数量,验证是否获取到 print(productlist)
注意:需要先安装lxml解析器,执行pip install lxml。
3. 检查页面元素选择器是否正确
如果上面的方法还是无效,打开目标网页,按F12打开开发者工具,找到产品列表的<li>元素,查看它的class是否还是product-grid__item。如果类名变更,修改find_all里的class参数即可。
内容的提问来源于stack exchange,提问作者Win123
相关产品推荐
相关产品推荐

