1

サイトからデータを取得して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>
...
4

1 に答える 1