使用BeautifulSoup抓取spys.one免费HTTPS代理无法获取端口号求助
问题原因
端口号由页面内嵌JavaScript动态计算生成,BeautifulSoup仅能解析静态HTML源码,无法执行JS逻辑,因此无法直接提取到端口。
方案1:使用支持JS渲染的requests-html库直接获取渲染后的完整内容
无需手动破解JS加密逻辑,直接模拟浏览器执行JS后提取内容,实现成本最低。
首先安装依赖:
pip install requests-html
完整可运行代码:
from requests_html import HTMLSession HEADER = {"ACCEPT-LANGUAGE": "en-US,en;q=0.9", "USER-AGENT": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/92.0.4515.159 Safari/537.36"} session = HTMLSession() response = session.get(url="https://spys.one/en/https-ssl-proxy", headers=HEADER) # 等待页面JS渲染完成,首次运行会自动下载Chromium内核 response.html.render(timeout=20) proxy_list = [] all_spy14 = response.html.find("font.spy14") for tag in all_spy14: text = tag.text.strip() if "." in text and ":" in text and "(" not in text: proxy_list.append(text) print(proxy_list) session.close()
方案2:手动解析JS逻辑计算端口(无需渲染,性能更高)
如果不想引入渲染依赖,可以手动提取页面加密变量,计算端口值。
依赖安装:
pip install PyExecJS
核心代码:
import re import execjs import requests from bs4 import BeautifulSoup HEADER = {"ACCEPT-LANGUAGE": "en-US,en;q=0.9", "USER-AGENT": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/92.0.4515.159 Safari/537.36"} response = requests.get(url="https://spys.one/en/https-ssl-proxy", headers=HEADER) response.raise_for_status() soup = BeautifulSoup(response.text, "lxml") # 提取页面所有加密变量 js_vars = re.findall(r'[a-zA-Z0-9]+=[0-9]+;', response.text) js_context = execjs.compile(""" %s function calc(expr) { return eval(expr); } """ % ("\n".join(js_vars))) proxy_list = [] all_ips = soup.find_all("font", attrs={"class": "spy14"}) for ip_tag in all_ips: ip = ip_tag.contents[0].strip() if "." not in ip or "(" in ip: continue # 提取端口计算表达式 script = ip_tag.find("script") if not script: continue exprs = re.search(r'\+ \((.*?)\)\+ \((.*?)\)\+ \((.*?)\)\+ \((.*?)\)', script.string).groups() port = "".join([str(js_context.call("calc", e)) for e in exprs]) proxy_list.append(f"{ip}:{port}") print(proxy_list)
注意:该站点存在反爬限制,请求频率不要过高,IP被封禁后将无法正常获取数据。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

