我想提取新闻文章的内容,目前我正在使用newspaper3k库:
a = Article(url, memoize_articles=False, language='en')
a.download()
a.parse()
content = a.text
但是对于一些网站来说,有一些不想要的元素,比如广告和图片中的文字。所以我想删除那些不需要的元素和文本。有没有办法从这些标签和类中删除所有内容?
发布于 2020-06-23 17:13:15
如果你想为一个特定的网站这样做,你可以使用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
还可以实现自定义DocumentCleaner并将此逻辑放在那里。
一般来说,这是一个很难的问题,可能是文章抽取中最难的一个问题,如果你想以一种通用和健壮的方式进行,而不为每个网站编写和维护规则的话。开源库通常可以找到质量合理的主要内容,但它们很难从文章正文中排除额外的内容。参见https://github.com/scrapinghub/article-extraction-benchmark和https://github.com/scrapinghub/article-extraction-benchmark/releases/download/v1.0.0/paper-v1.0.0.pdf报告。
像Scrapinghub的AutoExtract这样的商业工具(我在那里工作)解决了这个问题;它们使用计算机视觉和机器学习,否则很难可靠地解决这个问题。
https://stackoverflow.com/questions/62424600
复制相似问题