BeautifulSoup を使用した Web ページの表示テキストの抽出
多くの Web スクレイピング タスクでは、スクリプトなどの要素を除いて、Web ページの表示テキスト コンテンツを取得する必要があります。コメント、CSS スタイル。 BeautifulSoup を使用すると、適切なアプローチでこれを簡単に実現できます。
findAll() 関数を使用すると、望ましくない要素内に隠されたテキスト ノードを含むすべてのテキスト ノードが取得されるため、一般的な問題が発生します。これに対処するには、特定のタグとコメントを除外するカスタム フィルターを定義できます。
次のコードは、このアプローチの例です。
from bs4 import BeautifulSoup from bs4.element import Comment import urllib.request def tag_visible(element): if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']: return False if isinstance(element, Comment): return False return True def text_from_html(body): soup = BeautifulSoup(body, 'html.parser') texts = soup.findAll(text=True) visible_texts = filter(tag_visible, texts) return u" ".join(t.strip() for t in visible_texts) html = urllib.request.urlopen('http://www.nytimes.com/2009/12/21/us/21storm.html').read() print(text_from_html(html))
tag_visible 関数は、テキストの親要素かどうかを確認します。ノードは、望ましくないタグのいずれかに一致するか、ノードがコメントである場合に一致します。このフィルターを通過したノードは、u" ".join(t.strip() for t invisible_texts) を使用して、表示されているテキストを単一の文字列に結合するために使用されます。
このアプローチでは、表示されているテキストのみを効果的に抽出します。スクリプトやコメントなどの不要な要素を省いた Web ページ。
以上がBeautifulSoupを使用して表示されているWebページのテキストを抽出する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。