为什么需要服务器采集
大规模爬虫的需要
最大的网络爬虫自然是搜索引擎,前面我们技术的讨论是建立在个人电脑上,如今我们需要几天几夜的去爬取数据,个人电脑是在难以满足需求,由此服务器采集尤为必要
防止IP地址被封杀
在个人计算机上运行爬虫也有应对的方法,可以维护一个代理池。但是网上的免费代理失效快,运行缓慢,就算是付费代理也不稳定,这样就显得在大型爬虫中不讨巧。使用动态IP拨号服务器的ADSL拨号方法和Tor进行代理访问的方法可以成功修改访问的网站的IP,效果非常好
使用动态IP拨号服务器
特点:每次拨号都会换一个新的IP地址
一般来说,这个IP池很大,可能有多个AB段,IP数量基本上用不完。对于爬虫来说,这简直是大杀器,能够轻松解决封杀IP的限制
购买拨号服务器
登录拨号服务器
购买后你会得到服务器地址、用户名、密码,还会获得拨号上网的用户名和密码
基本步骤
打开远程桌面连接(Win+R —-> 输入mstsc.exe)
然后填写服务器IP地址,如果有端口号也要记得填写
然后就可以输入账号密码了
Python代码快速拨号
由于自身条件限制,无法实战,就把书里面的笔记和思路记下来而且这里不提供代码,等以后有机会检验在写出来
可以使用Python控制OS,从而实现断开宽带连接、重新连接宽带的功能
我们可以将爬虫和更换IP功能结合起来,也就是说当爬虫结果返回错误的时候,可以更换一个IP,然后使用一个递归函数再进行爬取
使用Tor代理服务器
安装Tor
[https://www.cnblogs.com/binyyds/p/15021941.html](https://www.cnblogs.com/binyyds/p/15021941.html)
Tor的使用(与Python结合)
安装两个库
pip install pysocks pip install stem
隐藏IP验证
import socks
import socket
import requests
socks.set_default_proxy(socks.SOCKS5,"127.0.0.1",9150)
socket.socket = socks.socksocket
a = requests.get("http://checkip.amazonaws.com").text
print a
访问这个网站,发现已经是隐藏IP,你可以直接在浏览器输入IP,会发现自己是隐藏IP
更换IP的代码实现
#coding=utf-8
from stem import Signal
from stem.control import Controller
import socket
import socks
import requests
import time
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
controller = Controller.from_port(port=9151)
controller.authenticate()
socks.set_default_proxy(socks.SOCKS5,"127.0.0.1",9150)
socket.socket = socks.socksocket
total_scrappy_time = 0
total_changeIP_time = 0
for x in range(0,10):
a = requests.get("http://checkip.amazonaws.com").text
print ("第"+str(x+1)+"次IP:"+a)
time1 = time.time()
a = requests.get("http://www.santostang.com/").text
time2 = time.time()
total_scrappy_time = total_scrappy_time + time2-time1
print ("第"+str(x+1)+"次抓取花费时间:"+str(time2-time1))
time3 = time.time()
controller.signal(Signal.NEWNYM)
time.sleep(5)
time4 = time.time()
total_changeIP_time = total_changeIP_time + time4-time3-5
print ("第"+str(x+1)+"次更换IP花费时间: "+str(time4-time3-5))
print ("平均抓取花费时间:"+str(total_scrappy_time/10))
print ("平均更换IP时间:"+str(total_changeIP_time/10))
Tor的优点
- 完全免费
- 更换IP过程较为稳定,速度快,相比代理池稳定