目录

Python爬虫 代理IP地址获取及使用

最近别人发给了一个邀请链接,问能不能刷满邀请人数,简单试了一下,网站对访问IP进行了记录,不能用一个IP一直访问,想到的解决方案是套上代理来实现刷点击量的目的。

自从学了点爬虫知识之后,这是第一次需要使用代理的场景,简单记录一下实现点击量目标所做的工作。

站点分析

在接到这个链接之后,先用浏览器访问了一遍查看了一下相关请求,发现并没有与IP地址相关的加载项,于是花几分钟写了个简单的请求脚本,但是发现请求之后点击量一次都没有增加。接着开始对脚本进行了调试,将返回的结果打印之后发现返回的html主体是下面的内容:

<meta http-equiv="refresh" content="1;url=xxxx">

这行代码的意思是在一秒后刷新到url指向的页面,这个链接和最初的邀请链接是不同的,在实际访问时没有注意到这点。假设网站提供的邀请链接为A,上面代码指向的链接为B,整个流程为:

  1. 网站发布邀请链接A
  2. 用户在互联网传播链接A
  3. 他人点击邀请链接A,1秒后跳转到链接B对应页面
  4. 页面B被访问,邀请人数增加

也就是说,链接B才是真正的链接,链接A相当于一个外壳,对链接B进行了一定程度的保护。在了解到这些之后,只要把之前脚本中的链接A改为链接B,再加上代理相关的内容便能达到我们的目的了。

在这一过程中也总结了点经验,在写脚本之前先用postmam访问网站,对返回内容进行核查理清逻辑之后再动手。

爬虫添加代理

获取随机UA

大部分情况下,切换代理的原因是因为此前的IP爬取内容过快导致被封禁,更换代理的同时一般也会对UA进行更换。下面是用别人的接口实现的获取随机UA的函数:

def get_rand_ua():
    ua_url = 'http://nmsl8.com/getUA'
    res = requests.get(ua_url)
    return res.text

上面的接口是部署在别人的主机上的,不知道能维持多久,最好的办法还是去网上查找整理好的UA列表,直接读取本地文件。

requests添加代理

requests库使用代理的方法很简单,官方文档写的很清楚。下面是文档中的示例使用方式:

proxies = {
    "http": "http://10.10.1.10:3128",
    "https": "http://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies, timeout=10)

免费的代理可以在这里获得:https://ip.ihuan.me/

由于免费,代理的质量不是很高,我在使用的时候添加了timeout参数,避免在一个代理上花费很多时间。

代理验证

访问这个地址可以获得自己的IP:http://icanhazip.com/

可以通过比较返回的IP地址和使用的代理是否相同来判断代理是否有效。