-
182024年4月
-
302024年3月
-
292024年2月
-
312024年1月
-
312023年12月
-
302023年11月
-
312023年10月
-
302023年9月
-
312023年8月
-
352023年7月
-
312023年6月
-
312023年5月
-
302023年4月
-
312023年3月
-
282023年2月
-
312023年1月
-
312022年12月
-
302022年11月
-
312022年10月
-
302022年9月
-
312022年8月
-
322022年7月
-
292022年6月
-
322022年5月
-
302022年4月
-
332022年3月
-
312022年2月
-
372022年1月
-
382021年12月
-
382021年11月
-
402021年10月
-
432021年9月
-
372021年8月
-
442021年7月
-
442021年6月
-
432021年5月
-
342021年4月
-
312021年3月
-
292021年2月
-
352021年1月
-
422020年12月
-
402020年11月
-
482020年10月
-
522020年9月
-
852020年8月
-
752020年7月
-
802020年6月
-
782020年5月
-
772020年4月
-
432020年3月
-
362020年2月
-
452020年1月
-
562019年12月
-
712019年11月
-
612019年10月
-
562019年9月
-
532019年8月
-
362019年7月
-
362019年6月
-
382019年5月
-
402019年4月
-
352019年3月
-
342019年2月
-
442019年1月
-
392018年12月
-
402018年11月
-
392018年10月
-
392018年9月
-
452018年8月
-
452018年7月
-
392018年6月
-
512018年5月
-
492018年4月
-
342018年3月
-
282018年2月
-
482018年1月
-
732017年12月
-
7292017年11月
-
7442017年10月
-
2892017年9月
-
12017年8月
作为爬虫工程师,时常要为不断更新的反爬虫策略而苦恼,究竟是魔高一尺还是道高一丈,从来就没有真正的分出过胜负,一个为了完成爬虫工作,一个为了保卫网站不被爬虫入侵,进行着一场持久的抗战。
对于Python爬虫来说,有哪些常见的反反爬策略呢?
一、设置等待时间
很多反爬策略都包含了检测访问频率,一旦发现了超人类访问速度,坚决封杀,既然如此,那就模仿人工访问频率,访问一次,歇一会儿。
1、显性等待时间
import time#导入包time.sleep(5)#设置时间间隔为5秒
2、隐式等待时间
wait1.until(lambda driver: driver.find_element_by_xpath("//div[@id='link-report']/span"))
二、修改请求头
识别是机器人还是浏览器浏览的一个重要依据就是User-Agent,不同的浏览器有不同的User-Agent。
import urllib2req = urllib2.Request(url)#多了以下一这一步而已
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')response = urllib2.urlopen(req)
三、使用代理IP
当拥有足够多的代理IP后,就不在乎被对方封杀IP了,封了一个IP,还有千千万万个IP,无所畏惧。
# -*- coding: utf-8 -*-
import urllib2
url = " www.ip181.com/"proxy_support = urllib2.ProxyHandler({'http':'121.40.108.76'})
#参数是一个字典{'类型':'代理ip:端口号'}
opener = urllib2.build_opener(proxy_support)
#定制opener
opener.add_handler=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')]
#add_handler给加上伪装
urllib2.install_opener(opener)response = urllib2.urlopen(url)print response.read().decode('gbk')
四、进行模拟登陆
一般用Selenium,可以结合Firefox或者是无头浏览器PhantomJS,这个做的东西比较多了。