爬虫-绕过浏览器防爬机制的小方法

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')