返回介绍

6.2 使用 IP 代理的方法

发布于 2025-04-21 19:15:27 字数 2537 浏览 0 评论 0 收藏

6.2.1 Requests 中使用代理 IP

如前所述,针对网站监测 IP 访问的反爬虫策略,可以使用代理 IP。下面看一下如何在 Requests 中使用代理 IP。

所谓代理 IP,就是代理用户去取得网络信息的 IP 地址。代理 IP 可以帮助爬虫掩藏真实身份,突破 IP 访问限制,隐藏爬虫的真实 IP,从而避免被网站的反爬虫禁止。

先简单介绍一下 Requests 中使用 IP 代理的方法。Requests 使用 IP 代理非常简单,可以通过为任意请求方法提供 proxies 参数来配置单个请求,下面是 Requests 文档提供的一个例子。

>>>import requests
#设置代理 IP 组成的字典 
>>>proxies = { 
     "http":"http://10.10.1.10:3128", "https": "http://10.10.1.10:1080"} 
>>>requests.get("http://example.org", proxies=proxies)

可以看到,Requests 使用代理 IP 非常方便,只需要构造一个代理 IP 的字典,然后在发起请求的时候,使用 proxies 添加这个代理 IP 的字典即可。

官方文档这个例子其实并不是很明确,我们知道 Python 字典的 key 必须是唯一的(如果有重复的 key,实际只有最后的 value 是有效的),如果需要使用多个代理 IP,应该如何处理呢?这里要首先明确:proxies 字典的 key 代表代理 IP 所使用的 HTTP 请求协议,而字典的 value 是代理 IP 地址。当需要使用多个代理 IP 时,建议读者还是将所有代理 IP 字典构造成列表,然后从列表中随机选取代理 IP。下一节就使用这种方法爬取微信文章。

如何获得代理 IP 呢?一般有如下两个途径。

一是从网上寻找免费的代理 IP。有很多提供免费代理 IP 的网站,可以使用这些网站提供的免费代理 IP。使用免费代理的缺点很多,从实用性、稳定性及安全性来考虑,不推荐读者使用免费的代理 IP。网上公布的代理 IP 不一定是可用的,用户很可能在使用过程中发现代理 IP 不可用或者已失效。

二是购买代理 IP,有很多提供这方面服务的网站,读者可以搜索一下。一般购买的代理 IP 可用性和稳定性都相对较好,缺点是需要一定的成本。在练习写爬虫的时候,可以使用免费代理;在生产环境中,免费代理 IP 很难满足需求,最好是购买高质量的代理 IP。

6.2.2 获取免费代理 IP

下一节将使用代理 IP 爬取微信文章,在爬取之前,需要获取几个可用的代理 IP。这里首先从西刺代理网站上寻找几个代理 IP,然后检查可用性,为下一节爬取微信文章做好准备。这里要提醒读者,在你看到这里的时候,很可能本书寻找的这几个代理 IP 已经不可用了,这时可以自己尝试重新寻找可用的免费代理 IP。打开西刺免费代理 IP 网站,图 6-1 所示为西刺免费代理 IP 网站的首页。

图 6-1 西刺免费代理 IP 网站的首页

西刺免费代理首页提供了国内高匿代理 IP,当用户使用的时候,除了 IP 地址,还要注意端口和类型,不要弄错。假如现在想使用网页中显示的第一个 IP 地址作为代理 IP,可以按如下代码构造 proxies 参数。

proxies = {"http": "http://121.31.148.127:8123"} 

在使用之前,最好验证一下代理 IP 的可用性,毕竟很多免费代理 IP 根本不可用。可以编写一个验证有效性的函数,使用这个代理 IP 爬取网易首页,然后判断是否成功,从而验证代理 IP 的可用性。

import requests
def is_ip_valid(proxies): 
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) \ 
               AppleWebKit/537.36 (KHTML, like Gecko) \ 
               Chrome/46.0.2490.80 Safari/537.36'} 
    try: 
        r = requests.get('http://www.163.com/', headers=headers,  
                         proxies=proxies, timeout=5)   #尝试使用代理 IP 
    except: 
        print('NO!')    #如果不可用,打印"NO!" 
    else: 
print('YES!')   #否则打印"YES!" 

使用这个函数检测这里找到的代理 IP 的有效性。

>>>is_ip_valid(proxies)
YES! 

经过测试,这个代理 IP 是可用的代理 IP,下一节就可以使用这个代理 IP 去爬取微信文章了。

以上讲解了 Requests 使用代理 IP 的方法,以及如何找到免费的代理 IP。在读者实际编写爬虫的时候,如果不想花钱购买稳定的代理 IP,可以尝试专门写一个爬虫,爬取免费的代理 IP 并验证其可用性,然后再应用于实际的爬虫项目中。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。