在大数据如此火的今天,爬虫是其中不可或缺的一部分。作为一位爬虫我们都是知道想要获取数据也不是很容易的事,因为不管大大小小的网站都是做了很多反爬机制来阻碍我们的脚步,但是方法总比困难多。我们今天先来分析下网站都是用过哪些方式来阻止我们的。
1、验证码
2、ua
3、登陆验证
4、封账号
5、加密
6、ip限制
今天我们就重点来讲下网站的ip限制机制,很多网站会根据IP地址访问频率进行反爬,短时间内禁止IP访问,这时我们想采集数据要么使用代理IP,要么伪装ip。那么对于ip我们要怎么解决了?
自己自建ip池,每次访问网站的时候去选择代理,不过需要经常更新代理池。
购买优质代理或动态转发(爬虫代理), 这是最省时省力的方法。
网站抓取免费的ip来使用,虽然可行,但是效果不会很理想。
间隔一定的时间在进行数据采集,但是这会大大的增加我们工作的时长。
以下我们分享下用代理来解决网站封ip的示例,对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。
#! -*- encoding:utf-8 -*- import requests import random # 要访问的目标页面 targetUrl = "http://www.csdn.net" # 要访问的目标HTTPS页面 # targetUrl = "https://www.csdn.net" # 代理服务器(产品官网 www.16yun.cn) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理隧道验证信息 proxyUser = "16JVFLKJ" proxyPass = "254565" proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, "user" : proxyUser, "pass" : proxyPass, } # 设置 http和https访问都是用HTTP代理 proxies = { "http" : proxyMeta, "https" : proxyMeta, } # 设置IP切换头 tunnel = random.randint(1,10000) headers = {"Proxy-Tunnel": str(tunnel)} resp = requests.get(targetUrl, proxies=proxies, headers=headers) print resp.status_code print resp.text