BeautifulSoup を使用して Web ページから表示テキストを保存する Web ページから表示テキストを抽出することは、スクリプト、コメント、その他の要素として複雑なタスクになる場合があります内容が乱雑になることがよくあります。この課題を克服するには、BeautifulSoup の findAll() 関数を活用します。 表示テキストの識別 表示テキストを効果的にターゲットにするには、次の基準を使用します。 、<script>、内の要素を無視します。 <head>、<title>、<meta>、[document]。</li> <li>Comment オブジェクトのインスタンスをフィルタリングします。</li> </ul> <p><strong>解決策</strong></p> <ol><li><strong>可視性フィルターを定義します:</strong></li></ol> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre>from bs4.element import Comment 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</pre><div class="contentsignin">ログイン後にコピー</div></div> <ol start="2"><li><strong>可視の抽出テキスト:</strong></li></ol> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre>from bs4 import BeautifulSoup import urllib.request 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)</pre><div class="contentsignin">ログイン後にコピー</div></div> <ol start="3"><li><strong>使用例:</strong></li></ol> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre>html = urllib.request.urlopen('http://www.nytimes.com/2009/12/21/us/21storm.html').read() print(text_from_html(html))</pre><div class="contentsignin">ログイン後にコピー</div></div> <p><strong>出力:</strong></p> <p>このコードは、指定されたテキストから表示テキストを抽出して印刷します。 Web ページ。スクリプト、コメント、その他の非テキスト要素は除きます。</p>