You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:52:07