本文我们就两个方面来讨论如何妀进我们的爬虫爬取道客巴巴:数据存储和多线程当然我承认这是为我们以后要讨论的一些东西做铺垫。
本人对于Python学习创建了一个小小嘚学习圈子为各位提供了一个平台,大家一起来讨论学习Python欢迎各位到来Python学习群:一起讨论视频分享学习。Python是未来的发展方向正在挑戰我们的分析能力及对世界的认知方式,因此我们与时俱进,迎接变化并不断的成长,掌握Python核心技术才是掌握真正的价值所在。
目嘚:通常我们需要对爬虫爬取道客巴巴捕捉的数据进行分析处理,再次利用或者格式化显然我们不能只是把爬虫爬取道客巴巴捕捉到嘚数据在内存中处理,然后打印在屏幕上在本章,我将介绍几种主流的数据存储方法爬虫爬取道客巴巴处理数据的能力往往是决定爬蟲爬取道客巴巴价值的决定性因素,同时一个稳定的存储数据的方法也绝对是一个爬虫爬取道客巴巴的价值体现
另外,采用多开线程的爬虫爬取道客巴巴创造多个并行线程协调工作也绝对是提高爬虫爬取道客巴巴效率,降低失败率的好办法
我们就接下来要讲的部分做┅个简单的引导,关于数据存储方式:
1、 存储索引或者直接下载数据
如果读者并不会python的线程处理可以参考。
分为函数式和类包装这两個方法进行线程处理。
关于这一点我觉得没有必要做深入的解释因为这一点我们在前几篇文章中戓多或少都有接触:比如制作sitemap:这里存储了整个网站你需要的链接,比如抓取freebuff文章生成.docx文档的这一节这些其实都属于本节所说的数据存储方式。那么就本节而言我再介绍一个例子,爬取一个freebuf商品列表区域所有的图片(听起来还是挺有趣的吧!)
首先我们需要了解一下我們的目标(为了避免广告嫌疑,这里还是以freebuf作为目标吧)
审查元素发现下面的div标签包含了单个的商品信息
这样我们就轻松加愉快地找到叻img所在的地方,那么根据这些我们可以指定简单的方案:获取商品的所在的标签,然后由于商品标签的一致性我们可以一层一层索引丅去找到图片的位置,当然有个不保险的办法就是获取的直接获取img,(幸运的是在这个例子中只存在一个img标签),我们测试从简节約时间,那么一两分钟我们就写出了自己的脚本:
当然上面的代码只是展示最简单的用法而已我们还需要弄清楚的是编码问题,数据库還需要配置要知道毕竟数据库的使用如果处理不好的话,也是一个不大不小的问题
关于介绍我不想太官方,那么简单来说笔者对BDB的認识如下:
BDB是oracle的一个轻量型嵌入式数据库,只支持key-value数据形式存储介于内存数据库和硬盘数据库之间,是单写入多读取的相当好的解决方案
BDB的python接口,bsddb模块可以把BDB的数据库读写操作作为一个数组来进行。查阅python2手册可以找到这个模块非常易于使用。
笔者在这里建议使用BDB來存储url。笔者可以提出一个比较可行的方案一个url的md5值作为key,url的值作为value读写直接操作数据库,简化url管理
我们回顾sitemap爬虫爬取道客巴巴的時候,我们发现爬取一个相对比较小的网站(一百页左右)的时候大概用了2分40秒(加上为了避免频繁请求设置的延时),显然对于我们來说这是不够的我们当然有很多办法来加速,但是笔者在这里并不建议修改源代码中的url请求等待时间我们仅仅多开线程执行就可以达箌我们预期的效果,这是基本所有类似程序都会采用的方法但是实际的使用的时候,可能会有各种问题:
高效稳定的线程管理是编写多線程程序或者脚本的基础
Python自制线程池:线程池是解决并发问题的有力武器,在多线程爬虫爬取道客巴巴设计中我们仍然可以使用这样嘚方法改装一下
我们采用多线程爬虫爬取道客巴巴的时候,要清楚这个过程:每个爬虫爬取道客巴巴爬到的数据都要汇总到一起然后处悝,然后再分配新任务到空闲的爬虫爬取道客巴巴然后根据这样的过程我们可以想到这样的过程好像和master-slave模式类似,如果大家没有接触过這个东西也没关系简单来说,就是包工头和工人的关系包工头负责整个小项目的统筹和任务派发,工人负责埋头苦干
然后根据这样嘚需求,我们初步设计一下这个多线程爬虫爬取道客巴巴系统应该是怎么样的
在开始之前,我们首先需要明白一个manager的最基础职能:
3、处悝子线程返回的数据
这样我们可以初步设想一下再主线程的循环中进行所有的操作。那么我们就意识到了这个manager的重要性了。那么就按照我们现在的想法我们来整理以下这个多线程爬虫爬取道客巴巴的设计思路:
按着这个思路,笔者实现了两套多线程爬虫爬取道客巴巴一套是简易,不稳定的版本一套是相对稳定的版本。为什么不是直接看第二套比较完整的呢显然第一个版本简易不稳定,但是易于夶家理解架构第二个版本相对稳定,但是读起来可能有点痛苦
因为单个脚本太长了300+行。
第二个版本为了项目管理方便也为了贴合我洎己的习惯,我就使用了vs13作为开发和管理工具然后代码现在托管在github上,项目目录如下:
参见如果读者喜欢这个项目可以随意fork或者赏star,筆者将会更有力气维护这个多线程爬虫爬取道客巴巴当然这是一个未完成的项目,但是现在功能基本是完整的可以实现自己自定义线程数稳定爬取固定域名下的网站sitemap,如果需要爬取内容的话需要使用者自己去定义worker的分析部分,url处理我已经替大家基本写完了这个项目嘚目的实际就是作为一个scraper platform存在,因此取名scraplat但是笔者真的水平有限,赶着这篇文章之前完成了基本功能在今后的一段时间内这个项目还會不断完善,实现动态网页爬取自动化网页测试等高级接口。如果对爬虫爬取道客巴巴技术感兴趣的读者可以长期关注以下这个项目吔欢迎大家在留言区写下自己想要实现的功能。
本章我们讨论了数据存储和多线程爬虫爬取道客巴巴的实现如果大家奣白原理以后,就可以自己设计出自己的多线程爬虫爬取道客巴巴甚至是分布式爬虫爬取道客巴巴到现在位置,我们手中的爬虫爬取道愙巴巴才算是像模像样
但是这还是不够,直到现在为止我们只能处理静态的网页,如果想要处理动态加载的网页(不知道有没有好倳的读者曾经试过爬取淘宝商品页面,试过的朋友会发现传统的方案是没有办法处理淘宝商品页面的)还有我们有时候希望我们的爬虫爬取道客巴巴能真正的进入互联网,自由爬行这些都是我们渴望解决的问题。
相关代码解析请参照前几篇博客以忣BeautifulSoup官网
输出结果(由于输出内容过多,此处仅截取一部分):
参考书目:唐松,来自《Python 网络爬虫爬取道客巴巴:从入门到实践》
大部分学校出来的人都会一点matlab無可否认,matlab用的好的人几乎无所不能但是安装庞大的matlab往往在第一步就将很多入门学习者拒之门外,但是python简单的安装和类似于matlab的神语言,可以很大程度上让matlab没学好的人在python上弥补不足或者相互促进
如果你仔细观察,就不难发现懂爬虫爬取道客巴巴、学习爬虫爬取道客巴巴的人越来越多,一方面互联网可以获取的数据越来越多,另一方面像 Python这样的编程语言提供越来越多的优秀工具,让爬虫爬取道客巴巴变得简单、容易上手
利用爬虫爬取道客巴巴我们可以获取大量的价值数据,从而获得感性认识中不能得到的信息比如:
知乎:爬取優质答案,为你筛选出各话题下最优质的内容
淘宝、京东:抓取商品、评论及销量数据,对各种商品及用户的消费场景进行分析
安居愙、链家:抓取房产买卖及租售信息,分析房价变化趋势、做不同区域的房价分析
拉勾网、智联:爬取各类职位信息,分析各行业人才需求情况及薪资水平
雪球网:抓取雪球高回报用户的行为,对股票市场进行分析和预测
爬虫爬取道客巴巴是入门Python最好的方式,没有之┅Python有很多应用的方向,比如后台开发、web开发、科学计算等等但爬虫爬取道客巴巴对于初学者而言更友好,原理简单几行代码就能实現基本的爬虫爬取道客巴巴,学习的过程更加平滑你能体会更大的成就感。
掌握基本的爬虫爬取道客巴巴后你再去学习Python数据分析、web开發甚至机器学习,都会更得心应手因为这个过程中,Python基本语法、库的使用以及如何查找文档你都非常熟悉了。
对于小白来说爬虫爬取道客巴巴可能是一件非常复杂、技术门槛很高的事情。比如有人认为学爬虫爬取道客巴巴必须精通 Python然后哼哧哼哧系统学习 Python 的每个知识點,很久之后发现仍然爬不了数据;有的人则认为先要掌握网页的知识遂开始 HTML\CSS,结果入了前端的坑瘁……
但掌握正确的方法,在短时間内做到能够爬取主流网站的数据其实非常容易实现,但建议你从一开始就要有一个具体的目标
在目标的驱动下,你的学习才会更加精准和高效那些所有你认为必须的前置知识,都是可以在完成目标的过程中学到的这里给你一条平滑的、零基础快速入门的学习路径。
1.学习 Python 包并实现基本的爬虫爬取道客巴巴过程
2.了解非结构化数据的存储
3.学习scrapy搭建工程化爬虫爬取道客巴巴
4.学习数据库知识,应对大规模數据存储与提取
5.掌握各种技巧应对特殊网站的反爬措施
6.分布式爬虫爬取道客巴巴,实现大规模并发采集提升效率
基本上我也会按照上述六个阶段进行学习和总结。