J'ai trouvé un script pour Program pour créer un robot d'exploration ciblé en Python. Ce script s'est arrêté dans la fonction (google_scrape). dans cette fonction, j'ai eu une erreur à chaque exécution. Cette erreur est (List Index Out Of Range) Pouvez-vous m'aider?
# 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
3 Réponses :
Vous pourriez avoir moins de 10 liens, essayez:
for count in range(len(li)): sLink = li[count].find('a') links.append(sLink['href']) count += 1
Votre code fonctionnera dans le cas où li
a plus de 10 éléments, mais vous donnera une erreur quand il aura moins de 10 éléments car vous allez essayer d'accéder à un élément en dehors de la liste, ce qui donne l'erreur d'index. Avec un pour
et un range (len (li))
vous pouvez boucler uniquement sur tous les éléments indépendamment de la longueur de la liste, évitant ainsi l'erreur d'index.
Utilisation de L'argument limite code >
:
li = soup.findAll('li', attrs={'class':'g'}, limit=10) for elem in li: sLink = elem.find('a') links.append(sLink['href']) count += 1
Vous pouvez rassembler tout et tester la longueur de la liste renvoyée, puis découper la liste en conséquence
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]
Astuce:
pendant que compte <10:
c'est loucheVous pouvez définir le nombre maximum de résultats avec
limite
. Ensuite, parcourez les résultats sans utiliser d'index.