python网页爬虫开发之二

1、网站robots
robotparser模块首先加载robots.txt文件,然后通过can_fetch()函数确定指定的用户代理是否允许访问网页。
2、识别网站技术
3、下载网页
使用urllib库,3.6没有urllib2
根据网页加载返回错误,进行重试增强错性
Requests库适合网页内容获取,及时性要求不高;
scrapy库适合全站获取,实时性,速度要求较高。
4、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
  • Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
  • Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
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
5、下载限速
当我们爬取的网站过快,可能会被封禁或造成服务器过载的风险。为了降低这些风险,我们可以在两次下载之间添加延时,从而对爬虫限速。 
6、避免爬虫陷阱
想要避免陷入爬虫陷阱,一人简单的方法就是记录到达当前网页经过了多少个链接,也就是深度。
当达到最大尝试就不再向队列中添加该网页中的链接了,我们需要修改seen变量为一个字典,增加页面尝试的记录。如果想禁用该功能,只需将max_depth设为一个负数即可。
 
7、支持代理(Proxy)
有时我们需要使用代理访问某个网站。比如Netflix屏蔽美国以外的大多数国家。
 
8、并行下载
python的机制——多进程比多线程更适合多核并行
线程优势:所谓IO密集型任务,是指磁盘IO、网络IO占主要的任务,计算量很小。比如请求网页、读写文件等。当然我们在Python中可以利用sleep达到IO密集型任务的目的。
进程优势:所谓计算密集型任务,是指CPU计算占主要的任务,CPU一直处于满负荷状态。比如在一个很大的列表中查找元素(当然这不合理),复杂的加减乘除等。
原文地址:https://www.cnblogs.com/joxin/p/9850815.html