http://lxml.de/ ライブラリを使用してhtmlドキュメントを解析しています。これまでのところ、htmlドキュメントからタグを削除する方法を理解しました lxmlで、タグを削除してすべてのコンテンツを保持するにはどうすればよいですか? しかし、その投稿で説明されている方法では、すべてのテキストが残り、タグが削除されます実際のスクリプトを削除せずに。 lxml.html.clean.Cleanerへのクラス参照も見つけました http://lxml.de/api/lxml.html.clean.Cleaner-class.html しかし、これは泥のように明らかですクラスを実際に使用してドキュメントをクリーンアップする方法について説明します。どんな助けでも、おそらく短い例が私に役立つでしょう!
以下はあなたがやりたいことをするための例です。 HTMLドキュメントの場合、Cleaner
は、_strip_elements
_を使用するよりも、問題に対するより一般的な解決策です。このような場合、_<script>
_タグ以外のものを削除する必要があるためです。また、他のタグのonclick=function()
属性などを削除する必要があります。
_#!/usr/bin/env python
import lxml
from lxml.html.clean import Cleaner
cleaner = Cleaner()
cleaner.javascript = True # This is True because we want to activate the javascript filter
cleaner.style = True # This is True because we want to activate the styles & stylesheet filter
print("WITH JAVASCRIPT & STYLES")
print(lxml.html.tostring(lxml.html.parse('http://www.google.com')))
print("WITHOUT JAVASCRIPT & STYLES")
print(lxml.html.tostring(cleaner.clean_html(lxml.html.parse('http://www.google.com'))))
_
lxml.html.clean.Cleanerドキュメント ;で設定できるオプションのリストを取得できます。 True
またはFalse
(デフォルト)に設定できるオプションもあれば、次のようなリストを使用するオプションもあります。
_cleaner.kill_tags = ['a', 'h1']
cleaner.remove_tags = ['p']
_
Killとremoveの違いに注意してください。
_remove_tags:
A list of tags to remove. Only the tags will be removed, their content will get pulled up into the parent tag.
kill_tags:
A list of tags to kill. Killing also removes the tag's content, i.e. the whole subtree, not just the tag itself.
allow_tags:
A list of tags to include (default include all).
_
strip_elements メソッドを使用してスクリプトを削除してから、 strip_tags メソッドを使用して他のタグを削除できます。
etree.strip_elements(fragment, 'script')
etree.strip_tags(fragment, 'a', 'p') # and other tags that you want to remove
この目的にもbs4librayを使用できます。
soup = BeautifulSoup(html_src, "lxml")
[x.extract() for x in soup.findAll(['script', 'style'])]