0

電話番号は、ユーザーが「555 1437662」をクリックするまで非表示 (555 143Â ....) ですが、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 文字列がそのようにフォーマットされているかなど) と、たとえば外国の電話番号や、このデータの将来のバージョンはわずかに微調整されます。

于 2012-05-06T19:36:33.713 に答える