gpt4 book ai didi

python - 检查 python/selenium 中的代理

转载 作者:行者123 更新时间:2023-12-01 01:38:39 25 4
gpt4 key购买 nike

我正在尝试使用 selenium 和 python 连接到站点。然后我决定在整个过程中添加代理并使用它们连接到站点。使用 Proxy Broker(python 模块)来抓取代理。这样我就可以抓取很多代理。然后,我将其保存到文本文件中,当我需要连接时,我从文本文件中随机选择它。然而问题就在这里出现。连接到站点时,代理有时不起作用。目前这是我正在使用的代码:

        import asyncio
from proxybroker import Broker


async def save(proxies, filename):
"""Save proxies to a file."""
with open(filename, 'w') as f:
while True:
proxy = await proxies.get()
if proxy is None:
break
proto = 'https' if 'HTTPS' in proxy.types else 'http'
row = '%s://%s:%d\n' % (proto, proxy.host, proxy.port)
f.write(row)


def main():
proxies = asyncio.Queue()
broker = Broker(proxies)
tasks = asyncio.gather(broker.find(types=['HTTP', 'HTTPS'], limit=5),
save(proxies, filename='proxies.txt'))
loop = asyncio.get_event_loop()
loop.run_until_complete(tasks)


if __name__ == '__main__':
main()

lines = open('proxies.txt').read().splitlines()
rproxy =random.choice(lines)
PROXY = rproxy

此代码是来自代理代理示例页面 (https://proxybroker.readthedocs.io/en/latest/examples.html) 的示例代码

所以我想要做的是两件事之一:

选项 1:在抓取代理后立即检查代理,然后将可用的代理保存在文本文件中并稍后调用

选项 2:在连接到站点之前检查代理。因此它会检查代理是否工作,如果有效则使用它。如果没有,它会尝试使用另一个。

我真的不知道如何做到这一点。我的 friend 建议的一件事是使用请求并查看代理是否有效,但我遇到了问题,因为我无法格式化代理列表以自动与请求一起使用。

非常感谢任何帮助/提示。提前致谢!!!!

(编辑)我已经尝试过诸如此类的帖子:

Proxy Check in python

https://github.com/ApsOps/proxy-checker

https://www.calazan.com/how-to-use-proxies-with-an-http-session-using-the-python-requests-package/

https://codereview.stackexchange.com/questions/169246/python-proxy-checker-scanner

他们都不适合我:(

最佳答案

嗯,我看了一下 proxybroker documentation我发现最好的解决方案是检查内置属性proxy.is_working:

results = []
for proto in ngtrs:
if proto == 'CONNECT:25':
result = await self._check_conn_25(proxy, proto)
else:
result = await self._check(proxy, proto)
results.append(result)

proxy.is_working = True if any(results) else False

您可以在代码中实现它,如下所示:

import asyncio
from proxybroker import Broker


def get_random_proxy():
"""
Get random proxy from 'proxies.txt'.
"""
lines = open('proxies.txt').read().splitlines()
rproxy =random.choice(lines)
PROXY = rproxy


async def save(proxies, filename):
"""
Save proxies to a file.
"""
with open(filename, 'w') as file:
while True:
proxy = await proxies.get()
if proxy is None:
break
# Check accurately if the proxy is working.
if proxy.is_working:
protocol = 'https' if 'HTTPS' in proxy.types else 'http'
line = '{protocol}://{proxy.host}:{proxy.port}\n'
file.write(line)


def main():
proxies = asyncio.Queue()
broker = Broker(proxies)
tasks = asyncio.gather(broker.find(types=['HTTP', 'HTTPS'], limit=5),
save(proxies, filename='proxies.txt'))
loop = asyncio.get_event_loop()
loop.run_until_complete(tasks)


if __name__ == '__main__':
main()

关于python - 检查 python/selenium 中的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com