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

使用BeautifulSoup爬取Dealabs页面评论数时遭遇NoneType对象问题求助

解决BeautifulSoup获取评论数时返回None的问题

看起来你在爬取Dealabs页面评论数时遇到了元素定位失败的问题,我来帮你排查和解决:

首先,修复脚本里的明显错误

你的脚本里使用了requests.get()但没有导入requests模块,这会直接导致运行错误,先补上:

import requests

为什么会返回None?

主要有几个可能的原因:

  1. 页面结构更新:你依赖的space--h-3 space--v-3这个class可能已经被网站修改了,导致BeautifulSoup找不到对应的元素。
  2. 链式调用的脆弱性:连续调用find()时,只要中间某一步找不到元素,就会返回None,后续调用就会抛出异常。
  3. URL不一致:你问题里提到的目标URL是https://www.dealabs.com/discussions/suivi-erreurs-de-prix-1063390?page=9999,但脚本里用的是带#comments的版本,可能获取的页面内容不符合预期。

改进后的解决方案

下面是更健壮的脚本,结合了两种获取评论数的方式(直接定位元素 + 正则匹配),同时添加了异常处理:

from bs4 import BeautifulSoup
import requests
import time
import re

while True:
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:117.0) Gecko/20100101 Firefox/117.0",
        "Accept-Encoding": "gzip, deflate",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "DNT": "1",
        "Connection": "close",
        "Upgrade-Insecure-Requests": "1"
    }
    cookies = {"cookie_policy_agreement": "3"}
    # 使用你问题中指定的正确URL
    url = 'https://www.dealabs.com/discussions/suivi-erreurs-de-prix-1063390?page=9999'
    
    try:
        # 发送请求并检查状态码
        response = requests.get(url, headers=headers, cookies=cookies)
        response.raise_for_status()  # 如果请求失败(比如403、500),抛出异常
        
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 方法1:用CSS选择器直接定位评论数元素(更直观)
        comment_elem = soup.select_one('#comments h2.flex--inline span.size--all-m')
        if comment_elem:
            comment_count = comment_elem.get_text(strip=True)
            print(f"成功获取评论数:{comment_count}")
        else:
            # 方法2:用正则表达式匹配页面中的评论数文本(更健壮,不受小结构变化影响)
            match_result = re.search(r'(\d+) commentaires', response.text)
            if match_result:
                comment_count = f"{match_result.group(1)} commentaires"
                print(f"成功获取评论数:{comment_count}")
            else:
                print("未找到评论数量相关内容,请检查页面结构或请求是否正常")
                
    except Exception as e:
        print(f"执行出错:{str(e)}")
    
    time.sleep(30)

关键改进点

  • 添加异常处理:捕获请求错误和解析错误,避免脚本直接崩溃,方便排查问题。
  • 双方案备份:先用CSS选择器定位元素,如果失败就用正则匹配文本,降低受页面结构变动的影响。
  • 验证请求状态:用response.raise_for_status()确保请求成功,避免解析错误的页面内容。
  • 统一URL:使用你问题中指定的带page=9999的URL,确保获取的是目标页面。

内容的提问来源于stack exchange,提问作者user19707890

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:14:03