1

BeautifulSoup を使用して html を解析し、Web ページのタイトルを抽出しようとしています。Bad End タグなど、Web サイトの記述が不適切なために、これが機能しない場合があります。これがうまくいかないときは、手動正規表現に行きます

私はテキストを持っています

<html xmlns="http://www.w3.org/1999/xhtml"\n      xmlns:og="http://ogp.me/ns#"\n      xmlns:fb="https://www.facebook.com/2008/fbml">\n<head>\n    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>\n    <title>\n                    .@wolfblitzercnn prepping questions for the Cheney intvw. @CNNSitRoom today. 5p. \n            </title>\n    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />...

<title></title>タグの間の値を取得しようとしています。かなり単純なはずですが、機能していません。これが私のpythonコードです。

result = re.search('\<title\>(.+?)\</title\>', html)
if result is not None:
    title = result.group(0)

これは、何らかの理由でこのテキストでは機能しません。result.group() を None として返すか、AttributeError を取得します。AttributeError: 'NoneType' オブジェクトには属性 'groups' がありません

私はこのテキストをオンラインの python regex 開発者に C&P し、すべてのオプション (re.match、re.findall、re.search) を試しましたが、そこで動作しますが、何らかの理由で私のスクリプトでは何も見つかりません。これらのタグ。次のような他の正規表現を試しても

<title>(.*?)</title>

4

2 に答える 2

5

dotall フラグを使用して、.改行文字も一致させる必要があります。

result = re.search('\<title\>(.+?)\</title\>', html, re.DOTALL)

ドキュメントが言うように:

...このフラグがないと、改行以外'.'のすべてに一致します

于 2012-06-22T22:28:27.900 に答える
2

<title>とタグの間のテストを取得したい場合は、次の<\title>正規表現を使用する必要があります。

pattern = "<title>([^<]+)</title>"

re.findall(pattern, html_string) 
于 2012-06-22T22:28:12.393 に答える