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

Python抓取网页无og:image标签?如何提取对应图片链接?

解决无法抓取动态渲染页面中og:image标签的问题

你遇到的问题是因为目标页面采用客户端JavaScript渲染:直接用urllib或requests请求只能获取到初始的静态HTML骨架,而og:image这类标签是页面加载后通过JS动态生成的,所以静态请求的结果里找不到它。

下面提供两种可行的解决方法:

方法1:使用Selenium模拟浏览器渲染页面

Selenium可以模拟真实浏览器加载页面并执行JS,获取完全渲染后的HTML内容。

步骤:

  1. 安装依赖:

    pip install selenium
    

    同时需要下载对应浏览器的驱动(比如ChromeDriver,需和你的Chrome版本匹配)。

  2. 示例代码:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from bs4 import BeautifulSoup
    
    url = 'https://www.digikala.com/product/dkp-729879/%D8%B4%D9%88%D8%B1%D8%AA-%D9%85%D8%B1%D8%AF%D8%A7%D9%86%D9%87-%D8%A2%D8%B1%DB%8C%D8%A7%D9%86-%D9%86%D8%AE-%D8%A8%D8%A7%D9%81-%DA%A9%D8%AF-1312-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-3-%D8%B9%D8%AF%D8%AF%DB%8C/'
    
    # 配置无头模式(可选,无需打开可视化浏览器窗口)
    chrome_options = Options()
    chrome_options.add_argument('--headless=new')
    chrome_options.add_argument('--disable-gpu')
    
    # 初始化浏览器驱动
    driver = webdriver.Chrome(options=chrome_options)
    driver.get(url)
    
    # 等待页面完全加载(隐式等待10秒,可根据实际调整)
    driver.implicitly_wait(10)
    
    # 获取渲染后的完整页面源码
    page_source = driver.page_source
    driver.quit()
    
    # 解析页面提取og:image标签
    soup = BeautifulSoup(page_source, 'html.parser')
    og_image_tag = soup.find('meta', property='og:image')
    
    if og_image_tag:
        print(og_image_tag.get('content'))
    else:
        print("未找到og:image标签")
    

方法2:直接请求产品数据API

大部分电商网站会通过API接口加载产品数据,直接请求API比模拟浏览器更高效。

步骤:

  1. 在Chrome开发者工具的「Network」标签页中,刷新目标页面,筛选「XHR」类型的请求,找到包含产品详情的API接口(通常URL中包含product或产品ID)。
  2. 直接请求该API,从返回的JSON数据中提取图片链接。

示例代码:

import requests

# 替换为实际找到的API接口URL(需自行在开发者工具中确认)
api_url = 'https://api.digikala.com/v1/product/dkp-729879/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

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

# 根据API返回的JSON结构提取主图链接(路径需根据实际返回调整)
main_image_url = product_data['data']['product']['images']['main']['url']
print(main_image_url)

两种方法对比

  • Selenium:通用性强,适用于所有JS渲染页面,但速度较慢,资源消耗大。
  • API请求:速度快、效率高,但需要自行查找接口,且接口可能随网站更新而变化。

内容的提问来源于stack exchange,提问作者Mohsen Amiri Amjad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:30:53