0
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 j in db:
        hero_id.append(j[0])

    i += 1
print hero_id

注意:db = [tuple(filter(None, t)) for t in db] dbは次のようなタプルのリストです:[('564', 'Tom', 'Jerry'), ('321', 'X-man', 'Hulk')]。ライン上では、hero_id = []すべてが魅力のように機能します。for foopは、すべての番号を追加する必要があります(からのすべてのURLからurllist)。それは部分的にその仕事をします。最後のhero_idリストには、最後のURLの番号のみが含まれています(以前の番号はなくなりました)。アイデア?

4

2 に答える 2

4

hero_id = []これは、「while」( )のすべての反復でhero_idを空のリストに設定したためです。

直後に配置i = 0

または、次のようにコードを簡略化できます。

urllist = ['http://example.com', 'http://example1.com']
hero_id = []
for url in urllist:
    db = re.findall('(\d{3})/">(\w+\s-\s\w+)</a>', urllib.urlopen(url).read(), re.DOTALL)
    for j in db:
        hero_id.append(tuple(filter(None, j))[0])
print hero_id
于 2013-03-09T21:22:55.923 に答える
1

hero_idはwhileループで設定されているため、反復ごとに上書きされます。hero_id変数をグローバルにし、リセットしないでください。

hero_id = []
while ():
    #your code
于 2013-03-09T21:22:56.260 に答える