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需要附加每个数字(来自urllist
的每个网址)。它部分地完成了它的工作。最后hero_id
列表仅包含最后一个网址中的数字(之前的数字已消失)。想法?
答案 0 :(得分:4)
那是因为你在'while'(hero_id = []
)的每次迭代中将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
答案 1 :(得分:1)
由于你的hero_id是在while循环中设置的,所以在每次迭代时都会覆盖它。 将您的hero_id变量设为全局变量,不要重置它。
hero_id = []
while ():
#your code