start
在爬虫中,我们会经常听到 “反爬” 这一词,所谓的 “反爬” 是指我们要爬取的目标网站为了防止爬虫访问所在网站上做了一些手脚,来拦截爬虫,我们之前一直用的请求头,以及速度限制(time.sleep(1))就是为了防止被识别为爬虫所使用的一种手段,在这一节,我们来介绍另外一种 “反爬”,那就是 “ip 屏蔽”,就是说我们在一段时间内,访问次数过多,不像人为访问,对方服务器就会识别出来,从而封杀我们 ip,让我们在一定时间内不能访问网站,当然如果是人为去访问,可能会让我们输入验证码来验证是否为机器人。
ip 可以理解为我们身份证,去网吧开黑,需要它,当此身份证失效了,可以换一张身份证继续开黑
这时候还想去访问的话就需要更换 ip 再去访问了,我们就来一起看看怎么更换 ip 用爬虫去访问
下面的 url,是一个可以查询我们 ip 的网站,目的是为了验证我们的 ip
http://icanhazip.com/
查看 ip 的代码
import requests
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
}
url = 'http://icanhazip.com/'
response = requests.get(url,headers=headers)
ip = response.text.replace('\n','')
print(ip)
代理 ip 获取
我们想要更换 ip,当然就需要大量的 ip,在网上有很多免费的 ip 提供,什么西刺代理等,但是免费的代理风险也越大,而且它们非常不稳定,前一秒可能可以用,下一秒可能就不能用了,就是说它们生命周期很短,所以小编推荐大家使用付费的 ip
在这里小编推荐一个 “阿布云” 代理
https://center.abuyun.com/login
注册个账号后,可以申请一条隧道,http隧道,动态版
想买什么价位的看你需求,小编一般都是一小时一小时买的,申请好后如下图:
接入的代码,就是获取 ip 的代码
其中代理的隧道验证信息为
【通行证书】【通行密匙】
# 代理服务器
proxyHost = "http-dyn.abuyun.com"
proxyPort = "9020"
# 代理隧道验证信息
proxyUser = ''
proxyPass = ''
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxyHost,
"port" : proxyPort,
"user" : proxyUser,
"pass" : proxyPass,
}
proxies = {
"http" : proxyMeta,
"https" : proxyMeta,
}
END
我们来验证一下,我们的 ip 是否更换了
第一次请求
第二次请求
第三次请求
买的动态代理的意思就是说每请求一次就换一个 ip
当我们 ip 被封杀时,就应该考虑代理了
完整代码
import requests
# 代理服务器
proxyHost = "http-dyn.abuyun.com"
proxyPort = "9020"
# 代理隧道验证信息
proxyUser = 'HRL5LF893233AFJD'
proxyPass = 'C35D3838890DA907'
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host": proxyHost,
"port": proxyPort,
"user": proxyUser,
"pass": proxyPass,
}
proxies = {
"http": proxyMeta,
"https": proxyMeta,
}
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
}
url = 'http://icanhazip.com/'
response = requests.get(url,headers=headers,proxies=proxies)
ip = response.text.replace('\n','')
print(ip)