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

如何用Jsoup提取JavaScript中的链接?爬虫获取手机图片遇动态加载问题

搞定动态加载的手机图片爬虫方案

嘿,这种JS异步替换图片源的情况太常见了!我之前爬电商网站的手机品类时,也碰到过一模一样的问题——普通爬虫拿的都是占位图,真实图片得等页面加载完才会被JS替换。给你分享几个亲测有效的解决办法:

1. 用无头浏览器模拟真实渲染

这是最省心的方法,直接模拟真人打开浏览器的过程,让JS跑完再拿数据。推荐用Playwright(比Selenium更轻量),代码大概是这样:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动无头浏览器(headless=True就是不显示窗口)
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("你的目标网站URL")
    # 等手机图片元素加载完成,比如假设图片的class是"product-phone-img"
    page.wait_for_selector(".product-phone-img")
    # 批量获取所有手机图片的真实链接
    phone_imgs = page.query_selector_all(".product-phone-img")
    for img in phone_imgs:
        real_img_url = img.get_attribute("src")
        print(real_img_url)
    browser.close()

这种方法不用抠JS逻辑,缺点就是比纯HTTP请求慢一点,但胜在稳,几乎能处理所有动态渲染的内容。

2. 直接扒网站的API接口

很多网站的真实图片是通过AJAX接口拉取的,你可以用浏览器开发者工具抓包找接口:

  • 按F12打开开发者工具,切换到「Network」标签,过滤「XHR/Fetch」请求
  • 刷新页面,找带「image」「product」这类关键词的请求,点进去看响应内容,大概率能找到手机图片的URL列表
  • 然后直接用爬虫请求这个API,把参数(比如商品ID、页码)拼对,就能拿到干净的图片链接了
    这种方法效率最高,不用渲染页面,但需要你稍微分析下接口的参数规则,要是有签名验证的话可能得花点功夫破解。

3. 从页面的全局JS变量里抠数据

有些网站会把商品图片数据直接嵌在页面的全局JS变量里,比如window.productDetail之类的。你可以用正则从初始HTML里提取:

import requests
import re
import json

resp = requests.get("目标网站URL")
# 假设全局变量是window.phoneGallery = {...}
pattern = re.compile(r'window\.phoneGallery\s*=\s*(.*?);')
match_result = pattern.search(resp.text)
if match_result:
    img_data = json.loads(match_result.group(1))
    # 假设图片链接存在imageUrls字段里
    print(img_data["imageUrls"])

这种方法速度快,也不用渲染页面,适合那些把数据直接塞在页面JS里的网站。

最后提个醒

不管用哪种方法,记得遵守目标网站的robots.txt规则,别爬太猛,必要的时候加个请求头(比如User-Agent模拟真实浏览器)、用代理轮换IP,避免被封。

内容的提问来源于stack exchange,提问作者Constantin N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:27:21