注册
登录
提问时间:2018/10/9 15:40:08    楼主:未知网友   阅读量:251

作为爬虫工程师,时常要为不断更新的反爬虫策略而苦恼,究竟是魔高一尺道高一丈,还是道高一尺魔高一丈,从来就没有真正的分出过胜负,一个为了完成爬虫工作,一个为了保卫网站不被爬虫入侵,进行了一场持久抗战。

对于Python爬虫来说,有哪些常见的反反爬策略呢?

一、设置等待时间

很多反爬策略都包含了检测访问频率,一旦发现了超人类访问速度,坚决封杀,既然如此,那就模仿人工访问频率,访问一次,歇一会儿。

1、显性等待时间

import time#导入包time.sleep(3)#设置时间间隔为3秒

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,这个做的东西比较多了。