当前位置: 首页 > 科技观察

零基础的我是怎么开始写Python爬虫的

时间:2023-03-21 19:37:09 科技观察

刚开始接触爬虫的时候,惊呆了。十几行代码,我就可以获取无数网页的所有信息,自动选择网页元素,自动整理。到结构化文件中。利用这些数据,我们可以在很多领域进行分析和市场调研,获得很多有价值的信息。可惜这种技能我没有用到,所以果断开始学习了。--一开始并不总是最简单的。刚开始对爬虫了解不多,也没有任何计算机基础和编程基础,所以真的有点一头雾水。没有明确的概念,从哪里开始学,哪些是一开始学的,哪些是打了一定基础后再学的。因为是Python爬虫,所以Python是必须的,所以先从Python开始吧。于是看了一些教程和书籍,了解基本的数据结构,然后是列表、字典、元组、各种函数和控制语句(条件语句、循环语句)。学习了一段时间,才发现自己还没有接触到真正的爬虫,纯理论的学习很快就忘记了,再回去复习也是浪费时间,所以不要太绝望了。过完Python基础,连个会敲代码的IDE都没有装,想想就哭笑不得。--开始直接上手。看了一篇关于爬虫的技术文章,思路清晰,语言通俗易懂,让我觉得这就是我要学的爬虫。于是决定先配置一个环境,试试看爬虫是怎么玩的。(当然,你可以理解这是浮躁,但确实每个新手都想做直观且有反馈的事情。)为了怕出错,我安装了比较安全的Anaconda,使用内置的JupyterNotebook作为IDE编写代码。很高兴看到很多人说配置环境有各种bug。很多时候,打败你的不是事情本身,而是爬虫配置环境。遇到的另一个问题是,Python爬虫可以用很多包或框架来实现。我应该选择哪一个?我的原则是简单易用,少写代码。对于一个新手来说,性能和效率我都过关了。所以我开始接触urllib和BeautifulSoup,因为很容易听到别人的声音。我上手的第一个案例是爬取豆瓣电影。无数人推荐豆瓣作为初学者的例子,因为页面简单,反爬虫不严格。先从爬取豆瓣电影的一些入门级例子说起。从这些例子中,我了解到一点爬虫的基本原理:下载页面、解析页面、定位和提取数据。当然,我没有去系统看urllib和BeautifulSoup。我需要解决眼前例子中的问题,比如下载、解析页面,基本都是固定句。直接用就可以了,先不学习原理了。使用urllib下载并解析页面的固定句式结构。BeautifulSoup中的基本方法当然也不能忽略,但无非就是find、get_text()之类的,信息量很小。就这样,通过别人的思路和美汤的用法,完成了豆瓣电影的基本信息爬取。使用BeautifulSoup爬取豆瓣电影详情--爬虫越来越好了有了一些套路和形式,就会有目标,可以继续学习。还是豆瓣,自己去探索爬取更多信息,爬多部电影,多页面。这时候发现基础不够,比如爬多元素、翻页、处理多种情况涉及的语句控制,提取内容涉及的字符串、列表、字典的处理远远不够.回过头来补充Python的基础知识会很有针对性,解决问题立马拿来用,理解也会更深。就这样,直到我爬取了豆瓣TOP250的书籍和电影,我才基本了解了一个爬虫的基本流程。BeautifulSoup还不错,只是需要花一些时间了解一些网页的基础知识,不然有些元素的定位和选择还是会很头疼。后来才知道xpath是入门必备的利器。你可以直接从Chrome中复制它,你可以在任何地方播放。即使您想自己编写xpath,也可以通过w3school上几个页面上的xpath教程在一小时内完成。requests貌似比urllib好用,但是摸索总是一个试错的过程,而试错的代价就是时间。requests+xpath爬取豆瓣TOP250图书信息--上反爬虫栏了。通过requests+xpath,我可以爬取很多网站。后来实践了小猪的租房信息和当当的图书资料。我是在爬钩子的时候发现问题的。首先,我的请求根本不会返回信息。想把自己的爬虫伪装成浏览器,终于知道别人代码里的header信息是干什么用的了。😂.在爬虫中添加headers信息,伪装成真实用户,然后找到各种定位不到的元素,然后就知道这是异步加载,数据根本不在网页源代码中,所以需要通过抓包获取网页信息。因此在各种JS和XHR文件中预览以查找包含数据的链接。知乎当然可以。自己加载的文件不多。找到了json文件,直接获取了对应的数据。(这里安利一个chrome插件:jsonview,方便小白轻松看懂json文件。)浏览器抓取JavaScript加载的数据,对反爬虫有了解。当然,这是最基本的,更严格的IP限制、验证码、文本加密等,可能也会遇到很多困难。但是如果能解决现在的问题那岂不是很好?只有一一突破,才能更有效率地学习。比如抓取其他网站时IP被封了。通过time.sleep()控制爬虫频率就可以轻松解决。如果限制比较严格或者需要保证爬取速度,应该使用代理IP来解决。当然后来也尝试了Selenium。这实际上是根据真实的用户浏览行为(点击、搜索、翻页)来实现爬虫。所以对于那些对抗爬虫能力特别强的网站是没有办法解决的。Selenium是一个超级好用的东东,虽然速度慢了点。--试试强大的Scrapy框架配合requests+xpath和抓包的方式,可以做很多事情。豆瓣、58同城、知乎、拉狗各个类别下的电影基本都可以。但是,当要爬取的数据量很大,需要对各个模块进行灵活处理时,就会显得很无能为力。于是学习了强大的Scrapy框架,它不仅可以轻松构建Requests,还有强大的Selector可以轻松解析Response。然而,最让人惊喜的是它超强的性能,可以对爬虫进行工程化和模块化。Scrapy框架的基本组成学习了Scrapy,尝试自己搭建了一个简单的爬虫框架。在做大规模数据爬取的时候,能够结构化、工程化的去思考大规模的爬取问题,这让我对爬虫项目有所借鉴。维度来思考问题。当然,Scrapy自带的selector、middleware、spider等会比较难理解。建议结合具体的例子,参考别人的代码来理解实现过程,这样才能更好的理解。使用Scrapy爬取大量租房信息--本地文件无法移动。在数据库上爬回大量数据后,发现保存本地文件很不方便。即使我保存了,打开大文件时电脑也会死机,非常严重。怎么做?果断往数据库走,于是开始钻研MongoDB。可以存储结构化和非结构化数据。安装好PyMongo后,就可以很方便的用Python操作数据库了。MongoDB本身的安装会比较麻烦。如果自己去折腾,可能会惹上麻烦。刚开始安装的时候也出现了各种BUG。感谢X师傅的指点,解决了很多问题。当然,对于爬虫来说,不需要高深的数据库技术,主要是数据的存储和提取,顺便掌握了插入、删除等基本操作。总之,能够高效的将爬取到的数据提取出来就OK了。爬取pullhook招聘数据并用MongoDB存储--传说中的分布式爬虫这时候基本上可以爬取很大一部分网页,瓶颈集中在爬取大规模数据的效率上。因为学习了Scrapy,自然而然的接触到了一个非常厉害的名字:分布式爬虫。分布式是听着不知道就吓人,其实是利用了多线程的原理,让多个爬虫同时工作。除了之前学过的Scrapy和MongoDB,看来还需要了解一下Redis。Scrapy用于做基础的页面爬取,MongoDB用于存储爬取的数据,Redis用于存储待爬网页的队列,即任务队列。分布式的东西看起来很可怕,其实无非就是分解一下,一步步学习。分布式爬58同城:定义零基础学习爬虫的项目内容部分,确实有很多坑,总结如下:1.环境配置,各种安装包,环境变量对小白太不友好;2、缺乏合理的学习路径,学习Python和HTML极易放弃;3、Python有很多包和框架可以选择,但是小白不知道哪个更友好;4、遇到问题,连描述都不知道,更不知道解决方法;5、网上的资料很散乱,对小白不友好,很多看起来云里雾里;6、有些东西好像看懂了,但是自己写代码还是有难度;...所以像我一样,很多人爬坑最好的经验就是:尽量不要系统地啃东西,找一个实用的项目(从豆瓣这样简单的开始),直接入手。