Python爬虫知识点梳理

学任何一门技术,都应该带着目标去学习,目标就像一座灯塔,指引你前进,不少人学着学着就学放弃了,很大部分缘由是没有明确目标,因此,在你准备学爬虫前,先问问本身为何要学习爬虫。有些人是为了一份工做,有些人是为了好玩,也有些人是为了实现某个黑科技功能。不过 确定的是,学会了爬虫,能给你的工做提供不少便利。正则表达式

做为零基础小白,大致上可分为三个阶段去实现,第一阶段是入门,掌握必备基础知识,好比Python基础、网络请求的基本原理等,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,熟悉主流的爬虫工具,第三阶段是本身动手,到了这个阶段你开始有本身的解题思路了,能够独立设计爬虫系统。算法

爬虫涉及的技术包括但不限于熟练一门编程语言(这里以 Python 为例) HTML 知识、HTTP 协议的基本知识、正则表达式、数据库知识,经常使用抓包工具的使用、爬虫框架的使用、涉及到大规模爬虫,还须要了解分布式的概念、消息队列、经常使用的数据结构和算法、缓存,甚至还包括机器学习的应用,大规模的系统背后都是靠不少技术来支撑的。数据分析、挖掘、甚至是机器学习都离不开数据,而数据不少时候须要经过爬虫来获取,所以,做为一门专业爬虫工程师都是有很大的前途的。sql

那么是否是必定要把上面的知识全学完了才能够开始写爬虫吗?固然不是,学习是一生的事,只要你会写 Python 代码了,就直接上手爬虫,比如学车,只要能开动了就上路吧,写代码可比开车安全多了。数据库

网络请求框架都是对 HTTP 协议的实现,好比著名的网络请求库 Requests 就是一个模拟浏览器发送 HTTP 请求的网络库。了解 HTTP 协议以后,你就能够专门有针对性的学习和网络相关的模块了,好比 Python 自带有 urllib、urllib2(Python3中的urllib),httplib,Cookie等内容,固然你能够直接跳过这些,直接学习 Requests 怎么用,前提是你熟悉了 HTTP协议的基本内容,数据爬下来,大部分状况是 HTML 文本,也有少数是基于 XML 格式或者 Json 格式的数据,要想正确处理这些数据,你要熟悉每种数据类型的解决方案,好比 JSON 数据能够直接使用 Python自带的模块 json,对于 HTML 数据,可使用 BeautifulSoup、lxml 等库去处理,对于 xml 数据,除了可使用 untangle、xmltodict 等第三方库。编程

爬虫工具里面,学会使用 Chrome 或者 FireFox 浏览器去审查元素,跟踪请求信息等等,如今大部分网站有配有APP和手机浏览器访问的地址,优先使用这些接口,相对更容易。还有 Fiddler 等代理工具的使用。json

数据清洗完最终要进行持久化存储,你能够用文件存储,好比CSV文件,也能够用数据库存储,简单的用 sqlite,专业点用 MySQL,或者是分布式的文档数据库 MongoDB,这些数据库对Python都很是友好,有现成的库支持,你要作的就是熟悉这些 API 怎么使用。浏览器

从数据的抓取到清洗再到存储的基本流程都走完了,也算是基本入门了,接下来就是考验内功的时候了,不少网站都设有反爬虫策略,他们千方百计阻止你用非正常手段获取数据,好比会有各类奇奇怪怪的验证码限制你的请求操做、对请求速度作限制,对IP作限制、甚至对数据进行加密操做,总之,就是为了提升获取数据的成本。这时你须要掌握的知识就要更多了,你须要深刻理解 HTTP 协议,你须要理解常见的加解密算法,你要理解 HTTP 中的 cookie,HTTP 代理,HTTP中的各类HEADER。进行大规模爬虫,一般都是从一个URL开始爬,而后把页面中解析的URL连接加入待爬的URL集合中,咱们须要用到队列或者优先队列来区别对待有些网站优先爬,有些网站后面爬。每爬去一个页面,是使用深度优先仍是广度优先算法爬取下一个连接。每次发起网络请求的时候,会涉及到一个DNS的解析过程(将网址转换成IP)为了不重复地 DNS 解析,咱们须要把解析好的 IP 缓存下来。URL那么多,如何判断哪些网址已经爬过,哪些没有爬过,简单点就是是使用字典结构来存储已经爬过的的URL,可是若是碰过海量的URL时,字典占用的内存空间很是大,此时你须要考虑使用 Bloom Filter(布隆过滤器),用一个线程逐个地爬取数据,效率低得可怜,若是提升爬虫效率,是使用多线程,多进程仍是协程,仍是分布式操做。缓存

相关文章
相关标签/搜索