Skip to main content
 Web开发网 » 手机 » 知乎教程

如何爬取知乎所有图片并自动分类下载(附源码),Python入门教程

2021年11月19日7610百度已收录

如何爬取知乎所有图片并自动分类下载(附源码),Python入门教程  知乎教程 第1张

爬虫入门之后,我们有两条路可以走。

一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展。另一条路便是学习一些优秀的框架,先把这些框架用熟,可以确保能够应付一些基本的爬虫任务,也就是所谓的解决温饱问题,然后再深入学习它的源码等知识,进一步强化。

就个人而言,前一种方法其实就是自己动手造轮子,前人其实已经有了一些比较好的框架,可以直接拿来用,但是为了自己能够研究得更加深入和对爬虫有更全面的了解,自己动手去多做。后一种方法就是直接拿来前人已经写好的比较优秀的框架,拿来用好,首先确保可以完成你想要完成的任务,然后自己再深入研究学习。第一种而言,自己探索的多,对爬虫的知识掌握会比较透彻。第二种,拿别人的来用,自己方便了,可是可能就会没有了深入研究框架的心情,还有可能思路被束缚。

如何爬取知乎所有图片并自动分类下载(附源码),Python入门教程  知乎教程 第2张

接触了几个爬虫框架,其中比较好用的是 Scrapy 和PySpider。就个人而言,pyspider上手更简单,操作更加简便,因为它增加了 WEB 界面,写爬虫迅速,集成了phantomjs,可以用来抓取js渲染的页面。Scrapy自定义程度高,比 PySpider更底层一些,适合学习研究,需要学习的相关知识多,不过自己拿来研究分布式和多线程等等是非常合适的。

从爬虫必要的几个基本需求来讲:

  1.抓取

  py的urllib不一定去用,但是要学,如果还没用过的话。

  比较好的替代品有requests等第三方更人性化、成熟的库,如果pyer不了解各种库,那就白学了。

  抓取最基本就是拉网页回来。

  如果深入做下去,会发现要面对不同的网页要求,比如有认证的,不同文件格式、编码处理,各种奇怪的url合规化处理、重复抓取问题、cookies跟随问题、多线程多进程抓取、多节点抓取、抓取调度、资源压缩等一系列问题。

  所以第一步就是拉网页回来,慢慢会发现各种问题待优化。

  2.存储

  抓回来一般会用一定策略存下来,而不是直接分析,个人觉得更好的架构应该是把分析和抓取分离,更加松散,每个环节出了问题能够隔离另外一个环节可能出现的问题,好排查也好更新发布。

  那么存文件系统、SQLorNOSQL数据库、内存数据库,如何去存就是这个环节的重点。

  可以选择存文件系统开始,然后以一定规则命名。

  3.分析

  对网页进行文本分析,提取链接也好,提取正文也好,总之看的需求,但是一定要做的就是分析链接了。

  可以用认为最快最优的办法,比如正则表达式。

  然后将分析后的结果应用与其他环节:)

  4.展示

  要是做了一堆事情,一点展示输出都没有,如何展现价值。

  所以找到好的展示组件,去show出肌肉也是关键。

  如果为了做个站去写爬虫,抑或要分析某个东西的数据,都不要忘了这个环节,更好地把结果展示出来给别人感受。

如何爬取知乎所有图片并自动分类下载(附源码),Python入门教程  知乎教程 第3张

PySpider是binux做的一个爬虫架构的开源化实现。主要的功能需求是:

抓取、更新调度多站点的特定的页面

需要对页面进行结构化信息提取

灵活可扩展,稳定可监控

而这也是绝大多数python爬虫的需求 —— 定向抓取,结构化化解析。但是面对结构迥异的各种网站,单一的抓取模式并不一定能满足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件往往不够灵活,于是,通过脚本去控制抓取是最后的选择。

而去重调度,队列,抓取,异常处理,监控等功能作为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了这套框架。

pyspider的设计基础是:以python脚本驱动的抓取环模型爬虫

通过python脚本进行结构化信息的提取,follow链接调度抓取控制,实现最大的灵活性

通过web化的脚本编写、调试环境。web展现调度状态

抓取环模型成熟稳定,模块间相互独立,通过消息队列连接,从单进程到多机分布式灵活拓展

pyspider-arch

pyspider的架构主要分为 scheduler(调度器), fetcher(抓取器), processor(脚本执行):

各个组件间使用消息队列连接,除了scheduler是单点的,fetcher 和 processor 都是可以多实例分布式部署的。 scheduler 负责整体的调度控制

任务由 scheduler 发起调度,fetcher 抓取网页内容, processor 执行预先编写的python脚本,输出结果或产生新的提链任务(发往 scheduler),形成闭环。

每个脚本可以灵活使用各种python库对页面进行解析,使用框架API控制下一步抓取动作,通过设置回调控制解析动作。

Python爬虫入门学习。现在,Python可以做大数据的基础,人工智能的编程语言等,是一门比较热门的语言。我也写了很多其他的非常简单的详细教程,欢迎大家一起来交流。

如何爬取知乎所有图片并自动分类下载(附源码),Python入门教程  知乎教程 第4张

以上是全部代码,只是善于分享,不足之处请包涵!爬虫基本的原理就是,获取源码,进而获取网页内容。一般来说,只要你给一个入口,通过分析,可以找到无限个其他相关的你需要的资源,进而进行爬取。

我也写了很多其他的非常简单的入门级的爬虫详细教程,关注后,点击我的头像,就可以查看到。

欢迎大家一起留言讨论和交流,谢谢!

评论列表暂无评论
发表评论
微信