如何抓取西联汇款网页的货币兑换信息?(BeautifulSoup遇阻)
问题原因
西联汇款的页面基于Angular框架开发,汇率信息是通过JavaScript动态渲染生成的。你用requests.get()只能获取到初始的静态HTML源码,此时动态生成的ng-star-inserted元素还未加载,所以BeautifulSoup无法找到对应内容。
解决方案
方案1:用Selenium模拟浏览器加载动态内容
通过模拟真实浏览器的加载过程,等待页面动态渲染完成后再提取元素。
步骤:
- 先安装Selenium库:
pip install selenium - 下载对应浏览器的驱动(比如ChromeDriver,需与浏览器版本匹配)
代码示例:
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 url = 'https://www.westernunion.com/br/pt/web/send-money/start?ReceiveCountry=AR&ISOCurrency=ARS&SendAmount=100.00&FundsOut=BA&FundsIn=WUPay' # 初始化Chrome浏览器(需确保ChromeDriver路径配置正确) driver = webdriver.Chrome() driver.get(url) try: # 等待目标元素加载完成,超时时间10秒 WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'ng-star-inserted')) ) # 遍历所有符合class的元素,筛选出包含兑换格式的内容 spans = driver.find_elements(By.CLASS_NAME, 'ng-star-inserted') for span in spans: text = span.text.strip() if '=' in text: print(text) finally: driver.quit()
方案2:直接调用页面的API接口(更高效)
西联的汇率数据是通过API接口获取的,你可以通过浏览器开发者工具找到对应的接口,直接请求接口获取数据:
- 打开浏览器F12开发者工具,切换到「Network」标签
- 刷新页面,搜索包含「exchange」「rate」的XHR/Fetch请求
- 复制接口URL、请求参数和必要的请求头,用
requests直接调用
代码示例(需替换为实际找到的API信息):
import requests # 替换为你从开发者工具中找到的真实API地址 api_url = "https://www.westernunion.com/api/exchange-rate" 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.westernunion.com/" } params = { "fromCurrency": "BRL", "toCurrency": "ARS", "sendAmount": 100.00 } response = requests.get(api_url, headers=headers, params=params) data = response.json() # 根据API返回的JSON结构,生成所需格式的兑换信息 exchange_info = f"1.00 BRL = {data['conversionRate']} Argentine Peso" print(exchange_info)
注意事项
- 使用Selenium时,确保浏览器驱动与浏览器版本完全匹配,避免加载失败
- 调用API时,需注意接口的请求限制,遵守网站的使用条款和
robots.txt协议 - 西联的API参数和地址可能会更新,需定期检查调整
内容的提问来源于stack exchange,提问作者Vinícius
相关产品推荐
相关产品推荐

