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

Python newspaper库无法提取部分URL的文章发布日期问题求助

问题:使用newspaper库无法提取部分新闻URL的发布日期
  • 现象:部分可正常访问(状态码200)的URL无法提取发布日期,同一域名下其他链接可正常提取,排除IP封禁,单独测试该URL仍失败
  • 测试URL:https://www.aljazeera.com/program/featured-documentaries/2020/12/29/lords-of-water-episode-one

测试代码

import os
import sys
from newspaper import Article   

def split(link):
        try:
            story = Article(link)
            story.download()
            story.parse()
            date_time = str(story.publish_date)
            split_date = date_time.split()  
            date = split_date[0]
            if date != "None":
                print(date)
        except:
            print("This URL did not return a published date. Try a different URL.")
            print(link)

if __name__ == "__main__":
        link = "https://www.aljazeera.com/program/featured-documentaries/2020/12/29/lords-of-water-episode-one"
        split(link)

运行输出

This URL did not return a published date. Try a different URL.
https://www.aljazeera.com/program/featured-documentaries/2020/12/29/lords-of-water-episode-one

解决方法

1. 手动解析页面元数据或HTML元素

newspaper的自动解析依赖标准页面元标签,部分页面的日期可能存放在非标准位置,可直接解析页面源码提取:

import os
import sys
from newspaper import Article
from bs4 import BeautifulSoup
import re

def split(link):
        try:
            story = Article(link)
            story.download()
            story.parse()
            
            # 优先尝试newspaper自动提取
            if story.publish_date:
                print(story.publish_date.strftime("%Y-%m-%d"))
                return
            
            # 手动解析Al Jazeera页面的meta标签
            soup = BeautifulSoup(story.html, "html.parser")
            date_meta = soup.find("meta", property="article:published_time")
            if date_meta:
                print(date_meta["content"].split("T")[0])
                return
            
            # 备选:从URL路径提取日期(该URL包含明确日期段)
            date_match = re.search(r"/(\d{4})/(\d{2})/(\d{2})/", link)
            if date_match:
                print(f"{date_match.group(1)}-{date_match.group(2)}-{date_match.group(3)}")
                return
            
            print("无法提取发布日期")
            print(link)
        except Exception as e:
            print(f"处理出错: {str(e)}")
            print(link)

if __name__ == "__main__":
        link = "https://www.aljazeera.com/program/featured-documentaries/2020/12/29/lords-of-water-episode-one"
        split(link)

2. 优化工具配置与版本

  • 升级至最新版newspaper3k:pip install --upgrade newspaper3k
  • 针对目标域名编写自定义提取规则,扩展库的解析逻辑,减少对通用规则的依赖。

3. 异常处理优化

原代码用except:捕获所有异常,不利于排查问题,建议改为捕获特定异常并打印错误信息,准确定位故障原因。


内容的提问来源于stack exchange,提问作者Sam Hall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:20:31