Cet article présente principalement le partage d'exemples sur l'obtention d'une adresse IP proxy par Python. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
Habituellement, lorsque nous avons besoin d'en explorer. de notre Lorsque des données sont nécessaires, il existe toujours certains sites Web qui interdisent l'accès répété à la même IP. À l'heure actuelle, nous devons utiliser une adresse IP proxy pour nous déguiser avant chaque visite afin que « l'ennemi » ne puisse pas la détecter.
ooooooooooooooOK, commençons joyeusement !
C'est le fichier pour obtenir l'IP du proxy. Je les ai modularisés et je les ai divisés en trois fonctions
Remarque : il y aura de l'anglais. commentaires dans l'article , pour faciliter l'écriture du code, après tout, un ou deux mots en anglais sont ok
#!/usr/bin/python #-*- coding:utf-8 -*- """ author:dasuda """ import urllib2 import re import socket import threading findIP = [] #获取的原始IP数据 IP_data = [] #拼接端口后的IP数据 IP_data_checked = [] #检查可用性后的IP数据 findPORT = [] #IP对应的端口 available_table = [] #可用IP的索引 def getIP(url_target): patternIP = re.compile(r'(?<=<td>)[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}') patternPORT = re.compile(r'(?<=<td>)[\d]{2,5}(?=</td>)') print "now,start to refresh proxy IP..." for page in range(1,4): url = 'http://www.xicidaili.com/nn/'+str(page) headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"} request = urllib2.Request(url=url, headers=headers) response = urllib2.urlopen(request) content = response.read() findIP = re.findall(patternIP,str(content)) findPORT = re.findall(patternPORT,str(content)) #assemble the ip and port for i in range(len(findIP)): findIP[i] = findIP[i] + ":" + findPORT[i] IP_data.extend(findIP) print('get page', page) print "refresh done!!!" #use multithreading mul_thread_check(url_target) return IP_data_checked def check_one(url_check,i): #get lock lock = threading.Lock() #setting timeout socket.setdefaulttimeout(8) try: ppp = {"http":IP_data[i]} proxy_support = urllib2.ProxyHandler(ppp) openercheck = urllib2.build_opener(proxy_support) urllib2.install_opener(openercheck) request = urllib2.Request(url_check) request.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; WOW64)") html = urllib2.urlopen(request).read() lock.acquire() print(IP_data[i],'is OK') #get available ip index available_table.append(i) lock.release() except Exception as e: lock.acquire() print('error') lock.release() def mul_thread_check(url_mul_check): threads = [] for i in range(len(IP_data)): #creat thread... thread = threading.Thread(target=check_one, args=[url_mul_check,i,]) threads.append(thread) thread.start() print "new thread start",i for thread in threads: thread.join() #get the IP_data_checked[] for error_cnt in range(len(available_table)): aseemble_ip = {'http': IP_data[available_table[error_cnt]]} IP_data_checked.append(aseemble_ip) print "available proxy ip:",len(available_table)
1. getIP(url_target) : les paramètres entrants de la fonction principale sont : vérifier la disponibilité de l'URL IP du proxy, il est recommandé ipchina
pour obtenir l'IP du proxy, obtenue sur le site http://www.xicidaili.com/nn/, il s'agit d'un site Web qui fournit une adresse IP proxy gratuite, mais l'adresse IP à l'intérieur. Toutes ne peuvent pas être utilisées, et en fonction de votre emplacement géographique réel, des conditions du réseau, du serveur cible auquel vous accédez, etc., probablement moins de 20 % peuvent être utilisées. , du moins dans mon cas.
Utilisez la méthode normale lorsque vous visitez le site Web http://www.xicidaili.com/nn/. Le contenu de la page Web renvoyé est obtenu via une requête régulière pour obtenir l'adresse IP requise et le port correspondant. suit :
patternIP = re.compile(r'(?<=<td>)[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}') patternPORT = re.compile(r'(?<=<td>)[\d]{2,5}(?=</td>)') ... findIP = re.findall(patternIP,str(content)) findPORT = re.findall(patternPORT,str(content))
Pour savoir comment construire des expressions régulières, vous pouvez vous référer à d'autres articles :
L'IP obtenue est stockée dans findIP, et le port correspondant est dans findPORT Les deux correspondent. les uns aux autres par index. Le nombre normal d'adresses IP obtenues sur une page est de 100.
Ensuite, effectuez l'épissage des adresses IP et des ports
Enfin, effectuez une vérification de la disponibilité
2. check_one(url_check,i) : fonction Thread
Cette fois, url_check est accessible de la manière normale Lorsque la page Web est renvoyée, cela signifie que le proxy. L'IP est disponible et la valeur d'index actuelle est enregistrée, qui sera utilisée pour extraire toutes les IP disponibles ultérieurement.
3. mul_thread_check(url_mul_check) : génération multi-thread
Cette fonction permet au multithread de vérifier la disponibilité IP du proxy, et chacun IP démarre un fil de discussion. Vérifiez-le.
Ce projet appelle directement getIP() et transmet l'URL utilisée pour vérifier la disponibilité, qui renverra une liste d'adresses IP dont la disponibilité a été vérifiée, au format
['ip1:port1','ip2:port2',....]
Recommandations associées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!