You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Newspaper3k提取新闻内容时如何过滤无效URL并写入CSV

代码优化方案

你可以通过URL预校验+异常捕获的组合逻辑实现自动跳过无效URL,不会中断整个爬取流程,改动后的完整代码如下:

import csv
from newspaper import Config
from newspaper import Article
from os.path import exists

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0'

config = Config()
config.browser_user_agent = USER_AGENT
config.request_timeout = 10

urls = ['https://www.cnn.com/2021/10/25/tech/facebook-papers/index.html', 'http://cnn.com/date/2021-10-17', 'https://www.cnn.com/entertainment/live-news/rust-shooting-alec-baldwin-10-25-21/h_257c62772a2b69cb37db397592971b58']

# 提前处理文件表头,避免循环内重复判断
file_path = 'cnn_extraction_results.csv'
file_exists = exists(file_path)
headers = ['article title', 'article text']

if not file_exists:
    with open(file_path, 'w', newline='') as file:
        writer = csv.DictWriter(file, delimiter=',', lineterminator='\n', fieldnames=headers)
        writer.writeheader()

for url in urls:
    # 第一层过滤:预校验URL规则,直接跳过明显的非详情页链接
    if '/date/' in url:
        continue
    try:
        article = Article(url, config=config)
        article.download()
        article.parse()
        # 第二层过滤:解析后判断标题是否为空,过滤结构异常的页面
        if not article.title.strip():
            continue
    except:
        # 捕获所有请求、解析类异常,直接跳过当前链接
        continue
    
    # 仅有效内容写入文件
    with open(file_path, 'a', newline='') as file:
        writer = csv.DictWriter(file, delimiter=',', lineterminator='\n', fieldnames=headers)
        writer.writerow({'article title': article.title, 'article text': article.text})

主要改动说明

  • 新增URL预校验逻辑:提前过滤路径中带/date/的日期聚合页,你可以根据实际遇到的无效链接特征,补充更多需要过滤的关键词
  • 新增异常捕获逻辑:用try-except包裹页面下载、解析的核心步骤,请求超时、404、页面结构不符合新闻规范等异常情况都会直接跳过当前URL,不会中断整个爬取任务
  • 优化文件写入逻辑:把文件存在性判断和表头写入移到循环外部,避免每次遍历URL都重复判断,提升运行效率

内容的提问来源于stack exchange,提问作者Robbie Voort

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:24:02