>백엔드 개발 >파이썬 튜토리얼 >프록시 IP를 얻는 Python 공유 예

프록시 IP를 얻는 Python 공유 예

不言
不言원래의
2018-05-07 14:08:292215검색

이 글은 주로 파이썬이 프록시 IP를 얻는 것에 대한 예시를 소개합니다. 특정 참조 값이 있습니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들은 이를 참조할 수 있습니다.

보통 우리는 필요한 데이터를 크롤링해야 할 때 항상 일부 웹사이트는 동일한 IP의 반복 방문을 금지합니다. 이때 우리는 "적"이 이를 감지할 수 없도록 각 방문 전에 프록시 IP를 사용하여 자신을 위장해야 합니다.

오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오오로이니, 즐겁게 시작하자!”

프록시 IP를 얻기 위한 파일입니다. 모듈화하여 3개의 기능으로 나누어 놓았습니다

참고: 코드 작성의 편의를 위해 본문에 영어 주석이 일부 있을 것입니다.

#!/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)

1. getIP(url_target): 주요 기능 수신 매개변수는 프록시 IP의 가용성을 확인하는 URL입니다. ipchina

에서 프록시 IP를 얻는 것이 좋습니다. , http://www.xicidaili.com/nn/ 웹사이트에서 가져오기, 무료 프록시 IP를 제공하는 웹사이트이지만, 여기에 포함된 모든 IP를 사용할 수 있는 것은 아니며 실제 지리적 위치, 네트워크 상태, 대상을 기반으로 합니다. 방문한 서버 등 20% 미만을 사용할 수 있습니다. 적어도 나에게는 상황이 이렇습니다.

일반적인 방법으로 http://www.xicidaili.com/nn/ 웹사이트를 방문하세요. 반환된 웹페이지 콘텐츠는 일반 쿼리를 통해 필요한 IP와 해당 포트를 얻습니다.

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))

구성 방법은 다음과 같습니다. 정규식은 다른 기사를 참조하세요.

얻은 IP는 findIP에 저장되고, 해당 포트는 findPORT에 있습니다. 둘은 인덱스로 서로 대응됩니다. 한 페이지에서 얻는 일반적인 IP 수는 100개입니다.

다음으로 IP와 포트를 연결합니다

마지막으로 가용성 확인

2. check_one(url_check,i): 스레드 기능

이번에도 웹 페이지에 액세스할 때 url_check는 여전히 일반적인 방법으로 액세스됩니다. , 이는 프록시 IP를 사용할 수 있음을 의미하며 현재 인덱스 값이 기록되어 나중에 사용 가능한 모든 IP를 추출하는 데 사용됩니다.

3.mul_thread_check(url_mul_check): 멀티 스레드 생성

이 기능을 사용하면 프록시 IP 가용성을 확인할 수 있으며 각 IP는 확인을 위한 스레드를 시작합니다.

이 프로젝트는 getIP()를 직접 호출하고 가용성을 확인하는 데 사용되는 URL을 전달하며, 이는 가용성이 확인된 IP 목록인 목록을

[&#39;ip1:port1&#39;,&#39;ip2:port2&#39;,....]

형식으로 반환합니다. 관련 권장 사항:

Python 크롤러 캡처 프록시 IP를 가져와 가용성을 확인하는 예

프록시 IP를 수집하고 사용 가능 여부를 확인하고 정기적으로 업데이트하는 Python 방법

위 내용은 프록시 IP를 얻는 Python 공유 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.