如何从 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
也可以实现自定义 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 等商业工具解决了这个问题;他们使用计算机视觉和机器学习,否则很难可靠地解决这个问题。
我想提取新闻文章内容,我目前正在使用 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
也可以实现自定义 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 等商业工具解决了这个问题;他们使用计算机视觉和机器学习,否则很难可靠地解决这个问题。