L'éditeur suivant vous apportera un exemple de proxy d'analyse Python et d'obtention de l'adresse IP du proxy disponible. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur pour y jeter un œil
Aujourd'hui, nous allons écrire un outil très pratique, qui consiste à scanner et obtenir les proxys disponibles
Premier Surtout, j'ai d'abord trouvé un site Web sur Baidu : www.xicidaili.com à titre d'exemple
Ce site Web publie de nombreuses IP proxy et ports disponibles dans le pays et à l'étranger
Nous procédons toujours comme d'habitude. Pour analyse, analysons d'abord tous les proxys nationaux
Cliquez sur la partie domestique pour examiner et constater que le proxy et le répertoire nationaux sont l'URL suivante :
www.xicidaili.com/nn/x
Ce x compte près de deux mille pages, il semble donc que le traitement du fil soit à nouveau nécessaire. . .
Comme d'habitude, on essaie d'obtenir le contenu directement avec les requêtes les plus simples.get()
renvoie 503, puis on ajoute un simple en-tête
et renvoie 200, OK
D'accord, analysons d'abord le contenu Web et obtenons le contenu que nous voulons
Nous avons constaté que le contenu contenant des informations IP se trouve dans la balise
, mais nous avons découvert plus tard que le contenu de l'adresse IP, du port et du protocole se trouve dans les 2e, 3e et 6e balises
On a donc commencé à essayer d'écrire, voici l'idée d'écriture :
Lors du traitement de la page, on extrait d'abord la balise tr, et puis tr La balise td dans la balise est extraite Par conséquent, deux opérations bs sont utilisées et un traitement str est requis lors de la deuxième utilisation de l'opération bs Parce qu'après avoir obtenu tr, nous en avons besoin de 2, les choses n°3 et 6, Mais lorsque nous utilisons la sortie i par une boucle for, nous ne pouvons pas effectuer d'opérations de groupe Nous effectuons donc simplement une deuxième opération sur la soupe de chaque td séparément Puis extraire directement 2,3,6 Après extraction, ajouter directement .string pour extraire le contenur = requests.get(url = url,headers = headers) soup = bs(r.content,"html.parser") data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')}) for i in data: soup = bs(str(i),'html.parser') data2 = soup.find_all(name = 'td') ip = str(data2[1].string) port = str(data2[2].string) types = str(data2[5].string).lower() proxy = {} proxy[types] = '%s:%s'%(ip,port)
url = 'http://1212.ip138.com/ic.asp' r = requests.get(url = url,proxies = proxy,timeout = 6)
Le contenu renvoyé est le suivant : <🎜. >
<html> <head> <meta xxxxxxxxxxxxxxxxxx> <title> 您的IP地址 </title> </head> <body style="margin:0px"><center>您的IP是:[xxx.xxx.xxx.xxx] 来自:xxxxxxxx</center></body></html>
Si notre proxy est disponible, l'adresse IP du proxy sera renvoyée
(l'adresse renvoyée sera l'adresse IP externe de notre machine locale) Bien que je ne sois pas très clair sur la situation, j'ai exclu cette situation. Le proxy devrait toujours être indisponible)
Ensuite, nous pourrons porter un jugement. . Si l'adresse IP renvoyée est la même que l'adresse IP dans le dictionnaire proxy, alors pensez que cette adresse IP est un proxy disponible et écrivez-la dans le fichier
C'est notre idée. Enfin, nous pouvons traiter la file d'attente et. threading threads
Le code ci-dessus :#coding=utf-8 import requests import re from bs4 import BeautifulSoup as bs import Queue import threading class proxyPick(threading.Thread): def __init__(self,queue): threading.Thread.__init__(self) self._queue = queue def run(self): while not self._queue.empty(): url = self._queue.get() proxy_spider(url) def proxy_spider(url): headers = { ....... } r = requests.get(url = url,headers = headers) soup = bs(r.content,"html.parser") data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')}) for i in data: soup = bs(str(i),'html.parser') data2 = soup.find_all(name = 'td') ip = str(data2[1].string) port = str(data2[2].string) types = str(data2[5].string).lower() proxy = {} proxy[types] = '%s:%s'%(ip,port) try: proxy_check(proxy,ip) except Exception,e: print e pass def proxy_check(proxy,ip): url = 'http://1212.ip138.com/ic.asp' r = requests.get(url = url,proxies = proxy,timeout = 6) f = open('E:/url/ip_proxy.txt','a+') soup = bs(r.text,'html.parser') data = soup.find_all(name = 'center') for i in data: a = re.findall(r'\[(.*?)\]',i.string) if a[0] == ip: #print proxy f.write('%s'%proxy+'\n') print 'write down' f.close() #proxy_spider() def main(): queue = Queue.Queue() for i in range(1,2288): queue.put('http://www.xicidaili.com/nn/'+str(i)) threads = [] thread_count = 10 for i in range(thread_count): spider = proxyPick(queue) threads.append(spider) for i in threads: i.start() for i in threads: i.join() print "It's down,sir!" if __name__ == '__main__': main()
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!