PythonはIP反爬虫処理方法に基づく--利用可能なエージェントプールを構築する

9248 ワード

目次
  • 反IP反爬虫法
  • コード例
  • アンチIPアンチ爬虫法
    本論文では,IPアンチ爬虫機構に基づくアンチ爬虫法を紹介し,利用可能なエージェントプールを構築する.前期準備、西刺代理アカウントを登録し、専門版代理店を購入する(または公開された利用可能な代理店を直接登ってもよい).なぜ購入をお勧めしますか?公開されているのは確かに使えないことが多いからです.西刺代理サイト:https://www.xicidaili.com/nt/エージェントを購入した後、APIを取得してコピーし、次のコードを実装してエージェントプールを構築します.
    コードの例
    import requests
    from lxml import etree
    from fake_useragent import UserAgent
    
    #   User-Agent
    def get_random_ua():
        ua = UserAgent()
        return ua.random
    
    #         API     
    url = 'API'
    
    #       IP       
    # [{'http':'http://xxxx:xx','https':'https://xxxx:xxx'},]
    def get_ip_list():
        #   user-agent
        headers = { 'User-Agent' : get_random_ua() }
        #        IP
        proxies = {
            'http': 'http://182.35.81.10:9999',
            'https': 'https://182.35.81.10:9999'
        }
        html = requests.get(url,proxies=proxies,headers=headers).text
        #   
        parse_html = etree.HTML(html)
        # r_list: [,]
        r_list = parse_html.xpath('//tr')
        #    ,    ip port
        proxy_list = []
        #     
        for r in r_list[1:]:
            ip = r.xpath('./td[2]/text()')[0]
            port = r.xpath('./td[3]/text()')[0]
            proxy_list.append(
                {
                    'http':'http://{}:{}'.format(ip,port),
                    'https':'https://{}:{}'.format(ip,port)
                }
            )
        # proxy_list: [{},{},{},{}]
        return proxy_list
        
    #     ,    IP 
    def proxy_pool():
        #       
        proxy_list = get_ip_list()
        #     IP  
        useful_proxy = []
        #         
        for proxy in proxy_list:
            # proxy: {'http':'http://xxxx:xx'}
            headers = {'User-Agent':get_random_ua()}
            try:
                res = requests.get(
                    url = 'http://httpbin.org/get',
                    headers=headers,
                    proxies = proxy,
                    timeout = 5
                )
                print(res.text)
                useful_proxy.append(proxy)
            except Exception as e:
                print('{}   '.format(proxy))
                continue
        return useful_proxy
    
    if __name__ == '__main__':
        proxy_pool()
        #useful_proxy          。
    

    エージェントプールを構築すると、ランダムにエージェントを選択して爬虫類を作成できます.