前段时间对python爬虫技术进行了简单学习,主要目的是为了配合Release Manager日常工作开展相关数据的自动化度量晾晒,比如针对Jira系统中产品需求实现情况和缺陷处理情况进行定时抓取分析并发送邮件报告。
Python爬虫的常用方案包括几个部分:调度器、url管理、数据下载、数据解析、数据应用等,也可以采用简单版的爬虫,针对现有系统的api接口进行数据抓取和分析。无论怎样,有几点核心知识是必须掌握的。
1.爬虫相关python库
2.python数据编解码格式
3.xml/json/bs4等数据解析
我们先看第一点相关python库,此处我们在python3.x版本前提下进行学习。
爬虫用到的python库按照性价比从低到高排行,分别为:urllib.request , requests , scrapy。
urllib.request是基本的http框架库,它的优点是用法简单,可以管理cookie进行请求复用;它的缺点是需要使用handler管理http请求中的auth、proxy、cookie等属性,代码写起来比较繁琐,请求中传递的data数据要自行编码后才能使用,请求响应的返回值为bytes类型也需要自行解码后使用。
requests是略微高级的http框架库,它的优点是auth、proxy、data等属性管理起来更加简单,请求响应返回值包括bytes和str类型方便使用;它的缺点是不能管理cookie无法复用请求(注:requests中的session模块增加了cookie管理功能)。
scrapy是专门的爬虫框架库,它的优点是数据结构性好,适用于大型项目;它的缺点是上手略困难,不容易深度定制。
如果是想针对Jira等现有系统的api接口进行数据抓取和分析,requests库更为合适。
我们再看第二点,python数据编解码格式。
此处首先需要关注python2.x版本和3.x版本之间关于数据格式bytes和str的区别,以及Unicode/UTF-8/GBK等基本数据格式的概念。
另外需要注意常见的编解码设置,例如在sys模块中设置默认的编码格式
import sys
reload(sys)
sys.setdefaultencoding('utf8')
以及在http请求响应返回值中设置编码格式
response.apparent_encoding
以及在打开文件时设置编码格式 fopen(...,encoding="...").
关于第三点 xml/json/bs4等数据解析内容比较多,我们放到下次单独总结。