一、网站robots
robotparser模块首先加载robots.txt文件,而后经过can_fetch()函数肯定指定的用户代理是否容许访问网页。
二、识别网站技术
三、下载网页
使用urllib库,3.6没有urllib2
根据网页加
载返回错误,进行重试,加强容错性
Requests库适合网页内容获取,及时性要求不高;
scrapy库适合全站获取,实时性,速度要求较高。
四、user_agent
常见的User Agent
Android
-
Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
-
Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
-
Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Firefox
Google Chrome
-
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
-
Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
iOS
-
Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
-
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3
五、下载限速
当咱们爬取的网站过快,可能会被封禁或形成服务器过载的风险。为了下降这些风险,咱们能够在两次下载之间添加延时,从而对爬虫限速。
六、避免爬虫陷阱
想要避免陷入爬虫陷阱,一人简单的方法就是记录到达当前网页通过了多少个连接,也就是深度。
当达到最大尝试就再也不向队列中添加该网页中的连接了,咱们须要修改seen变量为一个字典,增长页面尝试的记录。若是想禁用该功能,只需将max_depth设为一个负数便可。
七、支持代理(Proxy)
有时咱们须要使用代理访问某个网站。好比Netflix屏蔽美国之外的大多数国家。
八、并行下载
python的机制——多进程比多线程更适合多核并行
线程优点:所谓IO密集型任务,是指磁盘IO、网络IO占主要的任务,计算量很小。好比请求网页、读写文件等。固然咱们在Python中能够利用sleep达到IO密集型任务的目的。
进程优点:所谓计算密集型任务,是指CPU计算占主要的任务,CPU一直处于满负荷状态。好比在一个很大的列表中查找元素(固然这不合理),复杂的加减乘除等。