简单制作属于自己的代理池

简单制作属于自己的代理池

  • 简单制作属于自己的代理池

简单制作属于自己的代理池

今天做一个简单的ip代理池,从免费代理平台抓取代理ip、端口,做一个可以使用的代理池,用来做爬虫等。

整体很简单:

  • 1、抓取免费代理网站
  • 2、提取代理信息
  • 3、测试代理能否正常使用

需求明确,那就,开始吧!

抓取代理的地址:链接
网页截图:
简单制作属于自己的代理池_第1张图片
代码如下,仅供参考,这个网站提供的都不太好用,下一次换一个再写一篇:

# coding:utf-8

"""
免费代理抓取
2021.01.09
"""

import requests
import time
from faker import Faker
from lxml import etree


class Proxy_Spider(object):
    def __init__(self):
        self.kuai_proxy_url = 'https://www.kuaidaili.com/free/inha/{}/'
        self.faker = Faker()
        self.proxy_list = []
        self.headers = {
     
            'user-agent': self.faker.user_agent(),
        }

    def get_data(self, url, proxy=None):
        s = requests.session()
        resp = s.get(url, headers=self.headers, proxies=proxy, timeout=30)
        return resp.text

    def proxy_test(self, proxy2):
        print(proxy2)
        url = 'http://ifconfig.me/ip'
        proxy = {
     
            f'http': f'http://{proxy2[0][0]}:{proxy2[1][0]}',
            f'https': f'http://{proxy2[0][0]}:{proxy2[1][0]}'
        }
        print(proxy)
        try:
            resp = requests.get(url, self.headers, proxies=proxy, timeout=10, verify=False)
        except Exception as e:
            print('代理不可用', e)
            return False
        print(resp.text)
        if proxy2[0][0] in resp.text:
            print('代理可用, 插入代理池')
            self.proxy_list.append(proxy)
        else:
            print('代理不可用')

    def parse_html(self, html):
        html = etree.HTML(html)
        tr_list = html.xpath('//*[@id="list"]/table/tbody/tr')
        data_json = []
        if len(tr_list) > 0:
            for tr in range(len(tr_list)):
                prox_list = []
                ip = html.xpath(f'//*[@id="list"]/table/tbody/tr[{tr}]/td[1]/text()')
                port = html.xpath(f'//*[@id="list"]/table/tbody/tr[{tr}]/td[2]/text()')
                http = html.xpath(f'//*[@id="list"]/table/tbody/tr[{tr}]/td[4]/text()')
                speed = html.xpath(f'//*[@id="list"]/table/tbody/tr[{tr}]/td[6]/text()')
                prox_list.append(ip)
                prox_list.append(port)
                prox_list.append(http)
                prox_list.append(speed)
                # print(prox_list)
                if len(ip) == 0:
                    pass
                else:
                    data_json.append(prox_list)
        return data_json

    def run(self):
        for page in range(1, 5):
            html = self.get_data(self.kuai_proxy_url.format(str(page)))
            proxy_list = self.parse_html(html)
            for proxy in proxy_list:
                self.proxy_test(proxy)
                # time.sleep(3)
        print(self.proxy_list)

if __name__ == '__main__':
    p = Proxy_Spider()
    p.run()

你可能感兴趣的:(python,python,爬虫,静态代理)