报纸库中的出版日期总是返回None



我最近一直在使用报纸图书馆。我发现的唯一问题是,当我做article.publish_date时,我总是得到None

class NewsArticle:
    def __init__(self,url):
        self.article = Article(url)
        self.article.download()
        self.article.parse()
        self.article.nlp()
    def getKeywords(self):
        x = self.article.keywords
        for i in range(0,len(x)):
            x[i] = x[i].encode('ascii', 'ignore')
        return x
        return self.article.keywords
    def getSummary(self):
        return self.article.summary.encode('ascii', 'ignore')
    def getAuthors(self):
        x = self.article.authors
        for i in range(0,len(x)):
            x[i] = x[i].encode('ascii', 'ignore')
        return x
    def thumbnail_url(self):
        return self.article.top_image.encode('ascii', 'ignore')
    def date_made(self):
        print self.article.publish_date
        return self.article.publish_date
    def get_videos(self):
        x=self.article.movies
        for i in range(0,len(x)):
            x[i] = x[i].encode('ascii', 'ignore')
        return x
    def get_title(self):
        return self.article.title.encode('ascii','ignore')

我要讲一堆url。你可以看到我在返回publish_date之前打印了它。

我得到我之前说过的:

None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None

所有其他函数都按预期工作。该站点的文档查看了一个示例

>>> article.publish_date
datetime.datetime(2013, 12, 30 0, 0)

我很确定我正在做这件事。我不确定是否有人看到了我的问题。

我百分之百确信你们在过去的5年里已经解决了这个问题,但是我想把我对报纸的了解

这个Python库并不完美,因为它的设计是为了尽可能地获取特定元素,比如文章标题、作者姓名、出版日期和其他一些项。即使用最大的努力报纸也会错过不在其设计位置上的内容。

例如,这是从报纸的提取代码。

3 strategies for publishing date extraction. The strategies are descending in accuracy and the next strategy is only attempted if a preferred one fails.
1. Pubdate from URL
2. Pubdate from metadata
3. Raw regex searches in the HTML + added heuristics

如果newspaper确实在URL中找到了日期,它将移动到元标签,但只有这些:

PUBLISH_DATE_TAGS = [
            {'attribute': 'property', 'value': 'rnews:datePublished',
             'content': 'content'},
            {'attribute': 'property', 'value': 'article:published_time',
             'content': 'content'},
            {'attribute': 'name', 'value': 'OriginalPublicationDate',
             'content': 'content'},
            {'attribute': 'itemprop', 'value': 'datePublished',
             'content': 'datetime'},
            {'attribute': 'property', 'value': 'og:published_time',
             'content': 'content'},
            {'attribute': 'name', 'value': 'article_date_original',
             'content': 'content'},
            {'attribute': 'name', 'value': 'publication_date',
             'content': 'content'},
            {'attribute': 'name', 'value': 'sailthru.date',
             'content': 'content'},
            {'attribute': 'name', 'value': 'PublishDate',
             'content': 'content'},
            {'attribute': 'pubdate', 'value': 'pubdate',
             'content': 'datetime'},
            {'attribute': 'name', 'value': 'publish_date',
             'content': 'content'},

Fox news将他们的日期存储在元标记部分,但在newspaper不查询的标记中。要从Fox新闻文章中提取日期,您可以这样做:

article_meta_data = article.meta_data
article_published_date = str({value for (key, value) in article_meta_data.items() if key == 'dcterms.created'})
print(article_published_date)
{'2020-10-11T12:51:53-04:00'}

有时消息来源的发布日期在报纸没有看到的部分。当发生这种情况时,您必须在newspaper周围包装一些额外的代码来获取日期。

例如BBC将日期存储在脚本application/ld+json中。Newspaper不是用来查询或提取这个脚本的。要从BBC文章中提取日期,您可以这样做:

soup = BeautifulSoup(article.html, 'html.parser')
bbc_dictionary = json.loads("".join(soup.find("script", {"type":"application/ld+json"}).contents))
date_published = [value for (key, value) in bbc_dictionary.items() if key == 'datePublished']
print(date_published)
['2020-10-11T20:11:33.000Z']

我在GitHub上发布了一个报纸使用文档,讨论了围绕这个库的各种收集策略和其他主题。

相关内容

  • 没有找到相关文章

最新更新