使用Python requests+BeautifulSoup无法爬取ArcGIS Hub站点谷歌云盘链接
问题根因
你请求的站点属于单页应用(SPA),所有页面内容都是通过JavaScript动态加载渲染的,requests库只能获取到初始的静态HTML骨架,不会执行页面中的JS脚本,所以返回的内容里没有你要找的Google Drive链接。
解决方案
下面提供两种可落地的解决方法:
- 方法一:使用无头浏览器模拟页面渲染
这种方法会模拟真实浏览器的运行逻辑,自动执行页面JS得到完整渲染后的页面内容,兼容性好,不需要额外分析站点接口。
首先安装依赖:pip install selenium webdriver-manager
示例代码如下:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup import time # 配置Chrome无头模式 chrome_opt = webdriver.ChromeOptions() chrome_opt.add_argument("--headless=new") chrome_opt.add_argument("--disable-gpu") chrome_opt.add_argument("--no-sandbox") driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_opt) driver.get("https://riwayat-file-vaksinasi-dki-jakarta-jakartagis.hub.arcgis.com/") # 等待3秒确保页面渲染完成,也可以用Selenium的显式等待匹配目标元素加载完成,稳定性更高 time.sleep(3) # 获取渲染后的完整HTML page_content = driver.page_source soup = BeautifulSoup(page_content, "lxml") # 提取所有Google Drive链接 drive_links = [tag["href"] for tag in soup.find_all("a", href=lambda href: href and "drive.google.com" in href)] print(drive_links) # 关闭浏览器进程 driver.quit()
- 方法二:直接调用站点数据接口
你可以打开浏览器F12开发者工具的「网络」面板,刷新页面后筛选Fetch/XHR类型的请求,找到站点加载内容数据的后端接口,直接请求该接口获取JSON格式的原始数据,解析后就能拿到所有链接,这种方法请求速度更快,资源消耗更低。
内容的提问来源于stack exchange,提问作者Chriz
相关产品推荐
相关产品推荐

