爬虫之代理IP

2021年09月15日 阅读数:1
这篇文章主要向大家介绍爬虫之代理IP,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

若是一个IP访问频率太高,则有可能会被对方的服务器封掉。html

解决方法:服务器

1. 下降访问频率,使用time.sleep()dom

2. 使用代理IPide

推荐使用的代理IP网站:测试

西刺代理:网站

快代理:https://www.kuaidaili.com/url

芝麻代理的使用方法:https://www.bilibili.com/video/BV1x5411c7hf?from=search&seid=9358258166195933835代理

代理网站一般提供免费代理和付费代理。免费代理很差用。快代理上提供的收费代理中,开发代理和私密代理中提供的IP不必定均可用,可是比免费的IP要好。code

开放代理可利用率低,私密代理还能够。一般使用私密代理。orm

能够创建本身的IP代理池,并试用代理IP的可用状况。能够使用www.baidu.com或httpbin.org/get测试代理IP的有效性。

 

import requestsfrom lxml import etreeimport timeimport randomclass ProxyPool:    def __init__(self):
        self.url = 'https://www.kuaidaili.com/free/inha/%d'
        self.test_url = 'http://www.baidu.com/'
        self.headers = {        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }    def get_proxy_pool(self,url):
        html = requests.get(url=url,headers=self.headers).text
        p = etree.HTML(html)
        tr_list = p.xpath('//*[@id="list"]/table//tr')        for tr in tr_list[1:]:
            ip = tr.xpath('./td[1]/text()')[0].strip()
            port = tr.xpath('./td[2]/text()')[0].strip()
            self.test_proxy(ip,port)    def test_proxy(self,ip,port):
        proxies = {            'http':'http://{}:{}'.format(ip,port),            'https':'https://{}:{}'.format(ip,port)
        }        try:
            res = requests.get(url=self.test_url,proxies=proxies,headers=self.headers,timeout=2)
            time.sleep(3)            if res.status_code==200:                print(ip,port,'\033[31m可用\033[0m')
                with open('proxy.text','a') as f:
                    f.write(ip+':'+port+'\n')        except Exception as e:            print(ip,port,'不可用')    def run(self):        for i in range(1,5):
            url = self.url%i            print(url)
            self.get_proxy_pool(url=url)if __name__ == '__main__':
    spider = ProxyPool()
    spider.run()