1 准备
安装scrapy:css
国内镜像源(官方的pypi不稳定)安装 pip3 install -i https://pypi.douban.com/simple/ scrapy
安装virtualenvwrapper:node
下载 pip3 install virtualenvwrapper 建立目录存放虚拟环境 mkdir ~/.virtualenvs 配置环境变量 export WORKON_HOME=~/.virtualenvs source /usr/local/python3/bin/virtualenvwrapper.sh source ~/.bashrc
2 技术选择与实现(scrapy vs reqeust + beautifulsoup)
不是一个层级的使用python
requests + beautifulsoup 是库 scrapy 是框架
性能web
在网络请求方面: scrapy 基于twisted实现,具备高性能优点 --- 异步IO ; 在数据处理方面: scrapy方便扩展,不少内置功能;内置 css,xpath选择器selector很是方便;lxml是c写的 因此更快 而beautifulsoup 是 python写的,会慢一点
3 爬虫的应用
1 .搜索引擎 --- 百度,goole(全部互联网的信息) ,垂直领域的搜索引擎(汽车,娱乐信息) 2 推荐引擎 --- 今日头条,数据推送 3 机器学习的样本 4 数据分析 ---金融,舆情分析
4 网页分类
静态网页 --- 相似静态博客系统,没有数据库操做 动态网页 --- 淘宝,信息更新(动态加载) webservice(restapi) ajax + rest api
5 爬虫的经常使用策略
网站的 url 链接通常是 树形的结构(分层结构,不一样的路由),并且网站的url 多是环路,须要去重ajax
(1)深度优先算法 和 实现 (scrapy默认使用)算法
递归实现 def depth_tree(tree_node): if tree_node is not None: if tree_node._left is not None: return depth_tree(tree_node._left) if tree_node._right is not None: return depth_tree(tree_node._right) 递归层数太多---会有栈溢出的问题
(2)广度优先算法 和 实现数据库
队列实现 def level_queue(root): if root is None: return my_queue = [] node =root my_queue.append(node) while my_queue: node = my_queue.pop(0) if node.lchild is not None: my_queue.append(node.lchild) if node.rchild is not None: my_queue.append(node.rchild)