Der folgende Editor zeigt Ihnen ein Beispiel für das Scannen von Python-Proxys und das Erhalten verfügbarer Proxy-IP. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor, um einen Blick darauf zu werfen
Heute werden wir ein sehr praktisches Tool schreiben, mit dem verfügbare Proxys gescannt und abgerufen werden können
Zuerst Zunächst einmal habe ich auf Baidu eine Website gefunden: www.xicidaili.com als Beispiel
Diese Website veröffentlicht viele Proxy-IPs und Ports, die im In- und Ausland verfügbar sind
Wir gehen weiterhin wie gewohnt vor. Zur Analyse scannen wir zunächst alle inländischen Proxys.
Klicken Sie auf den inländischen Teil, um ihn zu überprüfen und festzustellen, dass der inländische Proxy und das Verzeichnis die folgende URL haben:
www.xicidaili.com/nn/x
Dieses x hat fast zweitausend Seiten, es scheint also, dass eine Thread-Verarbeitung erneut erforderlich ist. . .
Wie üblich versuchen wir, den Inhalt direkt mit den einfachsten Anfragen abzurufen.get()
gibt 503 zurück, dann fügen wir einfache Header hinzu
und geben 200 zurück, OK
Okay, analysieren wir zunächst den Inhalt der Webseite und erhalten den gewünschten Inhalt
Wir haben festgestellt, dass sich der Inhalt mit IP-Informationen im
, aber wir haben später herausgefunden, dass sich der Inhalt von IP, Port und Protokoll im 2., 3. und 6.
Also haben wir angefangen zu schreiben, hier ist die Schreibidee:
Bei der Verarbeitung der Seite extrahieren wir zuerst das tr-Tag, und dann tr Extrahieren Sie das td-Tag im Tag
Daher werden zwei bs-Operationen verwendet, und bei der zweiten Verwendung der bs-Operation ist eine str-Verarbeitung erforderlich
Denn nachdem wir tr erhalten haben, wir brauchen zwei davon, Dinge Nr. 3 und 6,
Aber wenn wir die i-Ausgabe einer for-Schleife verwenden, können wir keine Gruppenoperationen ausführen
Also führen wir einfach eine zweite Operation durch jede TD-Suppe separat Extrahieren Sie dann direkt 2,3,6
Fügen Sie nach der Extraktion direkt .string hinzu, um den Inhalt zu extrahieren
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)
Auf diese Weise , Wir können jedes Mal eine Schleife erstellen, damit wir das
-Wörterbuch verwenden können, um die IP-Verfügbarkeit zu überprüfen. Hier müssen wir einen Vorgang zum Ändern des Typs in Kleinbuchstaben beachten. denn in den Proxys in der get-Methode schreiben Sie: Der eingegebene Protokollname sollte in Kleinbuchstaben geschrieben sein, und die Webseite crawlt den Inhalt in Großbuchstaben, sodass eine Groß-/Kleinschreibung durchgeführt wird.
Was ist also die Idee, das zu überprüfen? Verfügbarkeit der IP?
Es ist ganz einfach, get und unseren Agenten auf der Website anzufordern:
http://1212.ip138.com/ic.asp
Dies ist eine magische Website, die Ihre externe Netzwerk-IP zurückgeben kann.
url = 'http://1212.ip138.com/ic.asp' r = requests.get(url = url,proxies = proxy,timeout = 6)
Hier müssen wir eine Zeitüberschreitung hinzufügen, um die wartenden Agenten zu entfernen zu lang. Ich habe es auf 6 Sekunden eingestellt
Wir versuchen es mit einer IP und analysieren die zurückgegebene Seite
Der zurückgegebene Inhalt ist wie folgt:
<html> <head> <meta xxxxxxxxxxxxxxxxxx> <title> 您的IP地址 </title> </head> <body style="margin:0px"><center>您的IP是:[xxx.xxx.xxx.xxx] 来自:xxxxxxxx</center></body></html>
Dann müssen wir nur noch den Inhalt von [] auf der Webseite extrahieren
Wenn unser Proxy verfügbar ist, wird die IP des Proxys zurückgegeben
(die zurückgegebene Adresse wird die externe IP unseres lokalen Rechners sein) Obwohl mir die Situation nicht ganz klar ist, habe ich diese Situation ausgeschlossen. Der Proxy sollte immer noch nicht verfügbar sein)
Dann können wir eine machen Wenn die zurückgegebene IP mit der IP im Proxy-Wörterbuch übereinstimmt, denken Sie, dass diese IP ein verfügbarer Proxy ist, und schreiben Sie sie in die Datei
Das ist unsere Idee. Schließlich können wir die Warteschlange verarbeiten und Threading-Threads
Der Code oben:
#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()
Auf diese Weise können wir alle verfügbaren Proxy-IPs schreiben, die auf bereitgestellt werden die Website in die Datei ip_proxy.txt
Das obige ist der detaillierte Inhalt vonPython-Scan-Proxy und wie man die verfügbare Proxy-IP-Beispielfreigabe erhält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!