Python 2.7.13获取土耳其IS银行外汇页解码后HTML源码的方法
解决Python 2.7获取网页解码后HTML的问题
问题原因
页面部分内容是通过前端JavaScript解码Base64编码内容后渲染的。requests.get只能获取服务器返回的原始HTML源码,不会执行页面中的JS,所以拿到的是未解码的Base64内容;而浏览器会自动执行JS完成解码渲染,因此能看到正常内容。
解决方案
方案1:用Selenium模拟浏览器渲染(推荐)
通过模拟浏览器行为,让页面完成JS渲染后再获取源码,直接拿到解码后的完整HTML。
步骤:
- 安装适配Python2.7的Selenium版本:
pip install selenium==3.141.0
- 下载对应Chrome版本的ChromeDriver(版本需与本地Chrome浏览器一致)
代码示例:
from selenium import webdriver import time url = "https://www.isbank.com.tr/en/foreign-exchange-rates" # 替换为你的ChromeDriver文件路径 driver = webdriver.Chrome(executable_path="./chromedriver") driver.get(url) # 等待页面JS渲染完成,时间可根据实际情况调整 time.sleep(2) # 获取渲染后的完整页面源码 decoded_html = driver.page_source driver.quit() # 输出或处理解码后的内容 print(decoded_html)
方案2:手动定位并解码Base64内容
如果不想用浏览器模拟,可以从原始HTML中提取Base64编码片段,手动解码。需要先分析页面结构,找到编码内容的位置。
代码示例:
import requests import base64 import re url = "https://www.isbank.com.tr/en/foreign-exchange-rates" resp = requests.get(url) raw_html = resp.text # 用正则匹配页面中的Base64编码内容(需根据实际页面结构调整正则表达式) # 示例匹配类似"data:text/html;base64,XXX"中的XXX部分 base64_matches = re.findall(r'base64,([^"]+)', raw_html) if base64_matches: for b64_content in base64_matches: # Python2.7中b64decode返回字节流,需转成字符串 decoded_content = base64.b64decode(b64_content).decode("utf-8") print(decoded_content)
注意事项
- Python 2.7已停止官方维护,若长期使用建议升级到Python 3版本,避免编码兼容性问题
- 方案1中ChromeDriver版本必须与本地Chrome浏览器版本匹配,否则会报错
- 方案2的正则表达式需要根据页面实际的Base64内容位置调整,若页面结构更新,需重新匹配
内容的提问来源于stack exchange,提问作者ni_hao
相关产品推荐
相关产品推荐

