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

使用Beautiful Soup提取Goflink商品页面元素返回None求助

解决Goflink商品页面数据提取问题

问题分析

你的代码存在两个核心问题:

  1. 变量名不一致:已定义解析后的BeautifulSoup对象为hun,但提取描述时误用了未定义的soup变量,这会直接导致报错或返回None。
  2. 页面动态渲染:该网站依赖前端框架动态生成内容,requests仅能获取静态HTML源码,其中并不包含目标元素,因此find方法无法匹配到对应节点。

解决方案

1. 先修正变量名错误

首先修复代码中的变量名问题,将soup.find改为hun.find:

p = 'https://www.goflink.com/de-DE/shop/product/rewe-to-go-obstschale-frucht-mix-150g-11014167/'
f = requests.get(p, headers=headers).text
hun = BeautifulSoup(f, 'html.parser')
# 修正变量名,从soup改为hun
description = hun.find("div", {"class": "product-info-tab-accordion"})
image_url = hun.find("div", {"class": "v-hl-container v-hl-snap-center"})
print(description)
print(image_url)

但即使修正后,由于页面动态渲染的特性,仍大概率返回None,需要进一步处理。

2. 使用Selenium获取动态渲染内容

通过模拟浏览器加载页面,获取完整渲染后的HTML,再提取目标元素:

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
from bs4 import BeautifulSoup

url = 'https://www.goflink.com/de-DE/shop/product/rewe-to-go-obstschale-frucht-mix-150g-11014167/'

# 初始化Chrome浏览器(需提前下载对应版本的chromedriver并配置到环境中)
driver = webdriver.Chrome()
driver.get(url)

try:
    # 等待商品描述容器加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'product-info-tab-accordion'))
    )
    # 等待图片容器加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'v-hl-container'))
    )
    
    # 获取渲染后的页面源码
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, 'html.parser')
    
    # 提取商品描述
    description_div = soup.find("div", {"class": "product-info-tab-accordion"})
    if description_div:
        product_description = description_div.get_text(strip=True)
        print("商品描述:", product_description)
    
    # 提取图片URL
    image_container = soup.find("div", {"class": "v-hl-container v-hl-snap-center"})
    if image_container:
        img_tag = image_container.find("img")
        if img_tag and 'src' in img_tag.attrs:
            product_image_url = img_tag['src']
            # 若为相对路径,拼接完整URL
            if not product_image_url.startswith('http'):
                product_image_url = f'https://www.goflink.com{product_image_url}'
            print("图片URL:", product_image_url)
            
finally:
    # 关闭浏览器
    driver.quit()

3. 直接调用API接口(更高效)

通过浏览器开发者工具(F12 → Network标签),可以找到网站加载商品数据的API接口。直接请求该接口,解析JSON数据即可获取所需信息,无需处理动态渲染:

import requests

# 替换为实际找到的API接口URL
api_url = 'https://api.goflink.com/...'
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',
    # 根据实际请求添加其他必要头信息,如Cookie、Referer等
}

response = requests.get(api_url, headers=headers)
if response.status_code == 200:
    product_data = response.json()
    # 从JSON中提取描述和图片URL,字段名需根据实际API返回调整
    product_description = product_data['description']
    product_image_url = product_data['imageUrl']
    print("商品描述:", product_description)
    print("图片URL:", product_image_url)

注意事项

  • 使用Selenium时,需确保chromedriver版本与浏览器版本匹配。
  • 调用API时,需复制浏览器请求中的完整headers,避免被反爬机制拦截。
  • 遵守网站的robots.txt协议和使用条款,避免过度请求导致IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:22:49