如何入门 Python 爬虫?

刚做完一个跟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. 一定要动手做,找点成就感,对你继续做下去有很大的促进作用。不然的话,遇到点困难很容易就放弃了。

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2015-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

当卡片式UI不再流行,列表式UI将是王牌

随着 Material Design 的流行,卡片式 UI 已经成为现代 web 设计的一部分。尤其是你在提供一个汇总归档信息的界面时。 卡片是提供详细信息的入...

3167
来自专栏互联网数据官iCDO

【转载】搜索引擎来路关键词的挖掘:百度统计的高级分析报告导出获取来源关键词

简单的说就是买百度统计的高级分析,然后用关键词维度组合其他访问属性导出报告。 n年没有接触SEO了,最近发现现在的搜索引擎优化已经和以前完全不一样了。 自从各大...

2434
来自专栏hadoop学习笔记

学习hadoop需要什么基础

“学习hadoop需要什么基础”这已经不是一个新鲜的话题了,随便上网搜索一下就能找出成百上千篇的文章在讲学习hadoop需要掌握的基础。再直接的一点的问题就是—...

110
来自专栏华章科技

学好Python爬取京东知乎价值数据

如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,...

572
来自专栏Django中文社区

两个不错的django免费入门学习资源

近期在群里看到一些群友分享的 django 学习资料,感觉质量非常不错,关键是这些学习资料还都是免费的!因此在这里分享给大家,希望好的东西能让更多的人知道,也算...

4518
来自专栏13blog.site

Java开源博客My-Blog之docker容器组件化修改

前言 5月13号上线了自己的个人博客,《Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦》,紧接着也在github...

3357
来自专栏点滴积累

geotrellis使用初探

最近,单位领导要求我研究一下geotrellis(GITHUB地址:https://github.com/geotrellis/geotrellis,官网htt...

3738
来自专栏程序员互动联盟

自学编程该如何入手?

光讲如何如何怎样怎样学习编程,都不是真正从零开始,针对的都是懂一些语言,有一点语言基础的人。对于一点都不懂的人有点残忍。大多数人都有自学编程的激情,但是如何才...

3289
来自专栏大前端开发

微信小程序实例直播讲解(1):一个汽车爱好者小程序

最近在我们的《前端精修社》微信群里聊得兴起,给初学小程序开发的群友做了个直播,介绍了一下我自己之前开发的一个小程序《爱摸车》的源码,该小程序的功能不算复杂,但是...

562
来自专栏编程

程序员为什么加班太多?有可能是代码写得烂……

程序员往往渴望加入的是一支“30%的时间在写代码,而70%的时间在喝着咖啡讨论着如何将产品做好”的团队。软件工作应该成为一项技术和艺术融合的高智力活动,而项目经...

1990

扫描关注云+社区