使用Python提取网页JavaScript中base64编码内容内的URL
解决方法
实现逻辑
- 第一步:用正则从原始网页源码中匹配
document.write(Base64.decode("与"))之间的Base64编码串 - 第二步:对捕获到的Base64串做UTF-8解码,得到包含iframe标签的HTML片段
- 第三步:从解码后的片段中提取iframe的src属性值,即目标URL
可运行完整代码
import re import base64 # 此处替换为你实际爬取得到的网页源码内容 raw_page_content = ''' <div class="content_swf" style="position: relative;"> <div class="player"> <div class="mediaplayer" id="mediaplayer"> <script type="text/javascript">document.write(Base64.decode("PGlmcmFtZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBhbGxvd2Z1bGxzY3JlZW4gd2Via2l0YWxsb3dmdWxsc2NyZWVuIG1vemFsbG93ZnVsbHNjcmVlbiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PU9jajBzVkI5eWtZIiBzY3JvbGxpbmc9Im5vIj48L2lmcmFtZT4=="));</script> </div> </div> </div> ''' # 提取Base64编码串 b64_result = re.search(r'document\.write\(Base64\.decode\("([^"]+)"\)\)', raw_page_content) if not b64_result: print("无匹配的Base64内容") exit() base64_str = b64_result.group(1) # 解码得到iframe片段 decoded_iframe = base64.b64decode(base64_str).decode('utf-8') # 提取目标URL url_result = re.search(r'<iframe\s+[^>]*src=["\']([^"\']+)["\']', decoded_iframe) if url_result: target_url = url_result.group(1) print(target_url)
关键注意点
- 正则匹配特殊字符需要转义:
.、(、)属于正则语法保留字符,匹配原生内容时必须加反斜杠转义 - 原代码存在变量顺序错误:未给
url变量赋值就调用base64.b64decode(url),会直接触发未定义错误 - 提取src的正则增加了
[^>]*匹配src之前的其他属性,兼容性更强,可适配不同属性顺序的iframe标签
内容的提问来源于stack exchange,提问作者user3654374
相关产品推荐
相关产品推荐

