网页爬虫返回空列表问题求助
网页爬虫返回空列表问题求助
看起来你在爬取The Whisky Exchange的日本威士忌页面时,遇到了产品列表返回空的问题,我来帮你梳理下可能的原因和解决思路~
首先咱们先排查最基础的问题:
1. 确认请求是否成功被服务器接受
你的代码里没有检查请求的响应状态码,这是第一步要做的。很多时候网站会通过反爬机制拦截未授权的请求,导致你拿到的内容不是完整的页面。
可以在请求后加上状态码打印:
r = requests.get('https://www.thewhiskyexchange.com/c/35/japanese-whisky', headers=headers) print("响应状态码:", r.status_code)
- 如果状态码是
200,说明请求成功,但页面内容可能和你预期的不一样; - 如果是
403、404或者503这类,说明请求被拦截了,这时候需要优化请求头,甚至考虑用模拟浏览器的工具。
2. 检查元素选择器是否匹配当前页面结构
网站的前端结构可能会更新,你用的product-grid__item类名可能已经失效,或者元素层级变了。
你可以把返回的页面内容保存下来看看:
with open('page.html', 'w', encoding='utf-8') as f: f.write(r.text)
打开这个HTML文件,对比浏览器里的页面结构(按F12打开开发者工具),确认产品列表的li元素class是否还是product-grid__item。如果已经变更,就需要修改选择器。
3. 应对反爬和动态加载
如果请求状态码是200,但保存的页面里没有产品列表,那大概率是网站用了JavaScript动态加载内容——requests只能抓取静态HTML,动态渲染的内容拿不到。
这时候可以用selenium这类工具模拟浏览器加载页面,比如示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options # 配置浏览器选项 options = Options() options.add_argument('--headless=new') # 无头模式,不弹出浏览器窗口 options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0') driver = webdriver.Chrome(options=options) driver.get('https://www.thewhiskyexchange.com/c/35/japanese-whisky') # 等待页面加载完成 driver.implicitly_wait(5) # 查找产品列表 productlist = driver.find_elements(By.CLASS_NAME, 'product-grid__item') print(f"找到{len(productlist)}个产品") driver.quit()
另外,也可以尝试完善请求头,增加更多浏览器标识,比如:
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Referer': 'https://www.thewhiskyexchange.com/' }
先从检查状态码和页面内容开始,一步步排查应该就能找到问题啦~
备注:内容来源于stack exchange,提问作者Martha Imoh
相关产品推荐
相关产品推荐

