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

如何爬取点击「显示更多」按钮后URL不变的Vogue搜索页隐藏内容

解决Vogue搜索「显示更多」内容抓取的两种方案

方案1:调用站点内部搜索API(推荐)

Vogue搜索页的动态加载内容是通过异步接口返回的,不需要解析HTML页面,直接调用接口即可批量获取数据:

  1. 打开浏览器F12开发者工具,切换到「网络」面板,筛选Fetch/XHR类型请求
  2. 点击页面上的「显示更多」按钮,就能捕获到搜索接口请求,接口携带的核心参数如下:
    • q:搜索关键词,和网页端搜索词保持一致
    • offset:结果偏移量,即从第几条结果开始返回,首次加载默认值为0,每点击一次「显示更多」偏移量递增24(实际值以你捕获到的接口为准)
    • limit:单次请求返回的结果数量,可尝试调整到100减少请求次数
  3. 直接请求该接口,解析返回的JSON格式数据即可批量提取标题、链接字段,示例代码如下:
import requests
import time

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",
    "Referer": "https://www.vogue.com/"
}
# 替换为你捕获到的实际接口地址
base_api = "https://www.vogue.com/api/search"
keyword = "HARRY STYLES"
offset = 0
limit = 24
res = []

# 循环直到拿到足够的结果
while offset < 200: # 自定义需要抓取的总结果数
    params = {
        "q": keyword,
        "sort": "score desc",
        "offset": offset,
        "limit": limit
    }
    resp = requests.get(base_api, params=params, headers=headers)
    data = resp.json()
    # 按接口返回的JSON结构提取字段,以下为示例,需根据实际结构调整
    for item in data.get("search", {}).get("items", []):
        entry = {
            "Title": item.get("title", "").strip(),
            "Link": f"https://www.vogue.com{item.get('url', '').strip()}"
        }
        res.append(entry)
    offset += limit
    time.sleep(2) # 控制请求频率避免被封

方案2:模拟浏览器点击「显示更多」按钮

如果不想分析接口,可使用Selenium、Playwright等模拟浏览器工具,模拟人工点击按钮加载全部内容后再解析页面,核心逻辑示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from bs4 import BeautifulSoup as bs

driver = webdriver.Chrome()
url = 'https://www.vogue.com/search?q=HARRY+STYLES&sort=score+desc'
driver.get(url)
time.sleep(3)

# 自定义点击次数,或者判断按钮是否存在循环点击
click_count = 5 # 点击5次显示更多,可调整
for _ in range(click_count):
    try:
        # 替换为页面实际「显示更多」按钮的文本或元素选择器
        load_more_btn = driver.find_element(By.XPATH, '//button[contains(text(),"更多")]')
        load_more_btn.click()
        time.sleep(2)
    except:
        break # 按钮不存在时停止

# 解析全量加载后的页面源码
soup = bs(driver.page_source, 'html.parser')
links = soup.find_all('a', {'class':"summary-item-tracking__hed-link summary-item__hed-link"})
titles = soup.find_all('h2', {'class':"summary-item__hed"})
res = []
for i in range(len(titles)):
    entry = {'Title': titles[i].text.strip(), 'Link': 'https://www.vogue.com'+links[i]['href'].strip()}
    res.append(entry)

driver.quit()

注意事项

  • 控制请求/点击间隔,避免短时间高频请求触发站点反爬限制
  • 站点接口和页面元素选择器可能会迭代更新,若代码失效可重新捕获接口或更新元素选择器即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:39:02