1. 代理IP的使用
在对大多数网站进行爬虫爬取我们想要的数据时,服务器一般都会设置爬虫检测机制。对于服务器而言,它要做的就是为正常用户提供服务,对于爬虫这种访问速度快且占用大量服务器资源的的非正常行为会设置反爬虫机制,一旦超过一定的访问频率就会被服务器禁用一段时间的IP,此时使用代理IP就可以很好的避免这个问题。
代理IP的选取
网上有付费和免费的代理IP,免费代理的话就是自己写爬虫把免费的IP爬取下来,建立自己的IP代理池。对于付费的可以用API直接请求获得指定数量的IP,再构建自己的IP代理池。
对于免费的某代理的IP我测试了一下,1000个IP里只有2个有效的,所以如果要使用代理IP的话,建议还是付费比较方便,可用性和数量都比较不错。
对于付费IP的购买,由于是自己用,找到了这个便宜且提供小规模IP套餐的网站(非广告):稻壳代理 | 高性价比代理IP服务 | 免费代理IP自动更新
我选取的是隧道代理套餐,隧道代理与传统代理的不同在于传统代理需要自己动手请求API获得ip,隧道代理是直接向目标网址发送请求即可,ip的选取由服务器自动完成,更加简单和自动化,使用前需要设置ip白名单,只有处于这个ip下才能调用代理ip的API,去百度搜索我的ip,找到自己的外网ip设置上即可,请求https请求时还需要设置忽略SSL验证。
代理IP的使用形式(requests库)
proxy = {'http': '139.196.78.175:7890', 'https': '139.196.78.175:7890'}response = requests.get(url, proxies=proxies, headers=headers,timeout=2)
2. 代理IP的可用性检测
def verifyIP(proxy): url = "https://www.baidu.com/" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0' } try: response = requests.get(url=url, headers=headers, proxies=proxy, timeout=1) print(f'{proxy}有效代理') print(response.text) except Exception as e: print(f'{proxy}无效代理:', e) verifyIP({'http': '139.196.78.175:7899', 'https': '139.196.78.175:7899'})
这段代码定义了一个函数,用于检测输入的代理IP是否可用。
另外,这里有一个检测代理IP有效的网站,支持批量检测:在线批量验证Http代理IP_多线程在线检测Http代理服务器_导出有效代理IP - 站大爷 - 企业级高品质Http代理IP_Socks5代理服务器_免费代理IP (zdaye.com)