python/웹크롤링

[웹크롤링] 랜덤 uger-agent, 랜덤 Proxy IP 우회 class

달죽 2020. 11. 12. 22:20
반응형
from http_request_randomizer.requests.proxy.requestProxy import RequestProxy
from fake_headers import Headers
import requests

class RANDOM_PROXY:

	def __init__(self):
    	self.proxy = self.proxy_crate()
    	self.crawling()

    def proxy_create(self):
        """
        무작위로 프록시를 생성해서 가져오는 코드
        """
        self.req_proxy = RequestProxy()
        proxy = self.test_proxy() # 잘 작동되는 프록시 선별
        return proxy

    def test_proxy(self):
    	"""
        가져온 프록시중에서 실제로 작동되는 프록시만 하나씩 가져오는 코드
        test_url : 자신의 IP를 확인하는 코드. 여기서 변경된 IP가 나오면 성공적으로 우회가된것
        """
        
        test_url = 'http://ipv4.icanhazip.com' 
        while True: # 제대로된 프록시가 나올때까지 무한반복 
            requests = self.req_proxy.generate_proxied_request(test_url)

            if requests is not None:
                print("\t Response: ip={0}".format(u''.join(requests.text).encode('utf-8')))
                proxy = self.req_proxy.current_proxy
                break

            else:
                continue
                
        return proxy # 잘작동된 proxy를 뽑아준다. 
        
    def crawling(self):
       header = Headers(
                    browser="chrome",  # Generate only Chrome UA
                    os="win",  # Generate ony Windows platform
                    headers=True  # generate misc headers
                )
       self.headers = header.generate() # 랜덤 유저 에이전트를 생성해주는 함수.
       _url = 원하는 주소 
       
       self.proxies = {} # request.get 인자에 넣어줄 딕셔너리 생성 
       self.proxies['http'] = 'http://%s' % self.proxy
       
       html = self.session.get(_url, headers=self.headers,proxies=self.proxies).content
       # get 인자에 프록시와 헤더를 넣어주면 끝.
       
 if __name__ == "__main__":
    
    RANDOM_PROXY()

 

 

필요한 패키지 

 

pip install RequestProxy
pip install fake_headers

 

 

무적 크롤링 완성~ 환경은 windows10, python=3.7 이다.

클래스로 만든뒤 병렬로 돌리면 동시에 잘 돌아간다. 

 

 

결국엔 만들었네.. 휴 

반응형