2012-05-06 159 views
0

電話號碼被隱藏(555 143 ....),直到用戶點擊它'555 1437662',但是在onclick參數中...我可以使用什麼選項來撥打電話數字從下面的HTML ...?從Python中提取電話號碼

<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字符串都是用這種方式格式化的,包括換行符等),以及你需要它的外部電話號碼的強健程度,或者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很棒! 將嘗試... –