防反爬虫机制
许多网站针对爬虫的访问都设置了一定的障碍,这里介绍防反爬虫机制的 3 大技巧。
1)设定程序休止时间
1 import time 2 3 time.sleep(n)
2)设定代理
代理服务器的存在,可以应对网站禁止某个 IP 访问的反爬虫措施。代理服务器有着不同的匿名类型,通常我们会挑选中、高级别的代理服务器来访问网页。
示例:
1 # 使用urllib.request的两个方法进行代理的设置 2 proxy = urlrequest.ProxyHandler({'https': '47.91.78.201:3128'}) 3 opener = urlrequest.build_opener(proxy)
3)设定 User-Agent
网站是可以识别你是否在使用脚本进行爬取,因此需要在你发送网络请求时,把 header 部分伪装成浏览器。
方式1:使用python下非常好用的伪装请求头的库 fake-useragent
安装:pip install fake-useragent
使用示例:
1 from fake_useragent import UserAgent 2 3 ua = UserAgent() 4 5 # 获取各浏览器的fake-useragent 6 # ie浏览器的user agent 7 print(ua.ie) 8 9 # chrome浏览器 10 print(ua.chrome) 11 12 # safri浏览器 13 print(ua.safari) 14 15 # 最常用的方式 16 # 写爬虫最实用的是可以随意变换headers,一定要有随机性。支持随机生成请求头 17 print(ua.random) 18 19 # 请求头 20 headers={"User-Agent":ua.random}
方式2:手工设置
1 import random 2 3 def get_headers(): 4 5 6 useragent_list = [ 7 'Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1', 8 'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11', 9 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50', 10 'Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1', 11 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36', 12 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.9.2.1000 Chrome/39.0.2146.0 Safari/537.36', 13 'Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11', 14 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3', 15 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3', 16 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/532.3', 17 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5', 18 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36' 19 ] 20 21 22 useragent = random.choice(useragent_list) 23 header = {'User-Agent': useragent} 24 return header