採集15個代理IP網站,打造免費代理IP池

採集的站點:php

免費代理IP http://ip.yqie.com/ipproxy.htm
66免費代理網 http://www.66ip.cn/
89免費代理 http://www.89ip.cn/
無憂代理 http://www.data5u.com/
雲代理 http://www.ip3366.net/
快代理 https://www.kuaidaili.com/free/
極速專享代理 http://www.superfastip.com/
HTTP代理IP https://www.xicidaili.com/wt/
小舒代理 http://www.xsdaili.com
西拉免費代理IP http://www.xiladaili.com/
小幻HTTP代理 https://ip.ihuan.me/
全網代理IP http://www.goubanjia.com/
飛龍代理IP http://www.feilongip.com/web

 

採集流程app

第一步:獲取頁面內容dom

第二步:解析內容獲取數據網站

第三步:數據格式轉換編碼

採集流程定製好了以後,把他建立爲抽象類 讓全部站點去繼承它, 子類只須要去實現抽象方法。這是一個比較典型的模板模式url

 

基類spa

from abc import ABC, abstractmethod
from typing import List
import requests
import bs4
from .model import ProxyModel


class AbsFreeProxyBase(ABC):
    # 請求
    http = requests

    # 初始化
    def __init__(self, url, code, **kwargs):
        """
        :param url: 請求地址
        :param code: 頁面編碼
        :param kw: 附加信息
        """
        self.url = url
        self.code = code
        self.kwargs = kwargs
        self.beautifulsoup = bs4.BeautifulSoup

    # 模板方法模式
    # 第一步 獲取頁面內容  第二步 解析內容  第二步 格式化數據
    def run(self) -> List[ProxyModel]:
        text = self.get_page_text()
        soup = self.beautifulsoup(text, 'lxml')
        data = self.parse_text(soup)
        return self.to_proxy(data)

    # 獲取頁面內容
    def get_page_text(self):
        res = AbsFreeProxyBase.http.get(self.url, **self.kwargs)
        if not res.ok:
            res.raise_for_status()
        return res.content.decode(self.code)

    # 解析內容
    @abstractmethod
    def parse_text(self, soup: bs4.BeautifulSoup) -> List[list]:
        pass

    # 格式轉換
    @abstractmethod
    def to_proxy(self, data:List[list]) -> List[ProxyModel]:
        pass

如:快代理網站.net

from .base import AbsFreeProxyBase
from typing import List
from .model import ProxyModel
import re

'''
快代理
https://www.kuaidaili.com/free
'''


class WWW_KUAIDAILI_COM(AbsFreeProxyBase):

    # 初始化
    def __init__(self, url, code='utf-8', **kwargs):
        super().__init__(url, code, **kwargs)

    # 解析內容
    def parse_text(self, soup) -> List[list]:
        """
        格式以下:
        IP     port(端口)     匿名度     類型(HTTP/https)     位置     響應速度     最後驗證時間
        """
        regex = re.compile(r'<td[^>]*>([^<>]+)</td>')
        rows = soup.select('.table-bordered tr')
        result = []
        for row in [str(n) for n in rows]:
            item = regex.findall(row)
            item and result.append(item)
        return result

    # 格式轉換
    def to_proxy(self, data: List[list]) -> List[ProxyModel]:
        result = []
        for item in data:
            result.append(ProxyModel(item[3], item[0], item[1], item[2]))
        return result

 

 

 

應用實列代理

from website import ProxyFactory
from browser.agent import useragent

factory = ProxyFactory()
headers = {
    'user-agent': useragent.random()
}
'''
66免費代理網
www = factory.create('http://www.66ip.cn/mo.php?sxb=&tqsl=100&port=&export=&ktip=&sxa=&submit=%CC%E1++%C8%A1&textarea=',
                     'gbk',
                     headers=headers)
'''

'''
小幻HTTP代理 
www = factory.create('https://ip.ihuan.me/',headers = headers)
'''

'''
89免費代理 http://www.89ip.cn/
www = factory.create('http://www.89ip.cn/',headers = headers)
'''

'''
無憂代理 http://www.data5u.com/
www = factory.create('http://www.data5u.com/',headers = headers)
'''


'''
http://www.goubanjia.com/
全網代理IP 
www = factory.create('http://www.goubanjia.com/',headers = headers)
'''


'''
雲代理 http://www.ip3366.net/
www = factory.create('http://www.ip3366.net/','gbk',headers = headers)
'''

'''
快代理
https://www.kuaidaili.com/free
'''
www = factory.create('https://www.kuaidaili.com/free',headers = headers)
data = www.run()

print(data)

百度網盤

連接:https://pan.baidu.com/s/1aNiuGpcDmgvUR2HmZKR99Q 提取碼:6u82

相關文章
相關標籤/搜索