最近别人发给了一个邀请链接,问能不能刷满邀请人数,简单试了一下,网站对访问IP进行了记录,不能用一个IP一直访问,想到的解决方案是套上代理来实现刷点击量的目的。
自从学了点爬虫知识之后,这是第一次需要使用代理的场景,简单记录一下实现点击量目标所做的工作。
站点分析
在接到这个链接之后,先用浏览器访问了一遍查看了一下相关请求,发现并没有与IP地址相关的加载项,于是花几分钟写了个简单的请求脚本,但是发现请求之后点击量一次都没有增加。接着开始对脚本进行了调试,将返回的结果打印之后发现返回的html主体是下面的内容:
<meta http-equiv="refresh" content="1;url=xxxx">
这行代码的意思是在一秒后刷新到url指向的页面,这个链接和最初的邀请链接是不同的,在实际访问时没有注意到这点。假设网站提供的邀请链接为A,上面代码指向的链接为B,整个流程为:
- 网站发布邀请链接A
- 用户在互联网传播链接A
- 他人点击邀请链接A,1秒后跳转到链接B对应页面
- 页面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地址和使用的代理是否相同来判断代理是否有效。