如何从 newspaper3k 对象中删除不需要的 类 和标签?

How do I remove unwanted classes and tags from newspaper3k object?

我想提取新闻文章内容,我目前正在使用 newspaper3k 库:

a = Article(url, memoize_articles=False, language='en')
a.download()
a.parse()
content = a.text

但是对于一些网站来说,有一些不需要的元素,比如广告和图片中的文字。所以我想删除那些不需要的元素和文本。有没有办法从这些标签和 类?

中删除所有内容

如果你想为特定的网站做,你可以使用a.top_node,找到广告的XPath或CSS选择器,然后删除它们。

ads = a.top_node.xpath("./foo")  # find a proper selector
for ad in ads:
    ad.getparent().remove(ad)

# and now conver top_node to text again somehow, probably using
# OutputFormatter

https://github.com/codelucas/newspaper/blob/56de65af9efbfea6293c82c0b1821e2ca9fbddaa/newspaper/article.py#L281

也可以实现自定义 DocumentCleaner 并将此逻辑放在那里。

总的来说,这是一个难题,可能是文章提取中最难的一个,如果您想以一种通用且健壮的方式来做,而不需要为每个网站编写和维护规则。开源库通常可以找到质量合理的主要内容,但它们在从文章正文中排除多余内容方面表现不佳。请参阅 https://github.com/scrapinghub/article-extraction-benchmark and https://github.com/scrapinghub/article-extraction-benchmark/releases/download/v1.0.0/paper-v1.0.0.pdf 报告。

Scrapinghub(我在那里工作)的 AutoExtract 等商业工具解决了这个问题;他们使用计算机视觉和机器学习,否则很难可靠地解决这个问题。