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 回答