2016-08-13 7 views
0

私はこのテキストを持っている:HTMLタグ付き正規表現とエスケープ文字が

<h5 class="subblocksubhead subsubsectionhead first"><b>Messaggi inseriti</b></h5> 
<dl class="blockrow stats"> 
    <dt><b>Messaggi inseriti</b></dt> 
    <dd> 81</dd> 
</dl> 
<dl class="blockrow stats"> 
    <dt>Media dei messaggi giornalieri</dt> 
    <dd> 0.02</dd> 
</dl> 

と私は、このコードを使用" 81"を抽出しようとしている:私は常に取得

regex_message_sent_num=r'Messaggi inseriti<.+>\n\t\t<.+?>(\s.+)<.+?>' 
pattern_message_sent_num=re.compile(regex_message_sent_num) 
results_message_sent_num=re.findall(pattern_message_sent_num,html_text) 

を空のリストを出力として返しますが、コードhereをテストすると、適切な抽出が得られます。

私が間違っていることを知っていますか? HTMLは私が運動として目に見えるデータを抽出しようとしているウェブページから来ています。私は、chromeブラウザから保存されたHTMLテキストで正規表現をテストしました。

+2

*「私が間違っていることは何ですか?」* - はい!あなたは[正規表現でHTMLを解析する](http://stackoverflow.com/a/1732454/3001761)しようとしています。 **実際のHTMLパーサー**、[Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/)などを使用してください。 – jonrsharpe

+0

提案していただきありがとうございます、私はあなたが提案したツールを使用します。 –

答えて

0

BeautifulSoupのようにHTMLパーサーを代わりに使用します。

from bs4 import BeautifulSoup 

data = """ 
<div> 
    <dl class="blockrow stats"> 
     <dt><b>Messaggi inseriti</b></dt> 
     <dd> 81</dd> 
    </dl> 
    <dl class="blockrow stats"> 
     <dt>Media dei messaggi giornalieri</dt> 
     <dd> 0.02</dd> 
    </dl> 
</div>""" 

soup = BeautifulSoup(data, "html.parser") 

label = soup.find("dt", text="Messaggi inseriti") 
print(label.find_next_sibling("dd").get_text(strip=True)) 

プリント81:テキスト検索とfind_next_sibling() methodを使用して

+0

提案をお寄せいただきありがとうございます。私はあなたの答えに例示されているように新しいコードを書き、HTMLパーサーBeautifulSoupを使用しようとします。 –

関連する問題