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

技术咨询:如何从https://maroof.sa/businesses/获取所有店铺URL?

解决从maroof.sa/businesses/提取所有店铺URL的方法

这个站点的店铺数据是动态加载的,普通静态爬虫无法获取完整内容,以下是两种可行方案:

方案一:使用Playwright模拟浏览器(推荐)

Playwright能完整渲染JS动态内容,还能自动处理滚动加载,步骤如下:

  1. 安装依赖:
pip install playwright
playwright install chromium
  1. 编写Python代码:
from playwright.sync_api import sync_playwright

def get_all_business_urls():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)  # 调试时可设为False查看浏览器操作
        page = browser.new_page()
        page.goto("https://maroof.sa/businesses/")
        
        # 滚动页面加载所有店铺内容
        last_height = page.evaluate("document.body.scrollHeight")
        while True:
            page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
            page.wait_for_timeout(3000)  # 等待3秒确保内容加载
            new_height = page.evaluate("document.body.scrollHeight")
            if new_height == last_height:
                break
            last_height = new_height
        
        # 提取所有店铺URL并去重
        business_links = page.locator("a[href*='/business/']").all()
        urls = [link.get_attribute("href") for link in business_links]
        unique_urls = list(set(urls))
        
        print(f"共提取到 {len(unique_urls)} 个店铺URL")
        browser.close()
        return unique_urls

if __name__ == "__main__":
    get_all_business_urls()

方案二:抓取站点API接口(更高效)

打开浏览器开发者工具(F12)切换到Network标签,刷新页面并滚动,可找到加载店铺数据的API接口(类似https://maroof.sa/api/v1/businesses?page=xxx)。直接请求API绕过浏览器渲染,速度更快:

示例Python代码:

import requests
import time

def get_businesses_via_api():
    base_url = "https://maroof.sa/api/v1/businesses"
    page = 1
    all_urls = []
    
    while True:
        params = {"page": page, "per_page": 20}  # 实际参数需通过开发者工具确认
        response = requests.get(base_url, params=params)
        if response.status_code != 200:
            break
        
        data = response.json()
        if not data.get("data"):
            break
        
        # 从返回的JSON中提取店铺URL
        for business in data["data"]:
            business_url = f"https://maroof.sa/business/{business['slug']}"
            all_urls.append(business_url)
        
        page += 1
        time.sleep(1)  # 添加间隔避免触发反爬
    
    unique_urls = list(set(all_urls))
    print(f"共提取到 {len(unique_urls)} 个店铺URL")
    return unique_urls

if __name__ == "__main__":
    get_businesses_via_api()

注意事项

  • 不要高频请求,可添加请求间隔避免IP被封禁
  • API参数可能随时变化,需实时通过开发者工具确认最新接口和参数
  • 模拟浏览器时,需根据网络状况调整等待时间,确保内容完全加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:22:13