【问题标题】:Python - List Index Out Of Range -Python - 列表索引超出范围 -
【发布时间】:2019-03-20 07:34:06
【问题描述】:

我找到了一个程序脚本来用 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

错误堆栈:

【问题讨论】:

  • 提示:while count &lt; 10: 这很可疑
  • 您可以使用limit 设置最大结果数。然后在不使用索引的情况下遍历结果。

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


【解决方案1】:

使用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】:

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

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

    如果li 有超过 10 个元素,您的代码将正常工作,但当它有少于 10 个元素时会出现错误,因为您将尝试访问列表之外的元素,这会导致索引错误。使用forrange(len(li)),您可以在所有元素上循环,而与列表的长度无关,从而防止索引错误。

    【讨论】:

      【解决方案3】:

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

      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]
      

      【讨论】:

        猜你喜欢
        • 2015-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多