从Python中的html中提取电话号码

时间:2012-05-06 19:25:22

标签: python beautifulsoup

电话号码被隐藏(555 143 ......),直到用户点击它'555 1437662',但是在onclick参数...我可以使用哪些选项来获取电话号码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>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

信息是否嵌入在标记属性中作为字符串包含的脚本中?那是......非常不幸。

(编辑:为了澄清,我假设这里的问题是“给出这个不幸的html / javascript作为输入,我如何用BeautifulSoup解析出电话号码。”请告知这是不正确的。)

我认为最简单的方法是隔离该javascript字符串然后使用正则表达式来提取数字。但是,正则表达式部分将是PITA并且相当脆弱。

soup.find('h3', id='resultTelBar').span['onclick']将为您提供字符串,假设汤是BeautifulSoup对象。然后使用re.search来解析第一行中的数字。你使用什么样的正则表达式取决于结果的规律程度(每个javascript字符串是以这种方式格式化的,包括换行符等等)以及你需要它多么强大,例如外国电话号码,或者javascript in这些数据的未来版本略有调整。