0

部分的な html テキストから html タグではないすべてを抽出するにはどうすればよいですか?

つまり、次のようなものがある場合:

<div>Hello</div><h3><div>world</div></h3>

['Hello','world'] を抽出したい

私は正規表現について考えました:

>[a-zA-Z0-9]+<

ただし、必要な特殊文字や中国語またはヘブライ文字は含まれません

4

3 に答える 3

3

HTMLからテキストを抽出するには、正規表現のようなものを見る必要があります

その投稿から:

HTML を正規表現で解析することはできません。複雑すぎます。RE の処理はブラウザでは適切なテキストとして機能しませんが、素朴な RE を困惑させる可能性があります。

適切な HTML パーサーを使用すると、より満足して成功することができます。Python 関係者は、HTML を解析してタグやスクリプトを削除するために、何か Beautiful Soup をよく使用します。

また、ブラウザーは、設計上、不正な形式の HTML を許容します。そのため、明らかに不適切な HTML を解析しようとしていることに気付くことがよくありますが、たまたまブラウザーでは問題なく動作します。

RE を使用すると、不適切な HTML を解析できる場合があります。必要なのは忍耐と努力だけです。しかし、多くの場合、他の誰かのパーサーを使用する方が簡単です。

于 2013-02-07T19:19:04.543 に答える
1

Avi が既に指摘したように、これは正規表現には複雑すぎるタスクです。get_textfromBeautifulSoupまたはclean_htmlfromを使用しnltkて、html からテキストを抽出します。

from bs4 import BeautifulSoup
clean_text = BeautifulSoup(html).get_text()

また

import nltk
clean_text = nltk.clean_html(html)

GuillaumeA のおかげで、もう 1 つのオプションはpyqueryを使用することです。

from pyquery import PyQuery
clean_text = PyQuery(html)

上記の html パーサーは、html が適切に形成されていない場合、さまざまなレベルの成功で仕事を行うと言わなければなりません。そのため、入力データに最適なものを実験して確認する必要があります。

于 2013-02-07T19:20:39.373 に答える
-1

Python には詳しくありませんが、次の正規表現が役に立ちます。

<\s*(\w+)[^/>]*>

どこ、

<: starting character

\s*: it may have whitespaces before tag name (ugly but possible).

(\w+): tags can contain letters and numbers (h1). Well, \w also matches '_', but it does not hurt I guess. If curious use ([a-zA-Z0-9]+) instead.

[^/>]*: anything except > and / until closing >

\>: closing >
于 2013-02-07T19:23:52.597 に答える