-1
votes

IndexError: Index de liste hors de portée de la boucle à Python

Salut Everone Je veux SCRACE Mais vous obtenez cette erreur en 59

J'ai 1089 éléments dans mon xlsx fichier

erreur : xxx

voici mon code Python: xxx

link:

https://www.yelp.com/ BIZ / DAEHO-KALBIJJIM-and-BOOF-SOUP-SOUP-SAN-FRANCISCO-9? OSQ = Restaurants

Ici, Erreur dans ce site Web et téléphone :

 Entrez la description de l'image ici


8 commentaires

Evidemment, wevsite_link n'est pas aussi long que le téléphone est. Pouvez-vous expliquer pourquoi vous vous attendez à ce que ce soit la même longueur? Avez-vous envisagé ce que vous voulez arriver si ce n'est pas le cas?


Vous devriez d'abord trouver tout .text - offScreen__373c0__1sefx + .text - offScreen__373c0__1sefx + Pour créer une paire (téléphone, Webside) . Et parfois, vous pouvez obtenir (aucun, WebSide) si quelque partie .text - offScreen__373c0__1sefx + n'a pas téléphone


Pouvez-vous s'il vous plaît répondre afin que je puisse mieux comprendre!


Vous affichez une image avec le site Web et le téléphone, mais certains éléments de la page peuvent ne pas avoir de téléphone - et vous pouvez avoir moins de téléphones que des sites Web.


@Karlknechtel l'a bien expliqué, c'est essentiellement ce que j'ai écrit dans ma réponse.


@Furas effectivement fait


@Karlknechtel donc ce que je dois faire?


Tout d'abord, vous devez penser aux données et à vos besoins jusqu'à ce que vous puissiez répondre aux questions que je vous ai posées. Je ne peux pas résoudre le problème pour vous parce que je ne sais pas ce que vous voulez arriver dans tous les cas.


3 Réponses :


2
votes

Je ne connais pas très bien le sélénium, je ne peux donc pas commenter sur cet aspect.

La première fois que vous ouvrez "Sans francisco.csv" Vous avez lu le contenu sans les assigner à une variable.

Quant à votre erreur, il est causé par le fait que votre gamme est basée sur la longueur du téléphone , pas sur la longueur de wevsite_link . Si wevsite_link est plus court que téléphone , vous obtenez une erreur. En termes simples, vous trouvez moins de liens de site Web que de numéros de téléphone, mais votre code suppose que vous trouverez toujours la même quantité de chacun.

Pouvez-vous expliquer votre code un peu plus? Qu'essayez-vous de faire?


10 commentaires

Quel code avez-vous besoin?


@Usmanshahzad Je voulais dire une explication de ce que vous voulez que votre code fasse. Quel est le contexte?


Je veux faire passer le téléphone et le site "


Question Vérification mise à jour!


S'il vous plaît vérifier la question mise à jour


Mais le site Web est plus long que le téléphone que vous pouvez voir dans l'image


@Usmanshahzad Je suis sûr que la longueur de l'URL vs la longueur du téléphone n'est pas le problème. Il s'agit du nombre d'URL que vous trouvez vs le nombre de numéros de téléphone que vous trouvez.


Désolé je pense que @furas résolvez mon problème


@Usmanshahzad Très bien, comprends-tu maintenant pourquoi tu as eu ce problème?


Oui! Je comprends



1
votes

En un coup d'œil, je soupçonne que

phone = driver.find_elements_by_css_selector(".text--offscreen__373c0__1SeFX+ .text-align--left__373c0__2pnx_")


1 commentaires

Cela ne devrait pas causer d'erreur cependant, non? Sa gamme est basée sur la longueur du téléphone , il ne sera donc pas indexé en dehors de celui-ci.



1
votes

Il semble que certains articles n'ont aucun téléphone, il a donc trouvé moins de téléphones puis des sites Web.

Vous devriez préférer tout d'abord à trouver tout ". Texte - OFFREEN__373C0__1SEFX +" Utilisez ultérieurement pour Code> -Loop à rechercher téléphone code> et site Web code> dans chaque article séparatelly. P>

Utilisation ESSAY / SAUF CODE> Vous pouvez reconnaître si l'élément n'a aucun téléphone et utilisez une chaîne vide en tant que numéro de téléphone p>

for url in mylist:

    driver.get(url)

    all_items = driver.find_elements_by_css_selector(".text--offscreen__373c0__1SeFX+")

    for item in all_items:
        try:
            wevsite_link = item.find_element_by_css_selector(".link-size--default__373c0__1skgq")
            wevsite_link = wevsite_link.text
        #except selenium.common.exceptions.NoSuchElementException:
        except:
            wevsite_link = ''

        try:
            phone = item.find_element_by_css_selector(".text-align--left__373c0__2pnx_")
            phone = phone.text
        #except selenium.common.exceptions.NoSuchElementException:
        except:
            phone = ''

        with open("Sans Fransico.csv", 'a',encoding="utf-8") as s:
             s.write(phone + "," + wevsite_link + "\n")


2 commentaires

Une dernière chose que j'ai reçu cette erreur lors de l'exécution de votre code?


Message: Sélecteur non valide: Un sélecteur non valide ou illégal a été spécifié dans la ligne 20