
首先我们要下载网页数据,选用Python最常用抓网页库 Requests
- 我们使用 github的events 举例
requests
库简单的使用,实际使用订阅URL
import requests
url = 'https://api.github.com/events'
r = requests.get(url)

- 如图,开启
Python Shell
命令行,输入上面三行代码,网页数据就下载到本地内存中了 - 输入
r.txet
就能显示网页的文本信息,本例获取的是 json数据
实际订阅数据是 base64
编码的加密数据,我们需要解码才能看到信息
import base64
s = base64.b64decode(r.text).decode('ascii')
print(s)
vms = s.split('\n')

base64
解码也很简单,使用前先导入库 import base64
,然后使用 base64.b64decode
解码- 变量
s
就是解码订阅后的文本, print(s)
,就能把节点配置分行打印出来了 - 如图
s[:100]
只显示前100个字节文本,再使用 s.split('\n')
把节点分离保存的 vms
数组里 - 命令
vms[0]
是第一个节点的数据,检查比较得知,我们获得正确
转传成二维码其实也是很简单,需要 QRCode
库
import qrcode
i=7
img = qrcode.make(vms[i])
img.save('vms_007.png')

- 如图,接着输入上面代码,使用
qrcode.make
函数把文本转换成图像, save
保存成 png 格式 - 变量
i=7
,用来选择节点序号
最后完成的Python脚本: QRCode把订阅转换成二维码
- 实际脚本在增加了在图片添加文本信息,用来区别协议节点
- 添加的函数代码中都有注释
import requests, base64, re , qrcode, io
from PIL import Image, ImageDraw, ImageFont
""" # 图片转RGB # 创建一个可以在给定图像上绘图的对象
# 字体的格式,中文要中文字体 # 绘制文本 """
def image_add_text(img, text, left, top, text_color=(255, 0, 0), text_size=13):
img = img.convert("RGB")
draw = ImageDraw.Draw(img)
fontStyle = ImageFont.truetype("FreeMono.ttf", text_size, encoding="utf-8")
draw.text((left, top), text, text_color, font=fontStyle)
return img
def print_md(text, file):
print("\n" % (text , file))
# 获取订阅表,Base64解码,节点分离
url = 'https://github.公益项目/USA'
r = requests.get(url)
s = base64.b64decode(r.text).decode('ascii')
vms = s.split('\n')
# 节点配置转换 Qrcode 二维码
def make_qrc(vms , i):
img = qrcode.make(vms[i])
new_size = (int(img.size[0]/2), int(img.size[1]/2))
img = img.resize(new_size)
text = vms[i][:32]
img = image_add_text(img, text , 2, 2 , text_color=(0,0,0), text_size=18)
img = img.convert("L")
return img
# 遍历节点全转 Qrcode
for i in range(len(vms)-1):
img = make_qrc(vms, i)
text = vms[i][:10].replace("://", "_")
file = str(i) + '_'+ text +'.png'
img.save('./png/' + file)
print_md(vms[i][:32] , file)
除了转换二维码,我还可以二次解码节点配置信息
import re, json
for vmess in vms :
res = re.match(r"vmess://(.*)", vmess)
try :
json_str = base64.b64decode(res[1]).decode('utf-8')
data = json.loads(json_str)
print("UUID: %s\tAdd: %s:%s\n" % (data['id'], data['add'], data['port']) )
except:
pass

- 使用
regex
正则表达式库 和 json
轻量级数据交换格式库