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

使用Python BeautifulSoup爬取指定网页产品名称失败求助

解决动态页面产品抓取问题

你遇到的问题核心是这个页面的产品列表是JavaScript动态加载的——用requests直接获取的只是静态HTML骨架,产品数据还没被浏览器渲染出来,所以BeautifulSoup自然抓不到目标元素。另外你写的select语法也有问题,正确写法应该是mobile_page_soup.select('div.grid-items__item'),但这不是关键,关键是动态加载的内容无法通过静态请求获取。

下面给两种可行的解决方案:

方案一:用Selenium模拟浏览器渲染

Selenium能模拟真实浏览器加载页面,等JS执行完成后再抓取内容,步骤如下:

  1. 准备依赖
    • 安装Selenium:pip install selenium
    • 下载对应浏览器的驱动(比如Chrome的ChromeDriver),确保驱动路径能被Python识别
  2. 编写代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

mobile_page_url = 'https://telenor.se/handla/mobiler/'
# 初始化Chrome驱动
driver = webdriver.Chrome()
driver.get(mobile_page_url)

# 等待产品列表加载完成,最多等待10秒
wait = WebDriverWait(driver, 10)
product_items = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'grid-items__item')))

# 提取并打印产品名称
for item in product_items:
    product_name = item.find_element(By.CLASS_NAME, 'product-card__name').text
    print(product_name)

# 关闭浏览器
driver.quit()

方案二:直接请求产品数据API

动态页面的产品数据通常来自后端API,直接请求API比模拟浏览器更高效:

  1. 抓包找API:打开浏览器开发者工具(F12)→ 切换到「网络」标签→ 刷新页面→ 筛选「XHR/Fetch」请求,找到返回产品列表的接口(比如类似/api/mobile-products的请求)
  2. 编写请求代码:
import requests

# 替换为你抓包得到的真实API地址
api_url = 'https://telenor.se/api/mobile-products'
# 必要时添加请求头,比如从浏览器复制User-Agent、Referer等
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

response = requests.get(api_url, headers=headers)
products = response.json()

# 提取产品名称(字段名以API返回的JSON结构为准)
for product in products:
    print(product.get('name'))

注意:API地址可能随网站更新变化,需要你自行确认;部分API需要携带特定请求头才能正常返回数据,可从浏览器的请求详情中复制对应参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:25:32