我是Python的初学者。有人可以指出它为什么一直在说
Traceback (most recent call last):
File "C:/Python27/practice example/datascraper templates.py", line 21, in <module>
print findPatTitle[i]
IndexError: list index out of range
非常感谢。
以下是代码:
from urllib import urlopen
from BeautifulSoup import BeautifulSoup
import re
webpage=urlopen('http://www.voxeu.org/').read()
patFinderTitle=re.compile('<title>(.*)</title>') ##title tag
patFinderLink=re.compile('<link rel.*href="(.*)"/>') ##link tag
findPatTitle=re.findall(patFinderTitle,webpage)
findPatLink=re.findall(patFinderLink,webpage)
listIterator=[]
listIterator=range(2,16)
for i in listIterator:
print findPatTitle[i]
print findPatLink[i]
print '/n'
答案 0 :(得分:2)
错误消息完全具有描述性。
您正尝试将一个硬编码的索引范围(2,16)访问到findPatTitle
,但您不知道有多少项。
如果要同时迭代多个类似的集合,请使用zip()
。
for title, link in zip(findPatTitle, findPatLink):
print 'Title={0} Link={1}'.format(title, link)
答案 1 :(得分:0)
问题是您的结果数量与预期不同。不要硬编码。但是,让我们重写这个更加pythonic:
替换它:
listIterator=[]
listIterator=range(2,16)
for i in listIterator:
print findPatTitle[i]
print findPatLink[i]
print '/n'
将两个列表zipped放在一起:
for title, link in zip(findPatTitle, findPatLink):
print title
print link
print '/n'
这将同时循环两次,无论列表多长。 1个元素或100个元素,没有区别。