这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 近距离带小白梳理Python爬虫基础知识点

共2条 1/1 1 跳转至

近距离带小白梳理Python爬虫基础知识点

助工
2020-09-16 17:37:03     打赏

  做数据分析和任何一门技术一样,都应该带着目标去学习,目标就像一座灯塔,指引你前进,很多人学着学着就学放弃了,很大部分原因是没有明确目标,所以,一定要明确学习目的,在你准备学爬虫前,先问问自己为什么要学习爬虫。有些人是为了一份工作,有些人是为了好玩,也有些人是为了实现某个黑科技功能。不过可以肯定的是,学会了爬虫能给你的工作提供很多便利。

  小白入门必读


  作为零基础小白,大体上可分为三个阶段去实现。


  第一阶段是入门,掌握必备基础知识,比如Python基础、网络请求的基本原理等;


  第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,熟悉主流的爬虫工具,


  第三阶段是自己动手,到了这个阶段你开始有自己的解题思路了,可以独立设计爬虫系统。


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


  那么是不是一定要把上面的知识全学完了才可以开始写爬虫吗?当然不是,学习是一辈子的事,只要你会写Python代码了,就直接上手爬虫,好比学车,只要能开动了就上路吧,写代码可比开车安全多了。


  用Python写爬虫


  首先需要会Python,把基础语法搞懂,知道怎么使用函数、类、list、dict中的常用方法就算基本入门。接着你需要了解HTML,HTML就是一个文档树结构,网上有个HTML30分钟入门教程https://deerchao.net/tutorials/html/html.htm够用了。


  关于HTTP的知识


  爬虫基本原理就是通过网络请求从远程服务器下载数据的过程,而这个网络请求背后的技术就是基于HTTP协议。作为入门爬虫来说,你需要了解HTTP协议的基本原理,虽然HTTP规范用一本书都写不完,但深入的内容可以放以后慢慢去看,理论与实践相结合。


  网络请求框架都是对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等代理工具的使用。


  入门爬虫,学习正则表达式并不是必须的,你可以在你真正需要的时候再去学,比如你把数据爬取回来后,需要对数据进行清洗,当你发现使用常规的字符串操作方法根本没法处理时,这时你可以尝试了解一下正则表达式,往往它能起到事半功倍的效果。Python的re模块可用来处理正则表达式。


  数据清洗


  数据清洗完最终要进行持久化存储,你可以用文件存储,比如CSV文件,也可以用数据库存储,简单的用SQLite,专业点用MySQL,或者是分布式的文档数据库MongoDB,这些数据库对Python都非常友好,有现成的库支持,你要做的就是熟悉这些API怎么使用。


  进阶之路


  从数据的抓取到清洗再到存储的基本流程都走完了,也算是基本入门了,接下来就是考验内功的时候了,很多网站都设有反爬虫策略,他们想方设法阻止你用非正常手段获取数据,比如会有各种奇奇怪怪的验证码限制你的请求操作、对请求速度做限制,对IP做限制、甚至对数据进行加密操作,总之,就是为了提高获取数据的成本。这时你需要掌握的知识就要更多了,你需要深入理解HTTP协议,你需要理解常见的加解密算法,你要理解HTTP中的cookie,HTTP代理,HTTP中的各种HEADER。爬虫与反爬虫就是相爱相杀的一对,道高一次魔高一丈。


  如何应对反爬虫没有既定的统一的解决方案,靠的是你的经验以及你所掌握的知识体系。这不是仅凭21天入门教程就能达到的高度。


  进行大规模爬虫,通常都是从一个URL开始爬,然后把页面中解析的URL链接加入待爬的URL集合中,我们需要用到队列或者优先队列来区别对待有些网站优先爬,有些网站后面爬。每爬去一个页面,是使用深度优先还是广度优先算法爬取下一个链接。每次发起网络请求的时候,会涉及到一个DNS的解析过程(将****转换成IP)为了避免重复地DNS解析,我们需要把解析好的IP缓存下来。URL那么多,如何判断哪些****已经爬过,哪些没有爬过,简单点就是是使用字典结构来存储已经爬过的的URL,但是如果碰过海量的URL时,字典占用的内存空间非常大,此时你需要考虑使用BloomFilter(布隆过滤器),用一个线程逐个地爬取数据,效率低得可怜,如果提高爬虫效率,是使用多线程,多进程还是协程,还是分布式操作,都需要反复实践。



工程师
2020-09-16 23:38:43     打赏
2楼

总结的非常好


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]