快速入门
急于开始吗?本页面提供了如何开始使用newspaper的详细介绍。这里假设你已经安装了newspaper。如果尚未安装,请前往Installation部分。
构建新闻源
Source 对象是像CNN或ESPN这样的在线新闻媒体网站的抽象。
您可以通过两种不同的方式初始化它们。
为新闻站点构建一个Source对象将会为您提取其类别、订阅源、文章、品牌和描述。
您还可以无缝提供配置参数
例如 language、browser_user_agent 等。
请导航至 advanced 部分了解详情。
import newspaper
cnn_paper = newspaper.build('http://cnn.com')
other_paper = newspaper.build('http://www.lemonde.fr/', language='fr')
从新闻源提取文章
每个新闻源都有一套近期文章,主要出现在首页和分类页面中。Source对象将提取这些文章的引用,并将其存储为Article对象列表,位于其Source.articles属性中。
以下示例假设新闻源已经初始化并构建完成。
import newspaper
cnn_paper = newspaper.build('http://cnn.com')
for article in cnn_paper.articles:
print(article.url)
# 'http://www.cnn.com/2013/11/27/justice/tucson-arizona-captive-girls/'
# 'http://www.cnn.com/2013/12/11/us/texas-teen-dwi-wreck/index.html'
...
print(cnn_paper.size()) # cnn has 3100 articles
# 3100
文章缓存
默认情况下,newspaper会缓存所有先前提取的文章,并且不会重新下载任何已经提取过的文章。
此功能旨在防止重复文章并提高提取速度。 例如,如果您对同一新闻源运行两次构建命令,第二次 它只会下载并解析新文章:
cbs_paper = newspaper.build('http://cbs.com')
cbs_paper.size()
# 1030
cbs_paper = newspaper.build('http://cbs.com')
cbs_paper.size()
# 2
cbs_paper.size()的返回值从1030变为2,因为首次抓取cbs时我们发现了1030篇文章。但在第二次抓取时,我们会排除所有已被抓取过的文章。
这意味着自我们首次提取以来,仅发布了2篇新文章。
您可以通过将memoize_articles参数设置为False来禁用此功能。
这也可以通过将Configuration对象的memoize_articles属性设置为False来实现。更多示例可在advanced部分找到。
import newspaper
cbs_paper = newspaper.build('http://cbs.com', memoize_articles=False)
cbs_paper.size()
# 1030
cbs_paper = newspaper.build('http://cbs.com', memoize_articles=False)
cbs_paper.size()
# 1030
提取来源类别
Source对象的一个重要特性是能够从新闻来源的主页提取网站类别。这样您就可以从特定类别中提取文章。
for category in cnn_paper.category_urls():
print(category)
# 'http://lifestyle.cnn.com'
# 'http://cnn.com/world'
# 'http://tech.cnn.com'
...
提取源信息流
RSS源在新闻生态系统中扮演着重要角色。它们使得新闻能够在网络间传播和分享。Source对象将提取RSS源
for feed_url in cnn_paper.feed_urls():
print(feed_url)
# 'http://rss.cnn.com/rss/cnn_crime.rss'
# 'http://rss.cnn.com/rss/cnn_tech.rss'
...
提取来源品牌与描述
你可以使用Source对象来提取来源网站的基础名称(例如从bbc.co.uk中提取bbc)以及从已知的元标签中提取其描述
print(cnn_paper.brand)
# 'cnn'
print(cnn_paper.description)
# 'CNN.com delivers the latest breaking news and information on the latest...'
提取单个新闻文章
文章对象是新闻文章(新闻报道)的抽象表示。
例如,一个新闻Source是CNN (cnn.com),一篇新闻文章是
包含新闻报道的特定链接,比如https://edition.cnn.com/2023/11/09/tech/…
您可以使用来自现有(且已初始化)新闻Source的任何Article
或单独使用Article对象。只需传入文章URL,
并调用Article.download()和Article.parse()。
您也可以使用newspaper的快捷调用newspaper.article(),
它将为您创建Article对象,
并调用Article.download()和Article.parse()。
引用来自Source对象的文章:
first_article = cnn_paper.articles[0]
或者,单独初始化一个 Article 对象:
first_article = newspaper.Article(url="http://www.lemonde.fr/...", language='fr')
所有适用于Source对象的初始化参数同样适用于Article对象。
但存在一些差异。例如,title参数仅适用于Article对象。
忽略特定内容类型对于Source对象和Article对象
使用ignored_content_types_defaults参数, 可以忽略特定内容类型
对于Source对象和Article对象。此参数也可作为
Configuration对象的属性使用。
您可以提供一个内容类型及其占位符值的字典。任何具有该内容类型的文章将被忽略,占位符值将用于替代实际内容。
import newspaper
pdf_defaults = {"application/pdf": "%PDF-",
"application/x-pdf": "%PDF-",
"application/x-bzpdf": "%PDF-",
"application/x-gzpdf": "%PDF-"}
pdf_article = newspaper.article(url='https://www.adobe.com/pdf/pdfs/ISO32000-1PublicPatentLicense.pdf',
ignored_content_types_defaults=pdf_defaults)
print(pdf_article.html)
# %PDF-
最重要的Article方法
Article提取的步骤如下:
下载文章
一个Article刚初始化时不会有html、标题或文本。你必须先调用download()。下载也可以以多线程方式进行。查看advanced部分获取更多详情。
first_article = cnn_paper.articles[0]
first_article.download()
print(first_article.html)
# '<!DOCTYPE HTML><html itemscope itemtype="http://...'
print(cnn_paper.articles[7].html)
# will fail, since article is not downloaded yet
解析文章
为了从文章中解析有意义的纯文本,提取其标题、发布日期、作者、顶部图片等,我们必须对其调用parse()。
如果在download()之前调用parse(),它将抛出ArticleException。
first_article.parse()
print(first_article.text)
# 'Three sisters who were imprisoned for possibly...'
print(first_article.top_image)
# 'http://some.cdn.com/3424hfd4565sdfgdg436/
print(first_article.authors)
# ['Eliott C. McLaughlin', 'Some CoAuthor']
print(first_article.title)
# u'Police: 3 sisters imprisoned in Tucson home'
print(first_article.images)
# ['url_to_img_1', 'url_to_img_2', 'url_to_img_3', ...]
print(first_article.movies)
# ['url_to_youtube_link_1', ...] # youtube, vimeo, etc
对文章执行自然语言处理
最后,您可以处理上面获取的文本,并使用nlp()方法提取一些自然语言特征。这将填充文章的summary和keywords属性。
注意: nlp() 是一个计算成本很高的操作。建议仅在需要时使用,不建议在 Source 对象中的所有文章上运行
在调用nlp()之前,您必须已对文章调用了download()和parse()。
在当前版本中,nlp()功能仅支持西方语言。
first_article.nlp()
print(first_article.summary)
# '...imprisoned for possibly a constant barrage...'
print(first_article.keywords)
# ['music', 'Tucson', ... ]
print(cnn_paper.articles[100].nlp()) # fail, not been downloaded yet
# Traceback (...
# ArticleException: You must parse an article before you try to..
其他方法
以下是一些随机但希望有用的功能!hot()通过公共API返回谷歌上的热门搜索词列表。popular_urls()返回流行新闻源URL列表。以防您在选择新闻源时需要帮助!
import newspaper
newspaper.hot()
# ['Ned Vizzini', Brian Boitano', Crossword Inventor', 'Alex & Sierra', ... ]
newspaper.popular_urls()
# ['http://slate.com', 'http://cnn.com', 'http://huffingtonpost.com', ... ]