Fix: zhihu_article_crawler.py 强制更新 MediaCrawler 配置,避免爬取错误文章

This commit is contained in:
2026-02-27 20:21:57 +08:00
parent 193d2b375d
commit 727cfc183a
+31 -10
View File
@@ -6,6 +6,7 @@
import argparse import argparse
import json import json
import os import os
import re
import sys import sys
import subprocess import subprocess
import shutil import shutil
@@ -62,16 +63,36 @@ def crawl_zhihu_article(article_url: str, output_dir: Path) -> dict:
with open(config_file) as f: with open(config_file) as f:
config_content = f.read() config_content = f.read()
# 检查是否已配置指定 ID # 强制更新配置中的 ID 列表(每次都更新,确保爬取正确的文章)
if "ZHIHU_SPECIFIED_ID_LIST" not in config_content or "[]" in config_content: article_id = article_url.split("/")[-1]
# 需要配置文章 URL
article_id = article_url.split("/")[-1] # 使用正则表达式替换整个 ZHIHU_SPECIFIED_ID_LIST 部分
new_config = config_content.replace( pattern = r'(ZHIHU_SPECIFIED_ID_LIST\s*=\s*\[)([\s\S]*?)(\])'
'ZHIHU_SPECIFIED_ID_LIST = []', replacement = f'\\1\n "{article_url}", # article\n\\3'
f'ZHIHU_SPECIFIED_ID_LIST = ["{article_url}"]'
) new_config = re.sub(pattern, replacement, config_content)
with open(config_file, "w") as f:
f.write(new_config) # 如果正则替换失败(没有匹配到),使用简单替换
if new_config == config_content:
# 直接替换整个配置项
if 'ZHIHU_SPECIFIED_ID_LIST' in config_content:
# 找到配置项的范围并替换
lines = config_content.split('\n')
new_lines = []
in_list = False
for line in lines:
if 'ZHIHU_SPECIFIED_ID_LIST' in line and '=' in line:
new_lines.append(f'ZHIHU_SPECIFIED_ID_LIST = ["{article_url}", # article')
in_list = True
elif in_list and line.strip().startswith(']'):
new_lines.append(line)
in_list = False
elif not in_list:
new_lines.append(line)
new_config = '\n'.join(new_lines)
with open(config_file, "w") as f:
f.write(new_config)
# 运行 MediaCrawler # 运行 MediaCrawler
env = os.environ.copy() env = os.environ.copy()