Eig*_*lue 5 python datetime python-newspaper
我最近一直在使用报纸图书馆。我发现的唯一问题是我什么时候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')
Run Code Online (Sandbox Code Playgroud)
我正在浏览一堆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
Run Code Online (Sandbox Code Playgroud)
所有其他功能均按预期运行。该站点的文档中有一个示例,
>>> article.publish_date
datetime.datetime(2013, 12, 30 0, 0)
Run Code Online (Sandbox Code Playgroud)
我很确定我正在这样做。我不确定是否有人看我的问题。
我 100% 确定您在过去 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
Run Code Online (Sandbox Code Playgroud)
如果报纸确实在 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'},
Run Code Online (Sandbox Code Playgroud)
福克斯新闻将其日期存储在元标记部分中,但存储在报纸不会查询的标记中。要从福克斯新闻文章中提取日期,您可以这样做:
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'}
Run Code Online (Sandbox Code Playgroud)
有时,某个来源的发布日期会出现在报纸不予关注的部分。当发生这种情况时,您必须在报纸周围包装一些额外的代码来获取日期。
例如,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']
Run Code Online (Sandbox Code Playgroud)
我在 GitHub 上发布了一份报纸使用文档,其中讨论了围绕该库的各种收集策略和其他主题。
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |