如何提取网页script中的xmlHttp.open链接?BeautifulSoup无法定位跳转链接
问题:提取script代码中的XMLHttpRequest请求链接
我尝试用以下代码获取跳转链接:
r = c.get(url, headers=ua, timeout=15, allow_redirects=True) soup = BeautifulSoup(r.content, 'html.parser') print(soup)
执行后返回的内容包含一段script代码:
<script> window.location.href = 'https://t.me/Claim_Litecoins_bot'; var xmlHttp = new XMLHttpRequest(); xmlHttp.open('GET', 'https://telegramfaucet.me/tonclick/Visit.php?c=3lj8a7rxq0', false); xmlHttp.send(null); window.location.href = 'https://t.me/Claim_Litecoins_bot'; </script>
我想获取xmlHttp.open中的目标链接,但目前用if soup.find_all("a", href=True): print(soup)的方法找不到,因为链接不在a标签里,请问该怎么解决?
解决方案
你当前的方法只针对HTML中的<a>标签,但目标链接藏在JavaScript代码里,需要换思路处理:
步骤1:定位目标script标签并提取文本
用BeautifulSoup找到包含xmlHttp.open的script标签,获取里面的JS代码内容。步骤2:用正则表达式匹配链接
针对xmlHttp.open('GET', '链接地址', false)的格式,用正则提取单引号包裹的链接字符串。
具体代码示例
import re from bs4 import BeautifulSoup # 假设已获取到响应内容r.content soup = BeautifulSoup(r.content, 'html.parser') # 筛选包含XMLHttpRequest的script标签 target_script = None for script in soup.find_all('script'): if 'xmlHttp.open' in script.text: target_script = script.text break if target_script: # 正则匹配目标链接 link_match = re.search(r"xmlHttp\.open\('GET', '(.*?)', false\)", target_script) if link_match: target_url = link_match.group(1) print("提取到的链接:", target_url) else: print("未匹配到目标链接") else: print("未找到包含XMLHttpRequest的script标签")
说明
- 正则表达式
r"xmlHttp\.open\('GET', '(.*?)', false\)"采用非贪婪匹配,能精准提取xmlHttp.open第二个参数里的链接地址。 - 通过判断
'xmlHttp.open' in script.text可以快速筛选出目标script标签,避免无效遍历。
内容的提问来源于stack exchange,提问作者user22268906
相关产品推荐
相关产品推荐

