采集15个代理IP网站,打造免费代理IP池
程序员文章站
2022-05-18 20:07:28
采集的站点: 免费代理IP http://ip.yqie.com/ipproxy.htm66免费代理网 http://www.66ip.cn/89免费代理 http://www.89ip.cn/无忧代理 http://www.data5u.com/云代理 http://www.ip3366.net/ ......
采集的站点:
免费代理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/
采集流程
第一步:获取页面内容
第二步:解析内容获取数据
第三步:数据格式转换
采集流程定制好了之后,把他创建为抽象类 让所有站点去继承它, 子类只需要去实现抽象方法。这是一个比较典型的模板模式
基类
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
如:快代理网站
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
上一篇: Python爬虫,爬取腾讯漫画实战
下一篇: python依赖包整体迁移方法(pip)