HTMLページからタイトルを抽出する正規表現が必要です。現在私はこれを持っています:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
<title>のコンテンツのみを抽出する正規表現はありますか?タグを削除する必要はありませんか?
HTMLページからタイトルを抽出する正規表現が必要です。現在私はこれを持っています:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
<title>のコンテンツのみを抽出する正規表現はありますか?タグを削除する必要はありませんか?
回答:
使用(
)
正規表現中やgroup(1)
撮影した文字列を取得するためのPythonで(re.search
戻りますNone
、それは結果が見つからない場合はそう、使用しないgroup()
で直接):
title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE)
if title_search:
title = title_search.group(1)
import re
次のような結果になりますNameError: name 're' is not defined
開始時Python 3.8
、および割り当て式の導入(PEP 572)(:=
演算子)であることに注意してください。一致条件を変数としてif条件内で直接キャプチャーし、それを条件の本体で再利用することにより、Krzysztof Krasosのソリューションを少し改善できます。 :
# pattern = '<title>(.*)</title>'
# text = '<title>hello</title>'
if match := re.search(pattern, text, re.IGNORECASE):
title = match.group(1)
# hello
ビューティフルスープをお勧めします。Soupは、すべてのHTMLドキュメントを解析するための非常に優れたライブラリです。
soup = BeatifulSoup(html_doc)
titleName = soup.title.name
試してください:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
.*?
複数ある場合に備えて使用する必要</title>
があります(可能性は低いですが、わかりません)。
私はこれで十分だと思います:
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
...テキスト(HTML)が「text」という名前の変数にあると仮定します。
これは、HTML TITLEタグの内部に合法的に埋め込むことができる他のHTMLタグがなく、そのようなコンテナー/ブロック内に他の<文字を合法的に埋め込む方法がないことも想定しています。
しかし ...
PythonでのHTML解析に正規表現を使用しないでください。HTMLパーサーを使用してください!(完全なパーサーを作成する場合を除いて、これは、さまざまなHTML、SGML、およびXMLパーサーがすでに標準ライブラリーにある場合、追加の作業になります。
「実世界」のタグスープ HTML(SGML / XMLバリデーターに準拠していないことが多い)を処理する場合は、BeautifulSoupパッケージを使用します。(まだ)標準ライブラリにはありませんが、この目的のために広く推奨されています。
別のオプションは次のとおりです。lxml ...これは、適切に構造化された(標準に準拠した)HTML向けに記述されています。ただし、これにはパーサーとしてBeautifulSoupを使用するようにフォールバックするオプションがあります:ElementSoup。