Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Scan-Proxy und wie man die verfügbare Proxy-IP-Beispielfreigabe erhält

Python-Scan-Proxy und wie man die verfügbare Proxy-IP-Beispielfreigabe erhält

黄舟
黄舟Original
2017-08-07 15:36:291696Durchsuche

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 a34de1251f0d9fe1e645927f19a896e8-Tag befindet, sodass wir bs problemlos verwenden können um den Tag-Inhalt zu erhalten

, aber wir haben später herausgefunden, dass sich der Inhalt von IP, Port und Protokoll im 2., 3. und 6. b6c5a531a458a2e790c1fd6421739d1c-Tag befindet

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 = &#39;tr&#39;,attrs = {&#39;class&#39;:re.compile(&#39;|[^odd]&#39;)})

 for i in data:

  soup = bs(str(i),&#39;html.parser&#39;)
  data2 = soup.find_all(name = &#39;td&#39;)
  ip = str(data2[1].string)
  port = str(data2[2].string)
  types = str(data2[5].string).lower() 


  proxy = {}
  proxy[types] = &#39;%s:%s&#39;%(ip,port)
  try:
   proxy_check(proxy,ip)
  except Exception,e:
   print e
   pass

def proxy_check(proxy,ip):
 url = &#39;http://1212.ip138.com/ic.asp&#39;
 r = requests.get(url = url,proxies = proxy,timeout = 6)

 f = open(&#39;E:/url/ip_proxy.txt&#39;,&#39;a+&#39;)

 soup = bs(r.text,&#39;html.parser&#39;)
 data = soup.find_all(name = &#39;center&#39;)
 for i in data:
  a = re.findall(r&#39;\[(.*?)\]&#39;,i.string)
  if a[0] == ip:
   #print proxy
   f.write(&#39;%s&#39;%proxy+&#39;\n&#39;)
   print &#39;write down&#39;
   
 f.close()

#proxy_spider()

def main():
 queue = Queue.Queue()
 for i in range(1,2288):
  queue.put(&#39;http://www.xicidaili.com/nn/&#39;+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&#39;s down,sir!"

if __name__ == &#39;__main__&#39;:
 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn