Python 为什么我需要指定此列表的大小,否则会导致列表索引超出范围错误
我正在尝试解析网页中的URL列表。我做了以下几件事:Python 为什么我需要指定此列表的大小,否则会导致列表索引超出范围错误,python,arrays,Python,Arrays,我正在尝试解析网页中的URL列表。我做了以下几件事: 有所有“a”标签的列表 使用for循环来get(“href”) 在循环过程中,我一直将get值分配给一个名为links的新空列表 但我一直得到一个索引超出范围的错误。我想这可能是因为我增加链接索引的方式,但我确信情况并非如此。 这是容易出错的代码: import urllib import bs4 url = "http://tellerprimer.ucdavis.edu/pdf/" response = urllib.urlopen(ur
get(“href”)
import urllib
import bs4
url = "http://tellerprimer.ucdavis.edu/pdf/"
response = urllib.urlopen(url)
webpage = response.read()
soup = bs4.BeautifulSoup(webpage, 'html.parser')
i = 0
links = []
for tags in soup.find_all('a'):
links[i] = str(tags.get('href'))
i +=1
print i, links
我给了链接一个固定的长度,它固定了它,就像这样:
links=[0]*89#89是汤的长度。查找所有('a')
我想知道是什么导致了这个问题。您正试图将某些内容分配给一个不存在的索引。创建
链接时,将其创建为空列表
然后你可以链接[i]
,但是links
是空的,所以没有i
th索引
正确的方法是:
links.append(str(tags.get('href')))
这也意味着您可以消除i
变量。不需要
这将打印
链接列表中的所有89个链接 列表最初为空,因此您试图将值分配给列表中不存在的索引位置
使用append()
将项目添加到列表中:
links = []
for tags in soup.find_all('a'):
links.append(str(tags.get('href')))
或者改用map()
:
links = map(lambda tags: str(tags.get('href')), soup.find_all('a'))
或者使用列表:
links = [str(tags.get('href')) for tags in soup.find_all('a')]
links.append(str(tags.get('href'))
Ah,明白了。非常感谢。奇怪的是,我以前使用过列表,但从未得到过这种场景。哦,伙计,map()简单多了。我现在觉得自己很愚蠢。但是,谢谢你。这里lambda只是一个函数的占位符,对吗?lambda
只允许您指定一个匿名函数。您可以改为引用命名函数。可能应该能够摆脱list()
部分。我将删除它。我查看了map()
的工作原理,不知道为什么要使用lambda标记:
或它的作用。还有为什么需要list()
?没有它,它工作得很好。
links = [str(tags.get('href')) for tags in soup.find_all('a')]