-1
votes

Ne peut pas faire mon script continuer à essayer avec différents proxies jusqu'à ce qu'il court avec succès

J'ai écrit un script dans Scrapy en combinaison avec Selenium pour faire des demandes proxiées à l'aide de proxies nouvellement générées par get_proxies () méthode. J'ai utilisé des demandes Module pour récupérer les proxies afin de les réutiliser dans le script. Ce que j'essaie de faire est d'analyser tous les liens post de son Page d'atterrissage puis récupérer le nom de chaque Titre de ce qui est page cible < / a>.

Mon script suivant fonctionne de manière incohérente car lorsque la fonction get_random_proxy produit un proxy utilisable, alors je reçois mon script fonctionnant autrement, il échoue de manière miséreuse.

Comment puis-je faire que mon script continuer à essayer d'essayer avec des proxies différents jusqu'à ce qu'il fonctionne avec succès?

J'ai écrit jusqu'à présent : xxx


3 commentaires

Le problème réside dans votre CrawlerProcess , Crowl () Méthode Vous devez encapsuler certains des appels internes informatiques avec essayer et sauf Manquer cette partie du code de votre question, il est difficile de vous aider.


Votre code utilise un schéma et un sélénium sauf que Scrapy ne fait absolument rien ici. Vous devriez vous tenir au sélénium ou à la session ou à la recherche sur les intégrations de sélénium pour le skérapie. Pour les addons de gestion de proxy Scrapy, jetez un coup d'œil à PROXIES SCRAPY-ROTING-PROXIES pour sélénium Commutation des proxies pendant la période d'exécution est un peu plus compliquée.


En cas d'utilisation de la rotation des mandatations de Scrapy, je trouve Cette réponse Deuxièmement, elle ne dépend pas des advons et Peut être exécuté comme il s'agit de @granitosaurus.


3 Réponses :


0
votes

Comme vous avez étiqueté , en utilisant uniquement Selenium Vous pouvez faire des demandes proxiées à l'aide de la nouvelle activité Proxies qui sont répertoriées dans le Liste de proxy gratuite à l'aide de la solution suivante:

note : ce programme invoquera les proxies de la liste de proxy un par un jusqu'à une connexion proxée réussie et vérifiée via vérification de proxy page de https://www.whatmyip.com/

  • bloc de code: XXX

  • Sortie de la console: XXX


2 commentaires

La question ne concerne pas comment je peux utiliser la rotation des mandataires lors de la tentative de sélénium (je le sais déjà); Il s'agit plutôt de savoir comment je peux faire la même chose lorsqu'il est combiné avec un skérapie. J'espère que tu m'as eu @debanjanb. Merci.


@ robots.txt Comme vous avez tagué sélénium d'où j'ai essayé de construire une solution canonique pour vous aider à sortir purement basé sur < Un href = "https://docs.eleniumhq.org/" rel = "nOfollow noreferrer"> sélénium . Cependant, Scrapy est basé sur demandes et peut effectuer le même emploi de la même manière.



0
votes

Vous pouvez essayer d'utiliser PROXY SCRAPY-PROXY

Voici Une autre référence qui pourrait vous aider à vous aider: https://www.scrapehero.com/how-to-rotate-proxies-and-ip-addresses-uppython-3/ P>

Vérifiez la partie: P >

DOWNLOADER_MIDDLEWARES = {
    'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
}

ROTATING_PROXY_LIST = [
    'proxy1.com:8000',
    'proxy2.com:8031',
    # ...
]


0 commentaires

1
votes

Vous pouvez utiliser la bibliothèque Demandes lors de la sélection d'un proxy aléatoire pour vérifier si le proxy fonctionne ou non. Boucle à travers les proxies:

  1. shuffle and choisi ( pop ) un proxy aléatoire
  2. Vérifiez avec Demandes , si réussie, renvoyez le proxy autrement aller à l'étape 1

    changez votre get_random_proxy à quelque chose comme ceci: xxx

    si get_random_proxy retourne Aucun , cela signifie que rien des proxies ne fonctionne. Dans ce cas, omettez le - argument proxy-serveur . xxx


3 commentaires

get_random_proxy () ne manquera jamais de produire du proxy sauf s'il y a une erreur de connexion. Je l'ai testé plusieurs fois. Vous devez travailler sur un autre angle pour résoudre le problème @Mezba メ. Merci.


@ robots.txt Vous voulez vous assurer que vous obtenez un proxy de travail, n'est-ce pas que le but? get_random_proxy prend en charge cela en testant des proxies aléatoires. Tant que requests.get fonctionne à l'aide d'un proxy, il ne faut pas échouer. Je ne suis pas vraiment sûr de ce que vous voulez vraiment ici.


Je t'ai tort @Mezba メ. Votre solution semble fonctionner. Recevez-vous une fois que j'ai fini de vérifier. Merci.