美文网首页
Python爬虫代理

Python爬虫代理

作者: 熊定坤 | 来源:发表于2018-08-14 22:17 被阅读0次
    为什么使用代理

    在爬取网站信息的过程中,有些网站为了防止爬虫,可能会限制每个ip的访问速度或访问次数。对于限制访问速度的情况,我们可以通过time.sleep进行短暂休眠后再次爬取。对于限制ip访问次数的时候我们需要通过代理ip轮换去访问目标网址。

    从哪里获取代理IP

    付费获取代理IP,或者通过爬取免费代理的网站网站获取代理IP,有如下可以免费获取代理IP的网站
    快代理代理66有代理西刺代理guobanjia国内高匿代理IP

    如何保证代理质量

    由于免费代理IP大部分不能用,所以采集回来的代理IP不能直接使用,可以写检测程序不断的去用这些代理访问一个稳定的网站,看是否可以正常使用。这个过程可以使用多线程或异步的方式,因为检测代理是个很慢的过程。

    基本流程

    1.从代理网站爬取代理IP(本次爬取国内高匿代理,网址https://link.jianshu.com/?t=http%3A%2F%2Fwww.xicidaili.com%2Fnn%2F
    2.将爬取的代理IP保存至本地txt文档
    3.遍历文档,用代理IP访问常用网址剔除不可用和质量低的代理IP

    • 使用多线程爬取高匿代理前10页的代理IP并保存至桌面ip_list.txt文档
    import threading
    import os
    import requests
    from bs4 import BeautifulSoup
    import re 
    def get_proxy(num):
        os.chdir(r'C:\Users\Administrator\Desktop')
        f = open('ip_list.txt','a',encoding='utf-8')
        urls = ['http://www.xicidaili.com/nn/%i' %i for i in range(num+1)] 
        headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
        for url in urls:
            response = requests.get(url,headers = headers)
            soup = BeautifulSoup(response.text,"lxml")
            ip_info = soup.find_all('tr',class_='odd')
            try:
                for i in ip_info:
                    ip = i.find_all('td')[1].text
                    port = i.find_all('td')[2].text
                    proxy = ip + ':' + port +'\n' 
                    f.write(proxy)
            except Exception as e:
                print('NO IP')
        f.close()
    t = threading.Thread(target=get_proxy,args=(10,))
    t.start()
    t.join()
    
    • 对保存至桌面文档的代理IP进行测试,将测试能够达到要求的ip添加至proxys_list列表
    proxys_list = []
    def test_proxy():
        os.chdir(r'C:\Users\Administrator\Desktop')
        f = open('ip_list.txt','r',encoding='utf-8')
        pros = f.readlines()
        url = 'https://www.baidu.com/'
        headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
        for pro in pros:
            proxy = ('http://'+ pro).strip('\n')
            proxies = {'proxy':proxy}
            print(proxies)
            try:
                response = requests.get(url,headers = headers,proxies = proxies)
            except Exception as e:
                pass
            else:
                code = response.status_code
                if code >= 200 and code < 300:
                    proxys_list.append(proxies)
                else:
                    continue
        return(proxys_list)
    t2 = threading.Thread(target=test_proxy)
    t2.start()
    t2.join()
    
    有没有构建好的代理池

    有,项目地址

    ProxyPool

    项目说明文档

    如何构建一个代理池

    代理池流程

    安装Python

    至少Python3.5以上

    安装Redis

    安装好之后将Redis服务开启

    配置代理池

    cd proxypool
    

    进入proxypool目录,修改settings.py文件

    PASSWORD为Redis密码,如果为空,则设置为None

    安装依赖

    pip3 install -r requirements.txt
    

    打开代理池和API

    python3 run.py
    

    获取代理

    利用requests获取方法如下

    import requests
    
    PROXY_POOL_URL = 'http://localhost:5555/random'
    
    def get_proxy():
        try:
            response = requests.get(PROXY_POOL_URL)
            if response.status_code == 200:
                return response.text
        except ConnectionError:
            return None
    

    相关文章

      网友评论

          本文标题:Python爬虫代理

          本文链接:https://www.haomeiwen.com/subject/rcfvbftx.html