爬虫爬虫 - 知乎的爬虫 (Scrapy 框架)

背景: 前段时间适应了工作环境之后就寻思开始自己捣鼓点东西玩玩, 于是想啊既然网上这么多爬虫教程什么的,那咱也来凑凑热闹把,毕竟我也很喜欢搞点Data玩一玩。但是拖延了好久,这不趁着回来办签证这功夫赶紧把这个push了!


开发的环境:

Mac OSX, Python 3.5, Scrapy 框架  

Tips: 

为什么使用 Python 3.5?
Python 2.x 在不久的将来就不被维护了。

使用的工具:

给大家推荐一款mac上编写python的IDE - Pycharm, 目前我发现它的优点有:1. python intepreter 的版本控制做的很棒,可以随意切换python 版本,另外对每个版本下都安装了什么lib也一目了然。2. 对于不同版本的python,可以很简单的对其进行lib的增加和删除。减少了安装需要考虑路径等不必要的麻烦。3. 支持 自动填充 你打出一个function的开头它给你结尾这样。

项目的简介:

本次项目实现了模拟登录,并在登录之后爬取某个话题下面的所有问题信息。

项目代码:


项目的分析步骤:

什么是Scrapy?   

Scrapy 是一个爬虫的框架,它提供了很多方便的组件比如 item - 用一个用来存储下载下来的数据的类, itempipeline - 用来对下载下来的数据进行操作的类等等。
下图是一个scrapy框架的整个流程. 

1. 当我们开始spider之后,发送的request会首先经过DownloadMiddleware - 可以选择性的在这个middleware里面对request进行操作. 2. 当这个request成功的得到目标网站的回应之后,目标网站会返回一个response, 我们可以在SpiderMiddleware中对这个response进行操作。 3. 当我们得到response之后在middleware中我们可以有两步不同操作 3.1 从当前response中使用xpath或者beautifulsoap 得到我们想要的数据 3.2 得到新的url 我们可以将他放倒Scheduler中进行 步骤1的操作。


 

爬虫的大概工作原理?

爬虫简单来说就是一个使用代码模拟http get/post 请求的工具,当对目标网站进行请求后我们会得到response,这个response就会包含我们想到爬取的数据或者想要爬取的数据的url.  (另外,建议大家顺便看一下什么是 robots.txt - 每个网站都会有)

如何分析 get/post 请求?

推荐使用 FireFoxDveloperEdition - 推荐理由 : 好用!
右键打开 inspect element -> Network -> XHR  准备工作完成,现在输入任何你想要打开的网址你都能看到在打开的这一过程中都发生了什么请求.
XHR: XMLHttpRequest. 

项目的结果:

本次项目主要的贡献是 使用scrapy对知乎进行登录,在登录知乎之后大家可以爬取大家感兴趣的内容了,我在模拟登录知乎后爬取的内容是  在 人工智能话题 下所有收录的问题的信息。

以下是我分析的结果 - 随便弄一下。。很简单不要在意。。

该话题下面一共 510 个问题。 (话题下面收录的是某个问题的最佳回答,当然这个最佳的回答可以是由不同的人回答的。如果某个问题的最佳回答的次数多就是说明这个问题是大家比较关心的,并且有很多大牛在下面回答。)
问题: 如果AI真的统治了地球,人类如何翻盘?  - 出现了 8 次
问题: 2017 年 11 月百度与小米的全面战略合作有哪些亮点?可能会产生哪些影响?  - 出现了 6 次
问题: 如何看待阿里巴巴发布“年薪60w+股票”的待遇招聘语言学专家以及translator?  - 出现了 6 次
问题: 如何看待最近一段时间旷视科技Face++、阿里、小米、京东、科大讯飞和地平线等相继在南京建立研发中心?  - 出现了 5 次
问题: 如何评价 12 月 2日 阿尔法巴无人驾驶电动公交车深圳首发试运行?  - 出现了 5 次
问题: 如何看待 Boston Dynamics 2017.11.16 新发布的机器人 Atlas 视频?  - 出现了 5 次
问题: 如何评价 2017 年 Jeff Dean 的关于使用 deep learning 做索引的论文?  - 出现了 4 次
问题: 现在什么职业最容易被人工智能取代?  - 出现了 4 次
问题: 从鸦片战争到如今,我们中国是怎样一步步获得现在的国际地位的?  - 出现了 4 次
问题: 你们家的人工智障扫地机器人出现过哪些让人啼笑皆非的事情?  - 出现了 4 次
问题: 为什么 AI 发展到今天,围棋能下过李世石、柯洁,仍不能完成帮人类洗衣物、做饭这种简单的事?  - 出现了 4 次
问题: NASA 在 2017 年 12 月 14 日宣布使用机器学习方法发现两颗新系外行星,有何重要意义?  - 出现了 3 次
问题: 考虑到未来人工智能的发展,应该学习C++/C语言还是Python语言?  - 出现了 3 次
问题: 如何看待京东金融JDD大赛今年举办的猪脸识别比赛?  - 出现了 3 次
问题: 利用ESP32可以实现哪些有趣的功能?  - 出现了 3 次
问题: 冬天太冷,不想动手来换台,人工智能电视哪家的比较好,求推荐!?  - 出现了 3 次
问题: 实验做不出效果是该放弃还是继续做下去?  - 出现了 3 次
问题: 你从数据中发现了哪些奇妙的不为人知的知识或者见解?  - 出现了 3 次
问题: 文化水平低可以学人工智能吗?  - 出现了 3 次
问题: 全球 TOP 互联网公司及学术界人工智能方向薪资、高薪的揽才计划有哪些?  - 出现了 3 次
问题: 如何看待小米旗下智能家居品牌米家将于11月28日在京召开首届小米IoT开发者大会?  - 出现了 3 次
问题: 如何评价 Kaiming He 在 ICCV 2017 上拿下双 Best 的 paper?  - 出现了 3 次
问题: 如何看待科技部公布的首批国家新一代人工智能开放创新平台?  - 出现了 3 次
问题: 极少量样本图片分类(如50类,每类3张图)的方法?  - 出现了 3 次
问题: 如何看待刘慈欣「未来人类必须改变不劳动者不得食的观念」的观点?  - 出现了 3 次
问题: 如何自学人工智能?  - 出现了 3 次
问题: 卷积神经网络工作原理直观的解释?  - 出现了 3 次


项目的利用:

在爬取知乎的数据之前首先需要进行登录操作,可以将本项目的登录部分给分离出来,作为一个已有的模块在它的基础上继续进行开发,能少造轮子就少造一个轮子。
pull 下来代码之后,在  Spider Body 中将 user_name 和 password改成自己的账户,将 topic_url  改成自己喜欢的 就ok了。

结语:

谢谢。 如有问题欢迎指出。

被大家发现的问题:

1. 运行报错,[zhihu] INFO: xsrf token for current login: None
报在这一行:zhihuAPI/zhihu/spiders/spider_body.py", line 69, in post_login
callback=self.after_login -  感谢同学 @ Avaleee. 指出。
问题出现的原因:开发的时候使用的是vpn,当对知乎网站进行请求之后得到的response被自动转码。但是如果不使用vpn那么得到的response将会是被加密的数据,加密的方法就是在http 的header中 ,因为是加密的数据所以xsrf就不存在了(或者说被加密了)。就造成了找不到它的错误。
"Accept-Encoding": "gzip, deflate, br"
解决办法:将header中的accept-encoding 去掉 - 代码已经更新.


猜你喜欢

转载自blog.csdn.net/ytdxyhz/article/details/78817950