サイトからデータを取得してjson文字列に配置するPythonスクリプトを作成しようとしています。
サイトはhttp://mtc.sri.com/live_data/attackers/です。
Python でソースをプルしていますが、正規表現の部分がよくわかりません
RegExr を使用すると、この正規表現が機能します。
</?table[^>]*>|</?tr[^>]*>|</?td[^>]*>|</?thead[^>]*>|</?tbody[^>]*>|</?font[^>]*>
しかし、それをスクリプトに入れると、一致しません。
#!/usr/bin/python
import urllib2
import re
f = urllib2.urlopen("http://mtc.sri.com/live_data/attackers/")
out = f.read();
matchObj = re.match( r'</?table[^>]*>|</?tr[^>]*>|</?td[^>]*>|</?thead[^>]*>|</?tbody[^>]*>|</?font[^>]*>', out, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"
適切な応答が得られない理由は何ですか?
編集:
以下の提案に従って、私は以下を使用しました:
matchObj = re.findall( r'</?(?:table|t[dr]|thead|tbody|font)[^>]*>', out, re.M|re.I)
for i in matchObj.pop():
print i
ただし、これは単純に次のように出力します。
<
/
t
a
b
l
e
>
編集2:
何らかの理由で matchObj で .pop() を使用していました。それを脱いだ。今、私はより多くの応答を得ていますが、内部のデータではなく、タグを取得しているだけです。私は実際、タグを気にしません。データだけの方がいいです。
matchObj = re.findall( r'</?(?:table|t[dr]|thead|tbody|font)[^>]*>', out, re.M|re.I)
for i in matchObj:
print i
出力:
<table class="attackers">
<tr>
</tr>
<tr>
<td>
</td>
<td>
</td>
...