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

如何从Brave图片搜索页面爬取指定类的图片src链接?

解决Brave图片搜索结果图片src抓取失败的问题

问题根源

你的代码在Brave图片搜索页面失效,核心原因是该页面的图片结果是通过JavaScript动态渲染生成的。requests或urllib直接请求得到的是初始HTML骨架,浏览器还没执行JS,所以目标img.image.svelte-qd248k标签根本不存在于静态源码中。

此外你的代码还存在几个冗余/错误点:

  • 重复发起HTTP请求(先用requests.get又用urllib.request.urlopen),完全没必要
  • 未按目标class筛选img标签,而是遍历所有img,会拿到很多无关元素
  • 链接拼接逻辑错误:如果src本身是完整URL,直接拼接基础url会生成类似https://search.brave.com/images?q=lfchttps://xxx.com/xxx.jpg的无效链接
  • 用set存储link对象而非src字符串,去重逻辑无效

解决方案

方案1:用Selenium模拟浏览器渲染(最直接)

通过模拟浏览器加载页面并执行JS,获取渲染后的完整源码,再提取图片链接。

  1. 先安装依赖:
pip install selenium beautifulsoup4
  1. 下载对应浏览器的驱动(比如ChromeDriver,需和你的Chrome版本匹配),放到可执行路径下。

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

url = "https://search.brave.com/images?q=lfc"

# 初始化浏览器(这里用Chrome,也可以用Firefox等)
driver = webdriver.Chrome()
driver.get(url)

# 等待图片元素加载完成(最多等10秒)
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "svelte-qd248k"))
    )
except:
    print("图片元素加载超时")
    driver.quit()
    exit()

# 获取渲染后的页面源码
page_source = driver.page_source
driver.quit()

# 保存页面源码到文件
with open("brave_images_page.txt", "w", encoding="utf-8") as f:
    f.write(page_source)

# 解析源码提取目标图片src
soup = BeautifulSoup(page_source, "html.parser")
target_imgs = soup.find_all("img", class_="image svelte-qd248k")

# 收集并保存图片链接
all_img_srcs = set()
with open("imgUrls.txt", "w", encoding="utf-8") as f:
    for img in target_imgs:
        src = img.get("src")
        if src and src != "#":
            all_img_srcs.add(src)
            print(src)
            f.write(src + "\n")

print(f"共提取到{len(all_img_srcs)}个有效图片链接")

方案2:直接调用Brave图片搜索API(效率更高)

通过浏览器开发者工具抓包,找到Brave图片搜索的API接口,直接请求接口获取JSON格式的图片数据,无需渲染页面。

示例(需根据实际抓包结果调整请求头和参数):

import requests

url = "https://search.brave.com/api/images/search"
params = {
    "q": "lfc",
    "count": 20,  # 每页数量
    "offset": 0
}

# 模拟浏览器请求头,避免被拦截
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(url, params=params, headers=headers)
data = response.json()

# 提取图片链接
img_srcs = [item["thumbnail"] for item in data["results"]]

# 保存结果
with open("imgUrls_api.txt", "w", encoding="utf-8") as f:
    for src in img_srcs:
        f.write(src + "\n")

注意:API接口可能会随时变化,需要自行抓包确认最新的接口地址和参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:48:08