2012-05-06 13 views
0

電話番号はユーザーが '555 1437662'をクリックするまで非表示(555 143 ....)ですが、onclickパラメータにあります。下のHTMLからの番号...?Pythonのhtmlから電話番号を抽出する

<html> 
    <body> 
     <h3 id="resultTelBar"> 
      <span onclick="showFullNumber(this, '555 1437662'); 
       dcsMultiTrack('DCSext._mainreq','','DCSext.linktype', 
       'telephone show','DCSext.linkplace','','DCSext.linkvalue','555 1437662', 
       'DCSext.show_listingId','SA_6597739_4638_003722_8396251_IYMX', 
       DCSext.show_zoningUsed','0','DCSext.show_resultNumber','1')" 
       >086 143 ....</span> 
     </h3> 
    </body> 
</html> 

答えて

0

この情報は、タグ属性に文字列として含まれていますか?それは...非常に残念です。

(編集:明確にするために、私はここに質問がされると仮定しています「入力として、この不幸なHTML/JavaScriptを与え、どのように私はBeautifulSoupで電話番号を解析することができます」これが正しくない場合はご連絡ください)

私は最も簡単なことは、そのJavaScript文字列を分離し、正規表現を使用して番号を抽出することだと思います。しかし、正規表現の部分はPITAになり、かなり壊れやすくなります。

soup.find('h3', id='resultTelBar').span['onclick']スープがBeautifulSoupオブジェクトであると仮定して、文字列を取得します。次に、re.searchを使用して、最初の行から数値を解析します。正確な正規表現はどのように正規の結果が得られるか(どのような形式のJavaScript文字列(改行を含む?)など)と、インスタンスの外国の電話番号のために必要な堅牢さに依存します。このデータの将来のバージョンは少し微調整されています。

2

私はbeautyfulsoupタグに気付きましたが、lxmlと私の異形を示唆しています。 好きなときに使用できます。私は正規表現についてはあまり気にしませんが、それがうまくいかない場合は改善することもできます。

>>> import re 
>>> from lxml import etree 
>>> etree.fromstring(u'''YOUR HTML''') 
>>> onclick = html.xpath('//h3[@id="resultTelBar"]/span/@onclick')[0] 
>>> print re.search("showFullNumber\(this,\s*'([\d ]+)'", onclick).group(1) 
555 1437662 
+0

ありがとうございます... lxmlはすばらしい...! しようとします... –