Python-列表索引超出范围-

时间:2019-03-20 07:34:06

标签: python http-headers python-requests web-crawler range

我找到了一个程序脚本,用Python构建了一个集中的爬虫。 该脚本已在函数(google_scrape)中停止。在执行此功能时,我一直在执行错误。 此错误是(列表索引超出范围) 你能帮我吗?

# Uses google search engine to find out the results for user query. 
def google_scrape(query):
    address = "http://www.google.com/search?q=%s&num=100&hl=en&start=0" % (urllib.quote_plus(query))
    request = urllib2.Request(address, None, {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'})
    urlfile = urllib2.urlopen(request)   
    page = urlfile.read()
    soup = BeautifulSoup(page)
    links = []
    count = 0
    li = soup.findAll('li', attrs={'class':'g'})
    while count < 10:
        sLink = li[count].find('a')
        links.append(sLink['href']) 
        count += 1
    return links

错误堆栈: enter image description here

3 个答案:

答案 0 :(得分:0)

您可能少于10个链接,请尝试:

for count in range(len(li)):
    sLink = li[count].find('a')
    links.append(sLink['href']) 
    count += 1

如果li包含10个以上的元素,您的代码将起作用,但是如果它包含少于10个元素,则会出现错误,因为您将尝试访问列表外的元素,从而导致索引错误。使用forrange(len(li)),您可以在所有元素上循环播放,而与列表的长度无关,从而防止了索引错误。

答案 1 :(得分:0)

使用The limit argument

li = soup.findAll('li', attrs={'class':'g'}, limit=10)

for elem in li:
    sLink = elem.find('a')
    links.append(sLink['href'])
    count += 1

答案 2 :(得分:0)

您可以收集所有内容并测试返回列表的长度,然后相应地切片列表

items = [item['href'] for item in soup.select('li.g a')]
length = len(items)
if length < 10:
    final = items[:length + 1]
else:
    final = items[:10]