用Python从html中提取电话号码

2024-09-27 00:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在用户单击“5551437662”之前,电话号码是隐藏的(5551437662),但它在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>

Tags: 用户id参数html选项show电话号码body
2条回答

信息嵌入在一个脚本中,该脚本以字符串的形式包含在标记属性中?那是。。。很不幸。在

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

我想最简单的事情是隔离javascript字符串,然后使用regex来提取数字。然而,regex部分将是一个PITA,相当脆弱。在

假设soup是BeautifulSoup对象,soup.find('h3', id='resultTelBar').span['onclick']将得到字符串。然后使用re.search来解析第一行之外的数字。使用什么样的正则表达式取决于结果的规则性(是否每个javascript字符串都是这样格式化的,包括换行符)?等等)以及您需要它的健壮性,例如外国电话号码,或者在将来的javascript数据版本中稍作调整。在

我注意到了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

相关问题 更多 >

    热门问题