奇安信攻防社区文章转换工具
字数 1170 2025-08-07 08:22:15
奇安信攻防社区文章转换工具使用教程
工具概述
奇安信攻防社区文章转换工具是一个Python脚本,旨在解决在奇安信攻防社区编写文章时上传本地图片的繁琐问题。该工具能够自动将本地Markdown文件中的图片上传至社区图床,并生成包含正确图片链接的新Markdown文件。
工具特点
- 解决在线编辑框图片上传后自动定位到文章开头的问题
- 支持批量处理多个Markdown文件
- 自动识别并上传本地图片到社区图床
- 生成可直接复制到社区编辑器的Markdown文件
适用人群
- 喜欢在本地使用Typora等Markdown编辑器写作的安全研究人员
- 需要频繁在奇安信攻防社区发布技术文章的用户
- 希望提高写作效率的安全从业者
工具结构
工具包含以下文件和目录:
├── old_file/ # 存放原始Markdown文件
├── new_file/ # 存放转换后的Markdown文件
├── config.ini # 配置文件
└── convert.py # 主脚本文件
配置方法
-
在
config.ini文件中填写账号信息:[settings] X-CSRF-TOKEN = your_csrf_token cookie = your_cookie -
注意事项:
- 如果cookie中包含URL编码字符,需要先进行URL解码再填写
- 可以通过浏览器开发者工具获取这些信息
使用步骤
1. 准备Markdown文件
- 将本地编写的Markdown文件放入
old_file目录 - 确保Typora的图片设置符合以下规则:
- 使用相对路径
- 图片保存在与Markdown文件同名的
.assets目录下 - 例如:
filename.md的图片应保存在filename.assets/目录中
2. 运行脚本
执行主脚本:
python convert.py
3. 获取转换结果
转换后的Markdown文件将生成在new_file目录中,可直接复制内容到奇安信攻防社区编辑器发布。
技术实现原理
1. 文件读取
def old_file_read(file_name):
file = open("./old_file/"+file_name, 'r', encoding="utf-8").read()
file = urllib.parse.unquote(file)
return file
- 读取原始Markdown文件内容
- 对文件内容进行URL解码
2. 图片路径提取
def get_image(file_name):
short_file_name = file_name.split(".")[0]
file_content = old_file_read(file_name)
img_pattern = r'(!
$$
.*?
$$
${0}\.assets/image-.*?.png$)'.format(short_file_name)
image_list = re.findall(img_pattern, file_content)
return image_list
- 使用正则表达式匹配Markdown中的图片语法
- 提取所有本地图片路径
3. 图片上传
def upload_img(file_name):
# 获取图片列表
img_list = get_image(file_name)
# 准备请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0)...",
"Host": "forum.butian.net",
"X-CSRF-TOKEN": config['settings']['X-CSRF-TOKEN'],
"Cookie": config['settings']['cookie']
}
# 上传每张图片
for i in dir_list:
res = requests.post(url="https://forum.butian.net/image/uploadS3",
headers=headers,
files={"file": open(real_file,"rb")},
verify=False)
img_url = res.text
# 构造新的Markdown图片语法
img_path = f""
- 使用requests库上传图片到社区图床
- 从响应中获取图片URL
- 构造新的Markdown图片语法
4. 内容替换
def custom_make_translation(text, translation):
regex = re.compile('|'.join(map(re.escape, translation)))
return regex.sub(lambda match: translation[match.group(0)], text)
def create_file(file_name):
# 读取原始内容
content = old_file_read(file_name)
# 如果有图片则进行替换
if img_list:
dicts = dict()
for i,j in zip(img_list,path_list):
dicts[i]=j
content = custom_make_translation(content, dicts)
# 写入新文件
new_file = open("./new_file/"+file_name, 'w')
new_file.write(content)
- 使用字典建立原始图片语法和新图片语法的映射关系
- 使用正则表达式进行批量替换
- 生成转换后的Markdown文件
常见问题解决
-
cookie无效:
- 检查cookie是否过期
- 确保cookie已进行URL解码
-
图片上传失败:
- 检查网络连接
- 确认X-CSRF-TOKEN和cookie配置正确
- 确保图片路径符合要求
-
脚本不工作:
- 检查Python环境是否安装正确
- 确保依赖库(requests, re, configparser等)已安装
项目地址
工具已开源在GitHub:https://github.com/dota-st/QaxArticle
总结
该工具通过自动化图片上传和链接替换过程,显著提高了在奇安信攻防社区发布文章的效率和体验。其设计思路也可作为开发类似工具的参考,展示了如何通过Python脚本解决实际工作中的痛点问题。