图书馆:Newspaper(Newspaper3k)试图解析新闻(来源)网站主页上的链接

时间:2019-02-27 23:25:30

标签: python-3.x web-scraping python-newspaper

我正在尝试从使用名为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输出:see this pastebin for truncated output

打印的文本:see this printed text does not print the entire article

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

自2014年以来,NYTimes更改了其内部html结构。如果您尝试解析2014年之前发布的文章,则Newspaper3K会很好用。

要考虑的其他事项:

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

“ \ n \ n新闻通讯继续阅读主要新闻订阅《今日意见》新闻通讯每个工作日,请获得Op-Ed专栏作家,《泰晤士报》编辑委员会和世界各地杰出撰稿人的发人深省的评论。请验证您不是通过单击该框进行操作的人。无效的电子邮件地址。请重新输入。您必须选择要订阅的新闻简报。注册您将收到包含《纽约时报》新闻内容,更新和促销的电子邮件。随时选择退出。您同意偶尔收到有关《纽约时报》产品和服务的更新和特别优惠。感谢您的订阅。发生了错误。请稍后重试。查看所有《纽约时报》新闻通讯。\ n \ n“

“ \ n \ n通讯录注册继续阅读主要故事请单击框确认您不是机器人。无效的电子邮件地址。请重新输入。您必须选择要订阅的通讯。注册您将收到来自《纽约时报》的包含新闻内容,更新和促销的电子邮件。您可以随时选择退出。您同意偶尔收到有关《纽约时报》产品和服务的更新和特别优惠。感谢您的订阅。发生。请稍后再试。查看所有《纽约时报》新闻通讯。\ n“

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

如果您可以接受1990年至2016年的数据,请检查本文使用的数据集:https://arxiv.org/abs/1703.00607,该数据集可在线获得。

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