使用requests-HTML爬取网页时websockets日志干扰且结果不全求助
解决方案
1. 抑制websockets调试日志
requests-HTML依赖pyppeteer,pyppeteer调用websockets库时默认输出debug级日志,你可以通过Python的logging模块调整日志级别屏蔽冗余输出:
import logging # 将websockets和pyppeteer的日志级别设为WARNING,仅输出警告及以上信息 logging.getLogger("websockets.client").setLevel(logging.WARNING) logging.getLogger("pyppeteer").setLevel(logging.WARNING)
把这段代码放在脚本最开头,就能大幅减少控制台的日志干扰。
2. 修复商品信息获取不全的问题
目标网站是动态渲染的商品列表,需确保页面完全加载后再提取数据,可从以下几点调整代码:
延长页面等待时间:调用
render()时增加wait参数,保证元素加载完成:from requests_html import HTMLSession session = HTMLSession() r = session.get('https://bodysolid-europe.com/collections/all') # 等待5秒让页面渲染,可根据实际情况调整时长 r.html.render(wait=5, scrolldown=3) # scrolldown控制页面滚动次数,加载更多商品处理滚动加载:若商品需滚动页面才加载,可增大
scrolldown参数值(比如scrolldown=10),让页面自动滚动多次加载全部商品。确认元素选择器准确性:检查提取商品信息的CSS选择器是否精准,动态渲染元素可能需要更明确的选择器。示例提取商品标题和价格:
products = r.html.find('div.product-item') for product in products: title = product.find('h3.product-item__title', first=True).text price = product.find('span.price', first=True).text print(f"商品标题: {title}, 价格: {price}")模拟真实浏览器请求:给请求添加User-Agent头,降低被反爬拦截的概率:
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' } r = session.get('https://bodysolid-europe.com/collections/all', headers=headers)
内容的提问来源于stack exchange,提问作者OskarFdz11
相关产品推荐
相关产品推荐

