Python - индекс списка вне диапазона - - PullRequest
1 голос
/ 20 марта 2019

Я нашел скрипт для Program для создания сфокусированного сканера в 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 голосов
/ 20 марта 2019

Использование 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
0 голосов
/ 20 марта 2019

Вы можете собрать все и проверить длину возвращенного списка, а затем разрезать список соответственно

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]
0 голосов
/ 20 марта 2019

У вас может быть менее 10 ссылок, попробуйте:

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

Ваш код будет работать, если li содержит более 10 элементов, но выдаст ошибку, когда будет менее 10элементы, потому что вы будете пытаться получить доступ к элементу вне списка, который дает ошибку индекса.С for и range(len(li)) вы можете зациклить только все элементы независимо от длины списка, предотвращая ошибку индекса.

...