La solution à la connexion IP du proxy du crawler
Il y a quelque temps, alors que j'apprenais à crawler, j'ai rencontré un problème de casse-tête : l'échec de la connexion. Chaque fois que je veux utiliser une IP proxy pour l'exploration du web, je rencontre toujours un échec de connexion, ce qui m'empêche d'effectuer la collecte de données en douceur. Cependant, après plusieurs tentatives et quelques recherches, j'ai finalement trouvé une solution à ce problème. Ci-dessous, je vais partager avec vous quelques-unes des connaissances que j'ai accumulées pour vous aider à résoudre le problème de l'échec de la connexion sur la route du crawling.
I. Vérifier la qualité de l'IP du proxy
Tout d'abord, nous devons vérifier la qualité de l'IP proxy. Une bonne IP proxy doit présenter les éléments suivants : stabilité, vitesse et anonymat. Afin de s'assurer de la qualité de l'IP proxy, nous pouvons utiliser certains sites web d'IP proxy gratuits pour faire un tri, à l'aide des informations fournies par le site web pour sélectionner l'IP proxy approprié, et en même temps, dans le code pour ajouter des paramètres raisonnables de délai d'attente, ainsi que le mécanisme de relance d'erreur, ce qui peut nous aider à exclure la qualité de l'IP proxy causée par l'échec de la connexion.
II. remplacement de l'agent utilisateur
Au cours du processus d'exploration, certains sites web imposent des restrictions pour un type spécifique de User-Agent. Pour résoudre ce problème, nous pouvons simuler la visite d'un navigateur en remplaçant le User-Agent, qui est une chaîne qui identifie le client, et chaque navigateur a un User-Agent différent. En modifiant le User-Agent, nous pouvons contourner la détection du site web et faire en sorte que la requête ressemble davantage à une visite normale du navigateur. Voici un exemple de code pour votre référence :
demandes d'importation
url = 'https://example.com'
headers = {
User-Agent' : 'Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)
Utilisation de pools d'adresses IP proxy
Pour améliorer la disponibilité et la stabilité des IP proxy, nous pouvons créer un pool d'IP proxy. Un pool d'IP proxy est une liste d'IP maintenue dynamiquement qui peut fournir plusieurs IP proxy disponibles à utiliser. De cette manière, lorsqu'une IP proxy tombe en panne ou que la connexion échoue, nous pouvons automatiquement passer à une autre IP proxy disponible, ce qui réduit la probabilité d'échec de la connexion. Voici un exemple de mise en œuvre d'un pool d'IP proxy simple :
import random
proxy_list = [
'http://123.45.67.89:8080',
'http://223.56.78.90:8888',
'http://111.22.33.44:9999'
]
proxy = random.choice(proxy_list)
proxies = {
'http' : proxy,
'https' : proxy
}
response = requests.get(url, headers=headers, proxies=proxies)
IV. des délais raisonnables
Lors de l'exploration d'un site web, il est important de fixer un délai raisonnable. Un délai trop court peut entraîner l'impossibilité de récupérer correctement le contenu de la page, tandis qu'un délai trop long peut rendre le robot d'exploration inefficace ou consommer des ressources excessives. Il est recommandé d'utiliser le paramètre timeout de la bibliothèque des requêtes pour contrôler le délai d'attente. Voici un exemple de code :
demandes d'importation
response = requests.get(url, headers=headers, timeout=5)
Dans le code ci-dessus, le paramètre timeout est fixé à 5 secondes, ce qui signifie que s'il n'y a pas de réponse dans les 5 secondes, la requête sera automatiquement interrompue, ce qui permet de ne pas bloquer une requête particulière pendant une longue période.
V. L'exploration multithread
Enfin, nous pouvons améliorer l'efficacité de l'exploration grâce à l'exploration multithread. Le multithreading permet d'effectuer plusieurs requêtes en même temps, ce qui permet d'utiliser pleinement les ressources du système. Voici un exemple simple d'exploration multithread pour votre référence :
importer des fils
importation de demandes
def crawl(url) :
response = requests.get(url, headers=headers)
print(response.text)
urls = [
'https://example.com/page1',
'https://example.com/page2',
'https://example.com/page3'
]
threads = []
pour url dans urls.
t = threading.Thread(target=crawl, args=(url,))
threads.append(t)
t.start()
pour t dans threads.
t.join()
Grâce à l'exploration multithread, nous pouvons envoyer plusieurs requêtes en même temps afin d'améliorer l'efficacité de l'exploration et de réduire la probabilité d'échec de la connexion.
remarques finales
Au cours du processus d'exploration, il est courant de rencontrer des échecs de connexion. Cependant, tant que nous adoptons certaines méthodes appropriées, telles que la vérification de la qualité de l'IP du proxy, le remplacement de User-Agent, l'utilisation du pool d'IP du proxy, la définition d'un délai raisonnable, l'exploration multithread, etc. J'espère que le contenu de cet article vous aidera à résoudre les problèmes d'échec de connexion rencontrés au cours du processus d'exploration. Je vous souhaite à tous une bonne route pour le crawling !