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

Python动态网页爬取问题:如何直接获取阿根廷文化局博物馆联系方式

解决动态渲染页面的爬取问题

方法一:直接调用后端API(最简便)

很多动态渲染的网站,实际是通过AJAX请求后端API获取数据再渲染到页面上,这种方式比爬取渲染后的页面效率高得多:

  • 打开目标页面,按F12打开浏览器开发者工具,切换到「Network」标签页,勾选「XHR」或「Fetch」选项
  • 刷新页面,观察加载的请求,找到返回博物馆列表数据的JSON格式接口
  • 找到接口后,直接用requests请求这个接口,就能拿到包含电话、邮箱的结构化数据,不用解析HTML

举个示例(假设找到的API接口结构如下):

import requests

api_url = 'https://rma.cultura.gob.ar/api/museos'
params = {'provincias': 'Buenos Aires'}
response = requests.get(api_url, params=params)
data = response.json()

# 遍历数据提取信息
for museo in data:
    print('电话:', museo.get('telefono'))
    print('邮箱:', museo.get('email'))

方法二:用浏览器自动化工具渲染页面

如果找不到API,就用Selenium模拟浏览器加载页面,等待JS渲染完成后再获取源码:

  1. 先安装依赖:
pip install selenium
  1. 下载对应浏览器的驱动(比如Chrome的ChromeDriver,需和浏览器版本匹配),放到Python可执行路径或指定路径
  2. 编写代码:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time

# 初始化Chrome浏览器驱动
driver = webdriver.Chrome()
driver.get('https://rma.cultura.gob.ar/#/app/museos/resultados?provincias=Buenos%20Aires')

# 等待页面核心元素加载完成(可根据实际页面元素调整)
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'museo-item'))
    )
except:
    pass
# 额外等待2秒确保所有内容渲染完毕
time.sleep(2)

# 获取渲染后的完整页面源码
source = driver.page_source
soup = BeautifulSoup(source, 'lxml')

# 提取电话和邮箱(示例,需根据实际页面标签调整)
telefonos = soup.find_all(class_='telefono')
emails = soup.find_all(class_='email')

for tel in telefonos:
    print(tel.text.strip())
for email in emails:
    print(email.text.strip())

# 关闭浏览器
driver.quit()

两种方法里,优先找API,速度快且稳定;实在找不到再用Selenium,缺点是速度较慢,还需额外配置驱动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:20:34