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

如何从网页抓取动态加载的店铺URL

解决maroof.sa店铺URL抓取问题

核心问题排查

  • Requests+BeautifulSoup失效:页面店铺数据由JavaScript动态渲染,直接请求获取的原始HTML不包含加载后的店铺链接
  • Selenium未成功:大概率是元素选择器错误、等待策略不合理,或是网站存在基础反爬检测(比如识别自动化工具特征)

可行解决方案

1. 精准定位店铺链接元素

手动查看页面DOM结构后,店铺链接通常是带有/business/前缀的a标签,可通过CSS选择器a[href^='/business/']直接定位。

2. 优化Selenium抓取逻辑

通过配置浏览器选项规避反爬,配合显式等待确保元素加载完成:

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 selenium.webdriver.chrome.options import Options

# 配置浏览器,模拟真实用户行为
chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_argument("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")

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://maroof.sa/businesses")

try:
    # 显式等待,直到至少一个店铺链接加载完成
    wait = WebDriverWait(driver, 20)
    shop_links = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "a[href^='/business/']")))
    
    # 提取URL并去重
    url_list = list(set([link.get_attribute("href") for link in shop_links]))
    
    # 输出结果
    for url in url_list:
        print(url)
finally:
    driver.quit()

3. 处理滚动加载的分页内容

若页面需滚动加载更多店铺,可添加滚动逻辑:

# 在上述代码的try块中,添加滚动逻辑
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 滚动至页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待新内容加载
    driver.implicitly_wait(5)
    # 判断是否加载完毕
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

# 重新提取所有链接
shop_links = driver.find_elements(By.CSS_SELECTOR, "a[href^='/business/']")
url_list = list(set([link.get_attribute("href") for link in shop_links]))

4. 高效备选:直接调用API接口

通过浏览器开发者工具的「网络」面板,查找网站加载店铺数据的API接口(通常是包含businesses的XHR请求),直接用Requests请求接口获取JSON数据,解析后提取店铺URL,这种方式比Selenium更高效。

注意事项

  • 控制请求频率,避免触发反爬机制,建议添加请求间隔
  • 遵守网站robots.txt规则(可访问https://maroof.sa/robots.txt查看)

内容的提问来源于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 00:37:18