Как удалить ненужные классы и теги из объекта газета3k? - PullRequest
0 голосов
/ 17 июня 2020

Я хочу извлечь содержимое новостной статьи, и в настоящее время я использую газету3k библиотеку:

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

Но для некоторых веб-сайтов есть нежелательные элементы, такие как реклама и текст из изображений. Поэтому я хочу удалить эти ненужные элементы и текст. Есть ли способ удалить весь контент из этих тегов и классов?

1 Ответ

1 голос
/ 23 июня 2020

Если вы хотите сделать это для определенного веб-сайта, вы можете использовать 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 и поместить туда этот logi c.

В общем, это сложная проблема, возможно, самая сложная при извлечении статей, если вы хотите решить ее обычным c надежным способом, без написания и поддержки правил для каждого веб-сайта. Библиотеки с открытым исходным кодом часто могут найти основной контент с приемлемым качеством, но они очень плохо исключают лишний материал из тела статьи. См. Отчет https://github.com/scrapinghub/article-extraction-benchmark и https://github.com/scrapinghub/article-extraction-benchmark/releases/download/v1.0.0/paper-v1.0.0.pdf.

Коммерческие инструменты, такие как AutoExtract от Scrapinghub (я там работаю), решают эту проблему; они используют компьютерное зрение и машинное обучение, иначе надежно решить эту проблему сложно.

...