python的proxybroker库图形界面代码

在国内可以使用proxybroker包,但可能会受到一些限制,除了某些 Python 版本不兼容(如 Python3.5 可能存在编码问题,Python3.10 中已移除了proxybroker使用的loop等),还有以下限制:

  • 网络环境限制:国内的网络环境可能会对访问一些代理源进行限制,导致无法获取到代理 IP 或者获取速度很慢。部分国外的代理 IP 地址可能在国内无法正常使用,或者使用起来不稳定。

  • 代理可用性:即使获取到了代理 IP,其可用性也不能完全保证。有些代理可能已经失效、速度很慢,或者存在其他问题,需要进行验证和筛选。

  • 法律法规限制:使用代理 IP 时需要遵守国内的法律法规。如果将代理 IP 用于非法或违规的目的,可能会面临法律风险。

  • 网站限制:目标网站可能有自己的反爬虫机制和限制策略,会对使用代理 IP 的访问进行检测和限制。例如,一些网站可能会对频繁更换 IP 的访问行为进行限制或封禁。

    总的来讲,这段代码运行容易出错,上面 天傲到了原因。不要花费太大力气在上面,不要太纠结!!!

proxybroker`的 GitHub 地址

以下是图形界面查询代理服务器代码(可以试下):

  • 首先安装proxybroker库:
pip install proxybroker -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 运行下列代码,注意请使用python3.7 or 3.8版本:
import asyncio
import tkinter as tk
from proxybroker import Broker
import requests

def display_proxies(proxies):
    for proxy in proxies:
        proxy_info = f'{proxy.type}://{proxy.host}:{proxy.port}'
        proxy_text.insert(tk.END, proxy_info + '\n')

async def find_proxies():
    proxies = []
    broker = Broker()
    found_proxies = await broker.find(types=['HTTP', 'HTTPS'], limit=10)
    for proxy in found_proxies:
        try:
            response = requests.get('https://www.example.com', proxies={'http': f'{proxy.type}://{proxy.host}:{proxy.port}',
                                                                         'https': f'{proxy.type}://{proxy.host}:{proxy.port}'}, timeout=5)
            if response.status_code == 200:
                proxies.append(proxy)
        except (requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError):
            pass
    display_proxies(proxies)

def on_find_clicked():
    asyncio.run(find_proxies())

root = tk.Tk()
root.title("Proxy Finder")

proxy_text = tk.Text(root)
proxy_text.pack()

find_button = tk.Button(root, text="Find Proxies", command=on_find_clicked)
find_button.pack()

root.mainloop()

以下是对这段代码的解释:

import asyncio
import tkinter as tk
from proxybroker import Broker
import requests
  • 导入了必要的模块。asyncio用于异步编程;tkinter是 Python 的标准 GUI 工具包,这里使用别名tk来方便引用;from proxybroker import Broker导入了proxybroker库中的Broker类,用于查找代理;requests模块用于发送 HTTP 请求来验证代理的可用性。
def display_proxies(proxies):
    for proxy in proxies:
        proxy_info = f'{proxy.type}://{proxy.host}:{proxy.port}'
        proxy_text.insert(tk.END, proxy_info + '\n')
  • 定义了一个函数display_proxies,接受一个代理列表作为参数。函数遍历代理列表,将每个代理的信息格式化为字符串(如http://127.0.0.1:8080),并插入到一个tkinter.Text组件(后面定义的proxy_text)中,每个代理信息占一行。
async def find_proxies():
    proxies = []
    broker = Broker()
    found_proxies = await broker.find(types=['HTTP', 'HTTPS'], limit=10)
    for proxy in found_proxies:
        try:
            response = requests.get('https://www.example.com', proxies={'http': f'{proxy.type}://{proxy.host}:{proxy.port}',
                                                                         'https': f'{proxy.type}://{proxy.host}:{proxy.port}'}, timeout=5)
            if response.status_code == 200:
                proxies.append(proxy)
        except (requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError):
            pass
    display_proxies(proxies)
  • 定义了一个异步函数find_proxies。首先创建一个空的代理列表proxies。然后创建一个Broker对象,使用await broker.find(types=['HTTP', 'HTTPS'], limit=10)异步查找最多 10 个 HTTP 和 HTTPS 类型的代理。对于找到的每个代理,尝试使用该代理向https://www.example.com发送请求,如果请求成功且响应状态码为 200,则将该代理添加到proxies列表中。如果出现连接超时或连接错误,则忽略该代理。最后调用display_proxies函数显示可用的代理。
def on_find_clicked():
    asyncio.run(find_proxies())
  • 定义了一个函数on_find_clicked,当按钮被点击时调用。它使用asyncio.run运行异步函数find_proxies
root = tk.Tk()
root.title("Proxy Finder")
  • 创建一个tkinter.Tk对象,代表应用的主窗口,并设置窗口标题为 “Proxy Finder”。
proxy_text = tk.Text(root)
proxy_text.pack()
  • 创建一个tkinter.Text组件,用于显示找到的代理信息,并使用pack方法将其放置在主窗口中。
find_button = tk.Button(root, text="Find Proxies", command=on_find_clicked)
find_button.pack()
  • 创建一个tkinter.Button按钮,文本为 “Find Proxies”,当按钮被点击时执行on_find_clicked函数。然后将按钮放置在主窗口中。
root.mainloop()
  • 启动tkinter的主事件循环,使应用程序持续运行,等待用户交互。
  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值