我正在尝试使用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
此代码是Proxy Broker示例页面(https://proxybroker.readthedocs.io/en/latest/examples.html)
中的示例代码。所以我想做的是两件事之一:
选项1:在删除代理后立即检查代理,然后将可以使用的代理保存在文本文件中,以后再调用
选项2:在连接到站点之前立即检查代理。因此,它将检查代理是否有效,然后是否使用它。如果没有,它会尝试另一个。
我真的不知道如何执行此操作。我的朋友建议的一件事是使用请求并查看代理是否有效,但是我遇到了问题,因为我无法自动格式化代理列表以用于请求。
非常感谢您的帮助/提示。预先谢谢!!!
(编辑)我已经尝试过诸如此类的帖子:
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
他们都没有为我工作:(
答案 0 :(得分:1)
好吧,我看了一下proxybroker documentation,发现最好的解决方案是检查内置属性interface DrawableSegment {}
class LineSegment implements DrawableSegment {}
class PercentageSegment implements DrawableSegment {}
class Barchart<T extends DrawableSegment> {
List<DrawableSegment> drawableSegList = new ArrayList<>();
public static void main(String[] args) throws IOException {
Barchart main = new Barchart();
main.add(new LineSegment());
System.out.println(main.getListSize());
main.add(new LineSegment());
System.out.println(main.getListSize());
main.add(new PercentageSegment());
System.out.println(main.getListSize());
}
public void add(T t){
if(!drawableSegList.isEmpty() && drawableSegList.get(0).getClass() != t.getClass()){
System.out.println("First element :"+ drawableSegList.get(0).getClass()+" Does not match next Element "+t.getClass());
throw new RuntimeException();
}
drawableSegList.add(t);
}
public int getListSize(){
return this.drawableSegList.size();
}
}
:
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