在爬取数据的过程中,我们会经常遇到一些反爬机制,常见的反爬机制有:
1、封杀爬虫程序
2、封杀指定IP
3、封杀非人操作的程序
4、验证码等
在不同的浏览器发送请求的时候,会有不同的User-Agent头,服务器通过查看User-Agent来判断谁在访问
上一节我们用urllib来获取网页数据,urllib中默认的User-Agent中会有python的字样,服务器可以通过检查UA将我们拒之门外
下面我们通过伪造UA来访问网站
from urllib import request
url = 'http://www.csdn.net/'
headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 '
'(KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'}
# 创建request对象
req = request.Request(url, headers=headers)
req.add_header('Connection', 'keep-alive')
response = request.urlopen(req)
html = response.read().decode()
print(html)
有时我们爬取某个网站时,我们的IP会被封掉,为了防止我们的IP被封就需要用代理IP了
from urllib import request
url = 'http://www.baidu.com/'
proxy = {'http': '120.24.152.123:3128'}
proxy_support = request.ProxyHandler(proxy)
opener = request.build_opener(proxy_support)
opener.addheaders=[('User-Agent', 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 '
'(KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19)')]
request.install_opener(opener)
response = request.urlopen(url)
html = response.read().decode()
print(html)
一个爬虫去访问某个网站一分钟可以访问几十次,而一个人正常的访问某个网站一分钟可能就访问几次,为了爬虫程序被服务器识别出来,我们需要动态的设置UA和IP,或者在爬取页面时设置延时,这样能延长爬虫的存活时间