CuteCuteYu/the_evil

GitHub: CuteCuteYu/the_evil

一款结合社交媒体数据爬取与AI大模型分析的社会工程学目标画像工具,支持多维度自动化情报分析并生成结构化报告。

Stars: 10 | Forks: 0

# the-evil(至阴至邪) 微博数据爬取与AI智能分析工具 作者:CuteCuteYu ## 项目简介 **the-evil** 是一个模块化的微博数据爬取和AI智能分析工具,支持: - 爬取微博用户数据(使用 weibo.cn 移动端API) - 7个并行AI分析任务(使用GLM-4模型) - 生成Markdown格式的详细分析报告 ## 目录结构 the-evil/ ├── src/the_evil/ │ ├── the_evil.py # 主程序入口 │ ├── __init__.py # 包初始化 │ └── modules/ │ ├── __init__.py # 模块初始化 │ ├── crawlers.py # 爬虫模块(可扩展到其他网站) │ ├── ai_analyzer.py # AI分析器(并行任务执行) │ └── prompts.py # AI分析提示词(7种分析类型) ├── main.py # 程序入口 ├── pyproject.toml # 项目配置 └── README.md # 说明文档 ## 环境要求 - Python 3.13+ - UV 包管理器 ## 安装 # 使用UV安装依赖 uv sync ## 使用方法 ### 1. 获取Cookie 登录微博后,按以下步骤获取Cookie: 1. 打开浏览器,访问 [weibo.cn](https://weibo.cn) 2. 登录你的微博账号 3. 按 **F12** 打开开发者工具 4. 切换到 **Network(网络)** 标签 5. 刷新页面,在请求列表中找到任意一个请求 6. 点击该请求,在右侧详情中找到 **Request Headers** 7. 找到 `Cookie:` 后面的内容,复制完整Cookie字符串 ### 2. 设置环境变量 # 设置OpenAI API密钥 export OPENAI_API_KEY="your_api_key" # 设置API地址(可选) export OPENAI_BASE_URL="https://open.bigmodel.cn/api/coding/paas/v4" ### 3. 模型选择设置 程序支持多种AI模型,可以通过环境变量配置: #### 默认模型(智谱GLM-4) export OPENAI_API_KEY="your_zhipu_api_key" export OPENAI_BASE_URL="https://open.bigmodel.cn/api/coding/paas/v4" #### 支持的模型 本项目仅支持兼容 OpenAI Python SDK 格式的 API(必须为 `https://xxx/v1` 格式)。只要 API 符合 OpenAI 格式,都可以正常使用,包括: - 智谱 GLM 系列模型(如 glm-4, glm-4-flash) - OpenAI GPT 系列模型(如 gpt-4, gpt-4o) - Anthropic Claude 系列模型(如 claude-3) - 其他兼容 OpenAI 格式的 API(如硅基流动、阿里的通义等) #### 自定义模型示例 本项目通过设置 `base_url` 和 `api_key` 环境变量来使用不同的 AI 模型: # 使用智谱 GLM-4-Flash(免费快速) export OPENAI_API_KEY="your_zhipu_api_key" export OPENAI_BASE_URL="https://open.bigmodel.cn/api/coding/paas/v4" # 或使用 OpenAI GPT-4 export OPENAI_API_KEY="sk-xxx" export OPENAI_BASE_URL="https://api.openai.com/v1" #### 代码中修改默认模型 在 `modules/ai_analyzer.py` 中修改默认模型: # 修改 call_ai 方法的 model 参数 def call_ai(self, system_prompt, user_prompt, model="glm-4-flash", temperature=0.7): # 将 model="glm-4" 改为 "glm-4-flash" 或其他模型 pass ### 4. 运行程序 # 基本用法(所有参数必填) uv run python main.py # 示例:爬取胡歌的微博 uv run python main.py "你的Cookie" 1223178222 output.csv 100 glm-4 "your_api_key" "https://open.bigmodel.cn/api/coding/paas/v4" ### 参数说明 | 参数 | 说明 | 必填 | |------|------|------| | cookie | 微博登录Cookie | 是 | | uid | 微博用户ID | 是 | | output_file | 输出CSV文件名 | 是 | | max_weibos | 最大获取微博数(建议100,0表示全部) | 是 | | model | AI模型名称 | 是 | | api_key | API密钥 | 是 | | base_url | API地址 | 是 | ## 获取UID 在微博用户主页的URL中可以找到UID,例如: - `https://weibo.com/u/1223178222` → UID = 1223178222 - `https://weibo.com/1223178222` → UID = 1223178222 ## AI分析功能 程序会自动进行7项并行AI分析: 1. **统计分析** - 微博数量、互动数据、发布时间分布等 2. **性格分析** - 从社会工程学角度分析用户性格特征 3. **兴趣分析** - 从情报收集角度分析用户兴趣爱好 4. **轨迹分析** - 从OSINT角度分析用户活动轨迹和生活习惯 5. **社交分析** - 从社交网络角度分析用户社交圈子 6. **情感分析** - 从心理分析角度用户情感表达方式 7. **综合报告** - 生成完整的Markdown分析报告 ### 分析依据要求 每个分析结论都要求包含"**分析依据**"部分,说明: - 数据来源(CSV的哪一列) - 具体证据(引用具体微博内容) - 分析逻辑 ## 输出文件 - **CSV文件** - 微博原始数据(如文件已存在则自动跳过爬取) - **Markdown报告** - AI分析结果 ### 测试文件示例 - CSV数据:[胡歌_the_evil.csv](胡歌_the_evil.csv) - 分析报告:[胡歌_the_evil_report.md](胡歌_the_evil_report.md) ## 模块化设计 ### 扩展新的爬虫 本项目采用模块化设计,支持扩展新的网站爬虫。以下是添加自定义爬虫的详细步骤。 #### 1. 数据模型 项目定义了统一的数据模型,用于不同平台的数据标准化: # 微博数据模型 class WeiboData: id: str # 内容ID content: str # 内容文本 is_original: bool # 是否原创 publish_time: str # 发布时间 publish_tool: str # 发布工具 up_num: int # 点赞数 retweet_num: int # 转发数 comment_num: int # 评论数 publish_place: str # 发布位置 picture_url: str # 图片URL video_url: str # 视频URL # 用户信息模型 class UserInfo: id: str # 用户ID nickname: str # 昵称 weibo_num: int # 内容数 following: int # 关注数 followers: int # 粉丝数 gender: str # 性别 location: str # 所在地 birthday: str # 生日 description: str # 简介 #### 2. 创建爬虫类 在 `modules/crawlers.py` 中创建新的爬虫类,继承 `BaseCrawler`: class DouyinCrawler(BaseCrawler): """抖音爬虫类""" def __init__(self, cookie): super().__init__(cookie) self.base_url = "https://www.douyin.com" def get_user_info(self, user_id): """ 获取用户信息 参数: user_id: 用户ID 返回: UserInfo对象 """ url = f"{self.base_url}/user/{user_id}" # 实现获取用户信息的逻辑 selector = self._fetch_page(url) # 解析用户信息并返回UserInfo对象 nickname = selector.xpath('//span[@class="nickname"]/text()')[0] # ... 其他字段解析 return UserInfo( id=user_id, nickname=nickname, # ... 其他参数 ) def get_weibos(self, user_id, max_count=0): """ 获取用户内容列表 参数: user_id: 用户ID max_count: 最大获取数量,0表示全部 返回: WeiboData对象列表 """ weibos = [] page = 1 while True: url = f"{self.base_url}/aweme/v1/web/aweme/v1/web/aweme/post/?user_id={user_id}&cursor={page}" data = self._fetch_json(url) # 假设添加了_fetch_json方法 for item in data.get("aweme_list", []): weibo = self._parse_weibo(item) weibos.append(weibo) if max_count > 0 and len(weibos) >= max_count: return weibos if not data.get("has_more"): break page += 1 return weibos def _parse_weibo(self, item): """解析单条内容""" return WeiboData( id=item.get("aweme_id"), content=item.get("desc"), is_original=True, publish_time=item.get("create_time"), # ... 其他字段 ) #### 3. 注册爬虫 在 `create_crawler` 函数中注册新的爬虫: def create_crawler(platform, cookie): """ 创建爬虫实例 参数: platform: 平台名称,如"weibo"、"douyin" cookie: 登录cookie 返回: 对应的爬虫实例 """ crawlers = { "weibo": WeiboCrawler, "douyin": DouyinCrawler, # 添加新爬虫 "bilibili": BilibiliCrawler, # 再添加一个 } crawler_class = crawlers.get(platform.lower()) if not crawler_class: raise ValueError( f"不支持的平台: {platform},支持的平台: {list(crawlers.keys())}" ) return crawler_class(cookie) #### 4. 抽象方法说明 必须实现的抽象方法: | 方法 | 说明 | 返回值 | |------|------|--------| | `get_user_info(user_id)` | 获取用户基本信息 | `UserInfo` 对象 | | `get_weibos(user_id, max_count)` | 获取用户内容列表 | `List[WeiboData]` | #### 5. 辅助方法 `BaseCrawler` 提供的辅助方法: | 方法 | 说明 | |------|------| | `_build_headers()` | 构建请求头 | | `save_to_csv(user_info, weibos, output_file)` | 保存数据到CSV | #### 6. 完整示例:添加Twitter/X爬虫 class TwitterCrawler(BaseCrawler): """Twitter爬虫类""" def __init__(self, cookie): super().__init__(cookie) self.base_url = "https://twitter.com" def get_user_info(self, user_id): url = f"{self.base_url}/{user_id}" selector = self._fetch_page(url) nickname = selector.xpath('//div[@data-testid="UserName"]//span/text()')[0] # ... 获取其他信息 return UserInfo(id=user_id, nickname=nickname, ...) def get_weibos(self, user_id, max_count=0): weibos = [] # 实现获取推文列表的逻辑 return weibos 然后在 `create_crawler` 中注册即可使用: crawler = create_crawler("twitter", "your_cookie") user_info = crawler.get_user_info("elonmusk") tweets = crawler.get_weibos("elonmusk", max_count=100) ### 修改AI分析提示词 在 `modules/prompts.py` 中修改或添加新的提示词: NEW_ANALYSIS_SYSTEM_PROMPT = """你是一个xxx专家...""" NEW_ANALYSIS_USER_PROMPT = """请分析xxx...""" ## 注意事项 1. **Cookie有效期**:Cookie会过期,如遇到登录错误请重新获取 2. **请求频率**:程序已设置合理的请求间隔,避免被封禁 3. **数据安全**:请妥善保管Cookie,不要泄露给他人 4. **合规使用**:请遵守微博服务条款,仅用于学习研究 ## 版本历史 - v1.0.0 - 初始版本,支持微博数据爬取和7项AI分析 ## 许可证 仅供学习研究使用 ## Claude/OpenCode Skill 使用(必须使用二进制版本) ### 第一步:下载或编译二进制文件 #### 方式A:直接使用已编译的二进制文件 下载项目 release 中的 `the-evil.exe` 文件。 #### 方式B:自行编译二进制文件 # 1. 安装 PyInstaller uv pip install pyinstaller # 2. 编译项目 uv run pyinstaller the_evil.spec --noconfirm --distpath . # 3. 编译完成后,会在当前目录生成 the-evil.exe 文件 ### 第二步:添加到系统环境变量 将 `the-evil.exe` 所在目录添加到系统 PATH 环境变量: #### Windows PowerShell(管理员模式) # 假设 the-evil.exe 在 D:\code\python\the-evil 目录 $currentPath = [Environment]::GetEnvironmentVariable("Path", "Machine") [Environment]::SetEnvironmentVariable("Path", "$currentPath;D:\code\python\the-evil", "Machine") # 刷新环境变量 $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") #### Windows CMD # 假设 the-evil.exe 在 D:\code\python\the-evil 目录 setx PATH "%PATH%;D:\code\python\the-evil" /M #### 验证安装 # 在任意目录打开命令行,输入以下命令验证 the-evil.exe # 如果显示帮助信息,说明安装成功 ### 第三步:安装 Skill 将 `.claude/skills/the-evil` 目录复制到 Claude 的全局 skills 目录: # 复制 skill 目录到全局位置 cp -r .claude/skills/the-evil C:/Users/j4543/.claude/skills/ ### 使用 Skill 当在 Claude/OpenCode 中使用本项目时,AI 会自动加载 skill 并提供以下指导: - 检查项目目录是否正确 - **验证 the-evil.exe 是否在 PATH 中**(强制检查) - 提示用户使用二进制文件运行程序 ### Skill 功能 - 检测 the-evil.exe 是否存在于 PATH 中 - 如果不存在,提示用户按照上述步骤编译并添加到 PATH - 使用 `the-evil.exe` 命令执行程序
标签:AI智能分析, DLL 劫持, ESC4, ESC8, GLM-4, Markdown 报告生成, OSINT, POC工具, Python, the-evil, 代码示例, 大语言模型, 微博爬虫, 情报收集, 数据分析, 数据爬取, 文本分析, 无后门, 智谱AI, 漏洞挖掘, 漏洞研究, 用户画像分析, 目标分析, 社交媒体分析, 社会工程学, 自动化分析, 至阴至邪, 跨站脚本, 黑帽SEO分析