0

我正在尝试从使用名为Newspaper的 python 库生成的一组链接中进行解析

目标:

解析来自新闻站点主页(或特定页面,如类别)的每个链接。

问题:

  1. 尝试将“article_link”传递给“Article()”方法时,我生成了一个 AttributeError。
  2. 使用单独的代码解析来自“纽约时报”的单个链接,打印的文本不会打印整篇文章。

代码生成问题1:

import newspaper
from newspaper import Article

nyt_paper = newspaper.build(
    'http://nytimes.com/section/todayspaper', memoize_articles=False)
print(nyt_paper.size())

processed_link_list = []
for article_link in nyt_paper.articles:
    article = Article(url=article_link)
    article.download()
    article.html
    article.parse()
    print(article.authors)
    processed_link_list.append(article_link)

if len(nyt_paper.size()) is len(processed_link_list):
    print('All Links Processed')
else:
    print('All Links **NOT** Processed')

错误输出:

Traceback (most recent call last):
  File "nyt_today.py", line 31, in <module>
    article = Article(url=article_link)
  File "C:\...\lib\site-packages\newspaper\article.py", line 60, in __init__
    scheme = urls.get_scheme(url)
  File "C:\...\lib\site-packages\newspaper\urls.py", line 279, in get_scheme
    return urlparse(abs_url, **kwargs).scheme
  File "C:\...\lib\urllib\parse.py", line 367, in urlparse
    url, scheme, _coerce_result = _coerce_args(url, scheme)
  File "C:\...\lib\urllib\parse.py", line 123, in _coerce_args
    return _decode_args(args) + (_encode_result,)
  File "C:\...\lib\urllib\parse.py", line 107, in _decode_args
    return tuple(x.decode(encoding, errors) if x else '' for x in args)
  File "C:\...\lib\urllib\parse.py", line 107, in <genexpr>
    return tuple(x.decode(encoding, errors) if x else '' for x in args)
AttributeError: 'Article' object has no attribute 'decode'

代码生成问题2:

from newspaper import Article
from newspaper import fulltext
import requests

nyt_url = 'https://www.nytimes.com/2019/02/26/opinion/trump-kim-vietnam.html'
article = Article(nyt_url)
article.download()
print(article.html)
article.parse()
print(article.authors)
print(article.text)

我还尝试了文档中示例的这种“全文”方法来打印文本:

article_html = requests.get(nyt_url).text
full_text = fulltext(article_html)
print(full_text)

然而,尽管整篇文章文本输出到

print(article.html)

print(article.text)

不会全部打印出来。原始链接、HTML 输出和打印文本输出如下所示:

链接:https ://www.nytimes.com/2019/02/26/opinion/trump-kim-vietnam.html

Html 输出:查看此 pastebin 以获取截断的输出

印刷文字:见此印刷文字不印刷整篇文章

任何帮助将非常感激。

4

1 回答 1

0

自 2014 年以来,NYTimes 已更改其内部 html 结构。如果您尝试解析 2014 年之前发布的文章,Newspaper3K 将可以正常工作。

其他需要考虑的事项:

  • 1980 年的文章不可用。
  • 1970 年之前的文章没有数字化(1964 年除外)。
  • 1970-1979 年的文章有很多单词,中间用空格隔开。
  • 如果您使用 Newspaper3k 解析,几篇文章将仅包含“NYTimes.com 不再支持 Internet Explorer 9 或更早版本。请升级您的浏览器。”
  • 很多文章中间会插入以下文字:

"\n\n时事通讯注册 继续阅读主要故事 注册今天的观点时事通讯 每个工作日,都会收到来自 Op-Ed 专栏作家、《纽约时报》编辑委员会和来自世界各地的撰稿人的发人深省的评论。请确认您是不是机器人,请单击框。电子邮件地址无效。请重新输入。您必须选择要订阅的时事通讯。注册您将收到来自《纽约时报》的包含新闻内容、更新和促销的电子邮件。您可以选择退出随时。您同意接收《纽约时报》产品和服务的不定期更新和特别优惠。感谢您订阅。出现错误。请稍后重试。查看所有《纽约时报》新闻通讯。\n\n"

"\n\nNewsletter Sign Up Continue reading the main story 请通过单击框确认您不是机器人。电子邮件地址无效。请重新输入。您必须选择要订阅的时事通讯。注册您将收到包含以下内容的电子邮件来自《纽约时报》的新闻内容、更新和促销活动。您可以随时选择退出。您同意接收《纽约时报》产品和服务的不定期更新和特别优惠。感谢您订阅。出现错误。请请稍后再试。查看所有《纽约时报》时事通讯。\n"

  • 大多数博客(博客出现在 2010 年)也会插入不需要的文本。

如果您对 1990 年至 2016 年的数据感到满意,请查看本文中使用的数据集:https ://arxiv.org/abs/1703.00607可在线获取。

如果您需要更新的文章,我认为您应该编写自己的解析器。我正在努力,但我还没有完成。

于 2020-04-22T05:51:22.167 回答