-1

美しいスープ ライブラリを使用して、Web ページを解析し、ビットコイン アドレスを見つけようとしています。

生成されたアドレスを含むクラスを HTML ドキュメント全体から引き出すことができました。

<div class="roundpic qrcode" data-height="80" data-text="bitcoin:1JL7kugm1vDLqyzrVPAPdcbjH3PTxcPcud?amount=0.0573" data-width="80" style="margin: auto"></div>, <div class="roundpic qrcode" data-height="160" data-text="bitcoin:1JL7kugm1vDLqyzrVPAPdcbjH3PTxcPcud?amount=0.0573" data-width="160" style="padding: 10px"></div>

アドレスを分離する最良の方法は何ですか? 長さは 27 ~ 34 文字ですが、常に「bitcoin:」と「?」の間に表示されます。使用できる正規表現はありますか?

ありがとう

4

3 に答える 3

0

これは、 Python の正規表現を使用すると非常に簡単です。

import re
in_str=<div class="roundpic qrcode" data-height="80" data-text="bitcoin:1JL7kugm1vDLqyzrVPAPdcbjH3PTxcPcud?amount=0.0573" data-width="80" style="margin: auto"></div>, <div class="roundpic qrcode" data-height="160" data-text="bitcoin:1JL7kugm1vDLqyzrVPAPdcbjH3PTxcPcud?amount=0.0573" data-width="160" style="padding: 10px"></div>
bitcoin_addresses=re.findall(r'bitcoin:(.*?)\?amount',in_str)

紛らわしいかもしれないことの1つは、それですか?は正規表現の特殊文字ですが、一致させようとしています。* を使用する必要がありますか? レイジー マッチングを実行し、\? 実際に ? に一致します。バックスラッシュは、「特殊文字を意味するのではなく、実際の疑問符を意味する」というエスケープ文字です。

于 2013-06-10T19:08:02.070 に答える
0

昔は、正規表現を使用してそれを行うことができました。ただし、正規表現は解析用ではありません。いずれにしても DOM は解析済みなので、DOM に直接アクセスしてみませんか? :)

# imports
from bs4 import BeautifulSoup as Soup

# parse the HTML
s = Soup("<html><body><div data-text='bitcoin:a'></div><div data-text='bitcoin:b'></div><div data-text='bitcoin:c'></div></body></html>")

# find the divs with "data-text"-attribute
divs = ( d for d in s.findAll(name="div") if d.has_key('data-text') )

# extract the value of "data-text"
data_texts = map(lambda x: x["data-text"], divs)

# find only bitcoins
bitcoins = filter(lambda s: s.startswith("bitcoin:"), data_texts)

# strip the prefix
extract = map(lambda s: s[8:], bitcoins)

# result
print extract

結果:

['a', 'b', 'c']

希望、これは役に立ちました。

乾杯!

//編集: Blender の回答では、BeautifulSoup 内で正規表現を使用しています。これはきちんとしていますが、単にポストフィルタリングするだけで正規表現を完全に除外できます!

これは、非常に強力なジェネレーターのパイプラインも利用します。ジェネレーターに関するデビッド・ビーズリー

于 2013-06-10T19:09:37.677 に答える