爬虫-绕过浏览器防爬机制的小方法
1.设置Headers
调试浏览器F12,用的是Chrome,打开网络监听
请求的页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文 件,然后加载JS,CSS 等等,经过多次请求之后,网页的骨架和肌肉全了,整个网页的效果也就出来了。
Request-headers-response
agent:请求的身份
设置Headers,构建request时传入,在请求时,就加入了headers传送,(作用)服务器若识别了是浏览器发来的请求,就会得到响应。
用户-浏览器-服务器
服务器“防盗链”的方式:服务器会识别headers中的referer是不是它自己
上有政策,下有对策
构造Headers时加入Referer(Headers>Referer)
headers = { 'User-Agent' : 'Mozilla/4.0(compatible; MSIE 5.5; Windows NT)' ,'Referer':'http://www.zhihu.com/articles' }
headers的一些属性
User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTPBody 中的内容该怎样解析。
application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用
application/json : 在 JSON RPC 调用时使用
application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用
在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务
2. Proxy(代理)的设置
urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy
一个网站它会检测某一段时间某个IP 的访问次数,如果访问次数过多,它会禁止你的访问。(对策)所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,网站君都不知道是谁在捣鬼了,这酸爽!
3.Timeout 设置
设置等待多久超时,为了解决一些网站实在响应过慢而造成的影响。
(响应)response =urllib2.urlopen('http://www.baidu.com', timeout=10)
4.使用 HTTP 的PUT 和 DELETE 方法
http协议有六种请求方法:get,head,put,delete,post,options,我们有时候需要用到PUT方式或者DELETE方式请求。
PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
5.使用DebugLog(不常用)
收发包的内容就会在屏幕上打印出来,方便调试
import urllib2
httpHandler =urllib2.HTTPHandler(debuglevel=1)
httpsHandler =urllib2.HTTPSHandler(debuglevel=1)
opener =urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response =urllib2.urlopen('http://www.baidu.com')