1.设置下载延迟
2.禁用Cookie
3.使用user agent池(配置USER_AGENTS 和 PROXIES)
4.使用IP池
5.分布式爬取
6.javascript渲染
7.ajax异步传输
1.请求频率限制。绕过方式:使用sleep等待随机时间,或者从IP入手,多找一些代理IP去访问就可以了。
2.user-agent限制。设置个user-agent列表,使用随机函数,从列表里随机抽出一个user-agent,封装到http请求里,
3.JavaScript限制。
4.远端IP限制。目标网站会根据客户端IP进行限制,比如防火墙或者程序里,这边说一下,如果防火墙在TCP/UDP层或者它们以下的层做限制是无法绕过的,所以建议使用正规渠道提供的代理IP试试。
5.frame限制。比较典型的是在页面里插入好几层frame,链接到另外一个页面,然后再插入层层frame,链接到另外页面,这种你在第一个页面是无法提取到有效url的,这种绕过方式是查看页面源代码,抽丝剥茧,找到有效的页面所在的目录,然后直接请求有效的页面
6.cookie限制。这种是以cnvd为代表,每次请求以后,它会给你一个cookie,然后下次请求你要带上这个cookie才行,这种绕过方式就是使用selenium+webdriver,获取每次需要的cookie,下次再带上,当然你也可以用urllib2的cookie机制,使用什么方式不限制,关键是绕过
7.xpath的迷惑。这边介绍有的网页HTML代码编写并不标准,使用火狐的firebug点击元素并右键,然后再copy(复制)的子选项里有copy xpath这种获取xpath的方式,它是标准的,会自动补全缺少的HTML元素比如tr元素,所以这种xpath无法解析到需要的内容,绕过这种的方式是查看页面源代码,然后手工编写或者修改从火狐里复制出来的xpath
8.事件限制。有的内容是需要触发相关的事件才能发送请求,这种的绕过方法是利用selenium+webdriver也就是加个浏览器内核去模拟事件即可