张家港网站设计,wordpress 商品比价,招聘 网站开发,做网站一天忙吗在Python爬虫中为了更好地绕过反爬机制#xff0c;获取网页信息#xff0c;有时可能需要在Python中应用代理服务#xff0c;这样做的目的就是防止自己的ip被服务器封禁#xff0c;造成程序运行时中断连接#xff0c;那么如何在python中设置代理呢#xff1f; 我们通过几个…在Python爬虫中为了更好地绕过反爬机制获取网页信息有时可能需要在Python中应用代理服务这样做的目的就是防止自己的ip被服务器封禁造成程序运行时中断连接那么如何在python中设置代理呢 我们通过几个实例来看一下其实也不麻烦。
一、在requests中设置代理
在爬虫中我最常用的是reqeusts这个模块除了设置user-agent, cookie之外我们还可以加上代理ip。 下面我们给出一个利用http或https代理来访问XXX网站。 其中http或https代理可以通过在服务器上安装x-ui设置http代理用户名和密码来实现。 有时为了避免ip被封禁可以绑定域名用极光面板来设置中转代理然后采用中转的域名来访问服务器可以加快访问速度和安全性。
import requests# 设置代理包括用户名和密码
proxy_username user #设置代理的用户名
proxy_password password #设置代理的密码
proxy_host ip:port #这里设置服务器的域名或ip并助加上端口proxies {http: fhttp://{proxy_username}:{proxy_password}{proxy_host},https: fhttp://{proxy_username}:{proxy_password}{proxy_host},
}# 发起请求
try:response requests.get(https://www. XXX.com, proxiesproxies) #XXX替换为你要爬取的网站print(response.text) # 打印响应内容
except requests.exceptions.RequestException as e:print(f请求出错: {e})
二、在edge-tts中设置代理
最近edge-tts文本转音频的调用受到了限制访问起来十分不便我们可以在python实现代理服务从而避开模块的限制。
import edge_tts
import asyncio# 设置代理包括用户名、密码、服务器ip和端口
proxy_username user
proxy_password password
proxy_host ip:port
proxy fhttp://{proxy_username}:{proxy_password}{proxy_host}async def main():# 创建一个 TTS 客户端communicate edge_tts. Communicate(textHello, this is a text to speech conversion.,voiceen-US-AriaNeural,proxy proxy)# 生成音频await communicate.save(output.mp3)# 运行主函数
asyncio.run(main())
三、设置代理池proxy-pool
单个代理可能会出现失效的情况我们可以设置一个代理池把代理信息放到txt文件里每次通过Python程序读取txt中的代理随机调用代理池中的一个代理即对代理池进行轮训这样可以最大限度减少IP封禁的可能。这个代理也可以设置单个代理通过get_proxy来获得。
import random
class Proxy:def __init__(self, username, password, host):self.username usernameself.password passwordself.host hostdef get_proxy(self):return fhttp://{self.username}:{self.password}{self.host}class ProxyPool:def __init__(self):self.proxies []def add_proxy(self, username, password, host):proxy Proxy(username, password, host)self.proxies.append(proxy)def load_proxies_from_file(self, file_path):with open(file_path, r) as file:for line in file:username, password, host line.strip().split(,)self.add_proxy(username, password, host)def get_random_proxy(self):if not self.proxies:raise ValueError(Proxy pool is empty.)return random.choice(self.proxies).get_proxy()# 示例用法
if __name__ __main__:proxy_pool ProxyPool()# 从文件加载代理proxy_pool.load_proxies_from_file(proxy.txt)# 随机获取一个代理random_proxy proxy_pool.get_random_proxy()print(random_proxy)
使用以上程序需要我们可以把代理信息放到proxy.txt文件中用户名、密码和服务器信息用逗号隔开这样运行程序后我们可以随机调用一个代理从而模拟多人使用此项服务的目的。
四、如何随机调用代理池中的代理
我们把设置好的代理信息放到proxy.txt中格式如下图所示 代理格式
然后我们通过以下代码随机调用代理池中的内容并打印出来。这样每次向服务器发请求就是随机代理减少了程序中断的可能性。
from proxypool import ProxyPool #导入模块
proxy_pool ProxyPool() #实例化# 从文件加载代理
proxy_pool.load_proxies_from_file(proxy.txt)# 随机获取一个代理
random_proxy proxy_pool.get_random_proxy()# 打印出来获取的代理
print(random_proxy)五、学后总结
一直以来我以为Python中的代理设置非常麻烦事实上经常测试其实也不难。
问题的关键是找到一个有效的http代理并在Python程序中设置好。
这是一个Python的进阶技巧学会这个方法可以解决很多程序运行受限的问题。