python爬虫入门
python爬虫入门
这是一篇纯属个人经验,内含吹水的学习总结。网上关于爬虫的教程有很多了,但是没有一个完整的学习方案,这篇文章就是对于新手入门给出一套完整的学习方案。如果是同样有自主学习能力,对python了解不多,对爬虫一无所知的小白,看完这篇文章一定能有所收获。
1. 学习内容
最近大概花了7天的时间快速的对目前流行的python爬虫工具进行了学习。掌握了爬虫相关的基本知识,包括requests、urllib、beautifulsoup、css选择器,以及当下很火的pyspider、scrapy框架、selenium模拟器的基本使用方法。
完成了python爬虫入门,目前能在各种文档的帮助下完成小规模爬虫的编写,对于网站反爬也能使用验证码识别、模拟登陆以及代理设置三种手段来解决。不过编程速度不是很高,编程之路走不得捷径,日后还需不断coding。
接下来的一段时间打算先暂停爬虫方面的学习,转向对linux系统的学习,因此以此文记录学习过程中的心得体会,算是对这7天学习的一个总结。
2. 我是如何学习的?
2.1 走了一些弯路
不得不说在一开始走了不少弯路。我以blog起步,当时调了一个还算严谨的blog(自认为,现在看来真的写的一般)就一路闷头干,跟着博客一步一步学习,博客缺少的就google。这个过程中很大的问题在于知识不够系统,知识的顺序并没有严格的梳理过,我时常要查阅大量的资料才能把缺少的东西补全,而这个过程浪费了不少时间。并且有些地方我不得不自己尝试来推理出某个函数、某个变量代表的原意,可想而知学习质量不高。
2.2 正式开始
2.2.1 重新决定资料来源
之后我选择重新学起,这次使用的资料来源是国内爬虫方面博主“静觅”的一本书《Python3网络爬虫开发实战》,这是非常坚实的一本书,内容详实,这点对于新手来讲再重要不过了。现在我并没有学习完这本书,其中的App爬取、分布式两部分没有进行学习。
2.2.2 学习方式
这部分依照《Python3网络爬虫开发实战》的章节顺序谈谈我个人的体会。
先提几个"global suggestions":
- 英文就英文,不要用翻译,准确性值得付出
- 官方文档永远是最好的答疑工具,但是需要的耐心
- 只进行必要的编码尝试,动脑不如动手,因为大量知识涌来容易盲目尝试,不加思考的尝试反而会浪费时间
- 不要为了练习而练习,练习是为了理解代码。如果使用pycharm,Ctrl+B值得拥有
2.2.3 基本库
前几章主要介绍基本库的使用,这部分我认为要把精力放在对爬虫过程的理解上,纠结于具体API是没有意义的,API的熟练掌握可以在项目实战中慢慢掌握,初期可以看着文档写。而抽象理解是珍贵的,把API代表的抽象意义抽取出来进行梳理,这会是后面几章的必要前提。
2.2.4 解析库
爬虫的流程粗略来讲就是得到网址,抓取网址上的内容,解析内容提取新的网址和需要的数据。因此解析是爬虫编写必不可少的一部分。解析简单来讲就是对文本内容的筛选,这个事情其实就是正则表达式经常干的。因此正则表达式可以用来进行解析。但是用起来很麻烦,所以有了各样方便好用的手段来解析文本。主流的方法包括Xpath、css选择器。我推荐css选择器,在体验过xpath、正则、css选择器后,css胜出。
学习它的难点:
- 在于我没接触过前端,需要补充大量前期知识才能知道怎么去学习css。
css语法资料
http://www.w3school.com.cn/cssref/css_selectors.asp
https://www.w3schools.com/cssref/css_functions.asp
- css表达式写完后的验证需要合适的方法,这里我推荐使用浏览器自带的网页分析工具。按下你的F12,Ctrl+F打开搜索框,大部分浏览器都是支持css选择器表达式进行搜索的。之所以推荐这种方式是因为之后再爬虫的编写时,这就是你书写css选择器的流程。
除此之外最重要的:一定要先学会如何解析,否则之后的实验会造成时间浪费。
2.2.5 数据存储
这节分两部分:
- 文件格式:csv、txt、json,建议不要跳。跳了还得回头学,都是基础知识。
- 数据库的使用。看个人需求,如果不需要的话可以跳过,不过对于关系型数据库和菲关系型数据库的概念了解一下不吃亏。
2.2.6 Ajax数据爬取+动态渲染页面爬取
这两个都解决同一个问题:动态加载内容怎么爬?
- Ajax数据爬取给出的解决方案是观察请求链接的规律来模拟请求(请求:动态内容先向服务器请求内容再把内容展示出来)。
- 动态渲染页面爬取给出的解决方案是使用浏览器模拟器,模拟人操作浏览器的过程来实现爬取动态内容。不得不说还挺慢的。毕竟浏览器得一步一步来,而Ajax数据爬取直接构造url链接就申请信息了。
两者都得会,前者得找出链接规律才行,很难而且有的网站根本没有规律;后者更简单,适用范围广。这部分不难,书上写的非常明白,但是很费时间,因为需要尝试不同的网站才能体会到两种方式的区别和在使用中的优缺点。这里如果之前的css选择语法没学会会很浪费时间。耐心看,代码敲一遍形成模板,以后直接用就好。
2.2.1 代理的使用
爬虫必不可少的一部分,有的网站会对异常大量访问的ip进行封禁,这时候就要代理来破局了。
这部分分的中代理池部分不想看可以跳,毕竟现成的代理池一大堆,api也很简单。
他推荐了一些付费的代理,我没有试,使用的是免费代理,可能实验中规模较小,速度上没有不能接受。
这一部分是代理使用的基础,之后要学习的scrapy框架也会涉及代理设置的知识。
2.2.7 模拟登陆
我得说这部分我急功近利了
只学习了基础模拟登陆的方法,这个篇幅很小不难学。
之后还有更好用的cookie池,这章一大部分都在讲这个,考虑到这是第一遍学,cookie池也不是必要的一部分,暂时跳过这部分,下学期项目上了再来处理。
2.3. 爬虫框架
爬虫框架简单来讲就是爬虫项目的半成品,构建一个完整项目离不开上面基础知识的支持。即使不用框架仍能写出爬虫程序,但是何必自己造轮子呢?框架也不是万能的,框架只是对上述基础能力的合理结合,爬虫的核心逻辑仍然需要自己来完成,并不是给出网址就能生成令人满意的爬虫。
2.3.1 pyspider:一个简单但好用的爬虫框架
pysider是由国内binux大神开发的一款爬虫框架,容易上手,便于调试,有图像界面,但是客制化程度不高,效率也比不上scrapy,但是对于新手来说确实是一款非常优秀的学习工具。pyspider没有什么坑,不过它的在线编辑器不是特别好用,没有代码补全功能,还是建议在本地修改完成后再进行测试。
我个人也推荐新手使用pyspider来学习爬虫,因为scrapy的调试信息真的是不够明确,调试难度上还是pyspider更低一些。
2.3.2 scrapy:工程级爬虫框架
相比pyspider,scrapy复杂了不只一星半点,也没有图像界面,纯粹命令行操作,代码在本地进行编辑。正因为复杂,更要好好理解框架结构才能用起来得心应手。
《Python3网络爬虫开发实战》对scrapy有详细的描述,但是我还是建议仔细阅读官方文档,官方文档能提供更全面的信息。
对于scrapy,我想对喜欢钻研技术的人来说它的复杂不会成为扣分点,就如linux和windows,复杂才有探索的乐趣。另一方面scrapy真正使用后会觉得在数据的筛选方面比pyspider好用太多,复杂是为了更好的支持使用的简便。而且虽然复杂,但是只要开发完成第一个爬虫,之后开发速度就快不少,毕竟都是code层面的东西,重复的有很多。
3. 总结
虽然我学习爬虫的出发点只是想在项目中进一步学习python,但是不得不说爬虫是很好玩的工具,学起来很有意思。本篇主要讲的是python爬虫的入门方法,具体的技术细节没有涉及,一是相比前辈们自己还太菜,二是爬虫技术博客已经很多了再重复也没有意义。学习经验这个东西也非常主观,小马过河的故事大家都听过,各位看官结合自己实际情况来采纳。
文章中有错误的地方请指正,有补充建议请提出来,不要客气啊。