urllist = ['http://example.com',
'http://example1.com']
i = 0
while i < len(urllist):
source = urllib.urlopen(urllist[i]).read()
regex = '(\d{3})/">(\w+\s-\s\w+)</a>' # e.g. '435', 'Tom-Jerry'
p = re.compile(regex)
db = re.findall(p, source)
db = [tuple(filter(None, t)) for t in db]
hero_id = []
for i in db:
hero_id.append(i[0])
i += 1
print hero_id
db = [tuple(filter(None, t)) for t in db]
db
このようなタプルのリストです:[('564', 'Tom', 'Jerry'), ('321', 'X-man', 'Hulk')]
この背後にあるロジックは次のとおりです。から始めてurllist[0]
、正規表現を検索し、db
のすべてのタプルについてを収集し、タプル(番号)から要素を取得してリストに追加しdb
ます。完了したら、1を追加し、残りがない状態で次のURLに対してプロセス全体を繰り返します。[0]
hero_id
i
urllist
このコードを実行すると、次のようになります。
i += 1
TypeError: can only concatenate tuple (not "int") to tuple
i += 1
コード内はforループの外側にあるため、この例外は私を少し驚かせます。アイデア?