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

Python爬虫:用Beautiful Soup和Selenium按页码范围爬取多页数据无输出

问题原因及修复方案

核心问题定位

  • 多类名选择器写法错误:BeautifulSoup通过class属性匹配元素时,多个类名需用空格分隔,你代码中使用了CSS选择器的点分隔格式,导致无法匹配到任何元素,fetch_data始终为空列表,自然没有输出内容。
  • 页码规则不匹配:亚马逊搜索结果的分页页码从1开始,range(8)生成的是0-7的序列,page=0的页面无有效商品数据。
  • 无页面加载等待:调用driver.get()后未等待页面渲染完成就直接读取源码,大概率会拿到未加载完成的空白结构,无法匹配到目标元素。
  • 元素取值逻辑错误:find()方法返回的是标签对象,直接打印不会输出文本内容,且未做非空判断,后续元素匹配不到时会触发报错。

具体修复步骤

  • 将所有class属性值中的.替换为空格,符合BeautifulSoup的多类名匹配规则。
  • 将页码循环范围改为range(1,9),生成1-8的有效页码。
  • 每次加载页面后增加至少3秒的等待时间,确保页面内容完全渲染。
  • 提取商品名称时先判断元素是否存在,再调用.text属性获取文本内容。

修正后可运行代码

from selenium import webdriver
import time
from bs4 import BeautifulSoup as Soup

# 启动驱动
driver = webdriver.Firefox(executable_path='C://Downloads//webdrivers//geckodriver.exe')
base_url = 'https://www.amazon.com/s?k=Mobile&i=amazon-devices&page='

# 页码从1到8
for page_num in range(1,9):
    driver.get(base_url + str(page_num))
    # 等待页面加载完成
    time.sleep(3)
    page_source = driver.page_source
    bs = Soup(page_source, 'html.parser')
    
    # 替换点为空格匹配多类名
    fetch_data = bs.find_all('div', {'class': 's-expand-height s-include-content-margin s-latency-cf-section s-border-bottom'})

    for f_data in fetch_data:
        # 替换点为空格匹配多类名
        product_name = f_data.find('span', {'class': 'a-size-medium a-color-base a-text-normal'})
        # 非空判断后输出文本
        if product_name:
            print(product_name.text + '\n')

# 运行完成后关闭驱动
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:24:03