Exemple de partage de python obtenant une adresse IP proxy

不言
Libérer: 2018-05-07 14:08:29
original
2204 Les gens l'ont consulté

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&#39;(?<=<td>)[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}&#39;)
 patternPORT = re.compile(r&#39;(?<=<td>)[\d]{2,5}(?=</td>)&#39;)
 print "now,start to refresh proxy IP..."
 for page in range(1,4):
  url = &#39;http://www.xicidaili.com/nn/&#39;+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(&#39;get page&#39;, 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(&#39;User-Agent&#39;,"Mozilla/5.0 (Windows NT 10.0; WOW64)")
  html = urllib2.urlopen(request).read()
  lock.acquire()
  print(IP_data[i],&#39;is OK&#39;)
  #get available ip index
  available_table.append(i)
  lock.release()
 except Exception as e:
  lock.acquire()
  print(&#39;error&#39;)
  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 = {&#39;http&#39;: IP_data[available_table[error_cnt]]}
  IP_data_checked.append(aseemble_ip)
 print "available proxy ip:",len(available_table)
Copier après la connexion

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&#39;(?<=<td>)[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}&#39;)
patternPORT = re.compile(r&#39;(?<=<td>)[\d]{2,5}(?=</td>)&#39;)
...
findIP = re.findall(patternIP,str(content))
findPORT = re.findall(patternPORT,str(content))
Copier après la connexion

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

[&#39;ip1:port1&#39;,&#39;ip2:port2&#39;,....]
Copier après la connexion

Recommandations associées :

Instance d'un robot d'exploration Python récupérant l'adresse IP du proxy et vérifiant la disponibilité

Python collectant l'adresse IP du proxy et jugeant si elle est disponible et mise à jour régulièrement Méthode

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!