Fix: zhihu_article_crawler.py 强制更新 MediaCrawler 配置,避免爬取错误文章
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user