前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何入门 Python 爬虫?

如何入门 Python 爬虫?

作者头像
机器学习AI算法工程
发布2018-03-12 16:35:56
8780
发布2018-03-12 16:35:56
举报

刚做完一个跟python爬虫相关的项目,也来说说自己的经验,希望对想学习python爬虫的人有所帮助。

既然问的是如何入门,我想一定是助学者,而且我觉得想学python的有很大一部分不是计算机相关专业的(比如我)。记得我当初想入门学python,学爬虫,最困惑的就是一大堆名词听都没听说过。我觉得对初学者而言,不应该一上来就提分布式,多线程,因为这些名词对于一个未入门的人来说很有可能是陌生的,而这些东西在初期学爬虫的时候是不需要用到的,只有当项目上了一定规模,需要提升性能的时候才会用到。而且我建议初学者不要去学什么框架。很多人建议去学scrapy,初学就去接触这些框架很容易学的云里雾里。就好比很多人一上来就建议刚接触web开发的人去学ruby on rails,rails虽好,但rails太“智能”了,它帮你做了太多的事情,以至于你甚至会觉得我都没怎么做,这东西是怎么出来的。这样就会学的很困惑。框架是给有基础的人提升开发速度用的,初学者还是老老实实从基础学起。

爬虫不外乎是为了获取网络上的信息,要取得信息,你就得给给服务器发请求,然后服务器把信息发给你,这一步一般较为简单。服务器发给你的一般是一个html文件,拿到文件后,你可能会觉得这是什么乱七八糟的东西,怎么都看不懂。我觉得对于一个非计算机系的人来说,想要做点东西出来,最大的困难是缺的知识太多了,html看不懂,http原理也不懂。所以这时候你会发现你需要去学一点html,去w3cschool看一看教程,你并不需要懂很多,弄懂各种标签的含义,能看懂html文件里的内容就行。

拿到html文件,接下来你要做的就是提取信息,准确地说,是你感兴趣的信息。你需要两样东西,一样用来快速定位你要获取的信息在html源文件中的位置,让你知道要提取什么;另一样用来提取信息。第一样可以选firefox或chrome,都自带开发者功能,第二样可以用Beautiful Soup。所以你需要花一点时间了解开发者功能怎么用,以及Beautiful Soup这个库的用法。会发请求,会提取信息,这些就够了,赶紧做点东西,找点成就感,这样才能有动力继续做下去。比如可以做下载某些网站的图片,把知乎上的答案抓到本地。有点成就感之后就有动力更深入学习了。

在做的过程中,你可能会遇到一些困难,比如你拿到的html跟浏览器看到的html不一样,你上网找一找就会发现,你需要了解一个叫http请求头的东西。找一点资料看看,知道http请求头是怎么回事就行了,不需要完全弄懂http的原理,解决当下的问题才是最重要的,有什么不懂的稍后再补。学了点东西后,你就知道这怎么解决这个问题了,只需在发请求的时候加一个参数,带上http请求头即可,这叫做模拟浏览器的行为。把这个问题解决后,抓取大多数网站都没有问题了。成就感又提升了一点。

有时候你又会发现,有一些网站需要登录才能取得一些信息。找一找资料,你就会接触到“模拟登录”,“post请求”等名词。这时候,你又需要去学习一些http的知识,了解“get”,“post”是怎么回事,以及如何发post请求。为了方便处理http的相关东西,你最好学习一下requests这个库。学习之后,参照网上的代码,我相信模拟登录的问题也解决了。比如,你就可以模拟登录知乎,然后抓取知乎的首页看看,是不是跟你用浏览器中看到的一样?

继续深入,你就会发现这些也不够了,有些信息我需要点一下“更多”按钮才会加载,如何获取这些信息呢?这时候你就需要分析在点“更多”按钮的时候浏览器做了什么,然后去模拟浏览器的行为。如何分析呢?我一般用firebug,看看点击更多按钮的时候,浏览器做了什么,浏览器一般会发一个post请求,会带上一些参数,你需要知道的就是要带上哪些参数,发请求给谁。这一步可能会有点困难,可以慢慢体会怎么做。一旦越过了这这道坎,你就几乎可以取得任何你想要的信息了。

假设你已经成功了,得到了服务器传回来的数据,你可能会发现,这又跟html不一样了。这是一个叫json的东西,传回来的数据都在里面了,接下来就是要提取数据了。所以你又要去了解json是什么,如何用python处理json。

好了,基本上做完这些,爬虫就算入了门。接下来为了提高性能,扩大规模,再去搞多线程,分布式什么的吧,这也是我接下来需要努力和学习的方向。

那么,学了这些后,我做了点什么?

(1)编写知乎爬虫,一个获取知乎上各种信息的工具,你可以获取任何你想要的问题,答案,用户,收藏夹信息,并且可以方便地将答案备份导出为 txt 或 markdown 文件。获取某个问题下的全部回答,或者备份某大V的全部回答都变得很简单。当然,功能不只有这些。在这个项目中遇到的跟爬虫相关的所有问题几乎都在上面了,当然也遇到了一些其他的问题,都通过网上的资料和他人的帮助解决了。这个项目不到一千行,虽然不是很大,跟一些大牛的项目没法比,代码写的可能也不是很好,请大家多多指教。

以上就是我作为一个初学者的学习经历。题主提这个问题也有一段时间了,可能都已经学会了吧,我就全当做学完后的总结吧。希望对今后想学习的人有所帮助。

最后说一些感想:

1. 不要急于求成,编程虽然不难,但也没有那么简单,不要想着速成,特别是对于计算机基础不是很好的人。

2. 学习的过程中可能会遇到很多困难(上面可能没有提到),或许会有很多你没有接触的东西冒出来,善用google,一个个问题地解决,缺什么补什么。

3. 对于初学者来讲,最重要的不是去学各种吊炸天的框架,追最新的技术。技术,框架是学不完的,永远都会层出不穷,最重要的是把基础学好。很多时候你有一个问题解决不了,都是你某些方面的知识缺了。慢慢来,不要急,随着学习的深入,再回过头来看以前的问题,会有豁然开朗的感觉。

4. 一定要动手做,找点成就感,对你继续做下去有很大的促进作用。不然的话,遇到点困难很容易就放弃了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据挖掘DT数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档