一、网页请求方式
GET方法和POST 方法。与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET 方法。POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。一般来说,GET 方法请求的网页一般相对简单,在静态网页中会经常用到;而POST方法请求一般需要传入数据参数,在动态网页中经常会出现。
二、设置延时
合理控制速度是你不应该破坏的规则。过度消耗别人的服务器资源会让你置身于非法境地,更严重的是这么做可能会把一个小型网站拖垮甚至下线。拖垮网站是不道德的,是彻头彻尾的错误。所以请控制采集速度!
有一些防护措施完备的网站可能会阻止你快速地提交表单,或者快速地与网站进行交互。即使没有这些安全措施,用一个比普通人快很多的速度从一个网站下载大量信息也可能让自己被网站封杀。
因此,虽然多线程程序可能是一个快速加载页面的好办法——在一个线程中处理数据,另一个线程中加载页面——但是这对编写好的爬虫来说是恐怖的策略。还是应该尽量保证一次加载页面加载且数据请求最小化。如果条件允许,尽量为每个页面访问增加一点儿时间间隔,即使你要增加一行代码:
time.sleep(3)
或者设置更长的时间,也可以增加随机数,更加自适应一些。
三、伪装成浏览器
除了处理网站表单,requests 模块还是一个设置请求头的利器,建议大家在请求网页的时候尽量多用该模块。HTTP 的请求头是在你每次向网络服务器发送请求时,传递的一组属性和配置信息。HTTP 定义了十几种古怪的请求头类型,不过大多数都不常用。一般用的比较多的是:User-Agent、Referer、Host、Accept等。
某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。所以用urllib2直接访问网站经常会出现HTTP Error 403: Forbidden的情况
对有些 header 要特别留意,Server 端会针对这些 header 做检查
1.User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request
2.Content-Type 在使用 REST 接口时,Server 会检查该值,用来确定 HTTP Body 中的内容该怎样解析。
这时可以通过修改http包中的header来实现,代码片段如下:
四、 设置COOKIE
在采集一些网站时 COOKIE 是不可或缺的。要在一个网站上持续保持登录状态,需要在多个页面中保存一个 COOKIE。有些网站不要求在每次登录时都获得一个新 COOKIE,只要保存一个旧的“已登录”的 COOKIE 就可以访问。
COOKIEs是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),python提供了COOKIElib模块用于处理COOKIEs,COOKIElib模块的主要作用是提供可存储COOKIE的对象,以便于与urllib2模块配合使用来访问Internet资源.
五、选择器
选择器一般有正则表达式、Bs4、Xpath、CSS。关于这些选择器的使用可以参考小编的文章,
对于页面解析最强大的当然是正则表达式,这个对于不同网站不同的使用者都不一样。
正则表达式晦涩难懂,一般用到的时候去翻教程就可以了,如正则表达式入门、正则表达式在线测试等,如果你可以记住部分表达式,那就最好不过了。
其次就是解析库了,常用的有两个lxml和BeautifulSoup。这两个库,都是HTML/XML的处理库,Beautifulsoup纯python实现,效率低,但是功能实用,比如能用通过结果搜索获得某个HTML节点的源码;lxml是由C语言编码,开发速度快,高效,支持Xpath和CSS语法
为了给大家创建一个学习Python的氛围,小编为大家建立了一个Python学习群: 710708826,群里有小编的同事也会不定期共享干货,不论你是小白还是大牛,小编都非常地欢迎您的加入,让我们一起为学习Python而奋斗吧!
除了上面这几种常见的网络爬虫策略和技巧之外,还有许多其他的技巧,比方说:表单的处理、验证码的处理、多线程并发设置、多协程的设置、多进程的设置、gzip压缩等。