0

电话号码是隐藏的(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>
4

2 回答 2

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
于 2012-05-06T19:40:26.747 回答
0

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

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

我想最简单的事情是隔离该javascript字符串,然后使用正则表达式来提取数字。然而,正则表达式部分将是一个 PITA 并且相当脆弱。

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

于 2012-05-06T19:36:33.713 回答