Python 으로 익명 에이전트 만 들 기

36701 단어 python 학습
01 앞 에 쓴다
       많은 사람들 이 자신의 IP 가 파충류 의 횟수 가 너무 많아 서 사이트 에 차단 되 어 각종 대리 IP 를 자주 사용 할 수 밖 에 없다 고 불평 하 는 것 을 자주 듣는다.그러나 인터넷 의 공개 대리 가 대부분 사용 할 수 없 기 때문에 돈 을 써 서 VIP 대 리 를 신청 해 야 하기 때문에 몇 번 의 우여곡절 끝 에 차단 되 었 다.파 이 썬 을 이용 하여 프 록 시 풀 을 만 드 는 방법 에 대한 글 을 써 서 시간 과 정력 원 가 를 낮 추고 자동화 로 활성 화 된 프 록 시 IP 를 얻 는 기능 을 실현 합 니 다.
 
02 작 동 원리
1.사이트 에이전트 획득
1.    무료 프 록 시 사이트 의 IP 목록 에 올 라 가 사용 가능 여부 및 은닉 여 부 를 테스트 합 니 다.
2.    만약 모두 그렇다면 데이터베이스 에 넣 어 라,그렇지 않 으 면 버 려 라.
3.    2 단계 반복
 
2.실 효 를 보장 하 는 대리 가 가능 한 한 빨리 대리 지 에서 뽑 힐 수 있 습 니 다.
1.    파충류 데이터베이스 에서 IP 획득
2.    IP 의 가용성 과 익명 성 을 테스트 하 다
3.    사용 가능 하고 익명 이면 보류 합 니 다.그렇지 않 으 면 버 립 니 다.
4.    1 단계 반복
 
설명 ①:파충류 프로그램 데 몬(Daemon)을 만 들 수 있 고 이런 부분 에 필요 한 파트너 가 스스로 구 글 을 만 들 수 있 으 며 더 이상 소개 하지 않 는 다.
설명 ②:대외 대리 정보 인 터 페 이 스 를 만 들 수 있 습 니 다.NodeJS 나 Flask/Django 또는 PHP 로 써 도 괜 찮 습 니 다.여기 서 더 이상 소개 하지 않 습 니 다.
 
03 실현
       제안 라 이브 러 리:requests,BeautifulSoup,re,sqlite 3.
       그 중에서 requests 라 이브 러 리 로 프 록 시 페이지 를 얻 고 BeautifulSoup 과 re 두 라 이브 러 리 로 프 록 시 정 보 를 얻 으 며 sqlite 3 으로 이 정 보 를 액세스 합 니 다.
       필요 하 다 면(예 를 들 어 프 록 시 사이트 에 반 파충류 정책 이 있 을 때)PhantomJS 로 requests 를 대체 하거나 해당 라 이브 러 리 로 데이터 청 소 를 할 수 있 습 니 다(예 를 들 어 base 64 디 코딩).
 
다음은 각 부분의 코드 를 간단하게 보 여 드 리 겠 습 니 다.
       우선 프 록 시 를 찾 을 수 있 고 IP 가 차단 되 지 않 는 여러 개의 사 이 트 를 선택 하 십시오.여 기 는 proxy-list.org 를 예 로 들 면:
  • BASE_URL = "https://proxy-list.org/english/index.php?p="

  • #IP

  • Re_Pattern_IP = re.compile("(.*):")
  • Re_Pattern_PORT = re.compile(":(.*)")

  • # 11 , 11 IP

  • for startingURL_Param in range(1,11):
  •    HTML_ProxyPage = requests.get(BASE_URL+str(startingURL_Param)).content
  •    soup = bs(HTML_ProxyPage,"html.parser")
  •    for Raw_ProxyInfo in soup.find_all("ul",{"class":None}):
  •        # Base64 ,
  •        ip_port = base64.b64decode(Raw_ProxyInfo.find("li",{"class":"proxy"}).text.replace("Proxy('","").replace("')",""))
  •        #
  •        IP = re.findall(Re_Pattern_IP, ip_port)[0]
  •        PORT = re.findall(Re_Pattern_PORT, ip_port)[0]
  •        TYPE = Raw_ProxyInfo.find("li",{"class":"https"}).text
  •  

            , 、 、 、 :

     

    1. class ProxyPool:        

    2.    #
    3.    def __init__(self,ProxyPoolDB):
    4.        self.ProxyPoolDB = ProxyPoolDB
    5.        self.conn = sqlite3.connect(self.ProxyPoolDB, isolation_level=None)
    6.        self.cursor = self.conn.cursor()
    7.        self.TB_ProxyPool = "TB_ProxyPool"
    8.        self.cursor.execute("CREATE TABLE IF NOT EXISTS "+self.TB_ProxyPool+"(ip TEXT UNIQUE, port INTEGER, protocol TEXT)")

    9.    # IP

    10.    def addProxy(self, IP, PORT, PROTOCOL):  
    11.        self.cursor.execute("INSERT OR IGNORE INTO " + self.TB_ProxyPool+"(ip, port, protocol) VALUES (?,?,?)", [IP,PORT,PROTOCOL])

    12.    #

    13.    def testConnection(self, IP, PORT, PROTOCOL):
    14.        proxies = { PROTOCOL: IP+":"+PORT }
    15.        try:
    16.            OrigionalIP = requests.get("http://icanhazip.com", timeout=REQ_TIMEOUT).content
    17.            MaskedIP = requests.get("http://icanhazip.com", timeout=REQ_TIMEOUT, proxies=proxies).content
    18.            if OrigionalIP != MaskedIP:
    19.                return True
    20.            else:
    21.                return False
    22.        except:    
    23.            return False

    24.    # IP

    25.    def delRecord(self, IP):
    26.        self.cursor.execute("DELETE FROM "+self.TB_ProxyPool+" WHERE ip=?",(IP,))


              “ IP” :   


      1.    # , IP

      2. def cleanNonWorking(self):
      3.    for info in self.cursor.execute("SELECT * FROM "+self.TB_ProxyPool).fetchall():
      4.        IP = info[0]
      5.        PORT = str(info[1])
      6.        PROTOCOL = info[2].lower()

      7.        isAnonymous = self.testConnection(IP,PORT,PROTOCOL)

      8.        if isAnonymous == False:
      9.            # ,
      10.            self.delRecord(IP)

      11. # icanhazip.com

      12. def testConnection(self, IP, PORT, PROTOCOL):
      13.        proxies = { PROTOCOL: IP+":"+PORT }
      14.        try:
      15.            OrigionalIP = requests.get("http://icanhazip.com", timeout=REQ_TIMEOUT).content
      16.            MaskedIP = requests.get("http://icanhazip.com", timeout=REQ_TIMEOUT, proxies=proxies).content
      17.            if OrigionalIP != MaskedIP:
      18.                return True
      19.            else:
      20.                return False
      21.        except:    
      22.            return False

      23. 04

                Python , , , , , , , 。

                icanhazip.com , X-Forwarded-For HTTP , , 。

                , , 。

         

        05

                , 。 Github ,Ubuntu 16.04 Kali Python 2.7 。


    좋은 웹페이지 즐겨찾기