个人的第二篇博客,继续视频学习,感兴趣的小伙伴可以查看这个视频链接https://www.imooc.com/video/10680/0,所有的图片均为视频截图,如果涉及版权问题,请联系删除。
二、简单爬虫架构-动态运行流程
运用时序图解释,时序图中包括调度器、URL管理器、下载器、解析器、应用
首先,调度器询问URL管理器是否有待爬取的URL,URL管理器返回是或者否,如果有待爬取的URL,调度器向URL管理器提出请求爬取一个URL,URL管理器将一个URL返回给调度器,调度器将这个URL传送给下载器,下载器下载网页内容并返回给调度器,调度器将URL内容传送给解析器进行解析,解析器解析完成之后,将价值数据和新的URL列表一起返回给调度器,调度器将价值数据传送给应用,并将新的URL传送给URL管理器,如果URL管理器中还有URL,则循环继续,直到URL管理器中没有待爬取的URL,循环结束。
![](https://i-blog.csdnimg.cn/blog_migrate/fb33f5fe4a68219d5b77908912f53f64.jpeg)
三、URL管理器:管理待抓取URL集合和已抓取的URL集合
目的在于:防止重复和循环抓取。URL之间往往循环指向的,如果不对URL进行管理,爬虫就会不断的抓取这些URL,最糟糕的情况两个URL互相指向,则我们将不停的抓取这两个URL管理器,形成死循环。
功能:URL管理器要求至少具备5个功能,即添加新的URL到待爬取集合中,判断待添加的URL是否已经存在容器中,获取待爬取URL、判断是否有带爬取URL以及将URL从待爬取移动到已爬取。
URL的实现方式
三种实现方式:第一种,存储在内存中(个人或小型公司);第二种,存储在关系数据中(永久保存),第三种,缓存数据库中(大型互联网公司)
1. python内存,待爬取URL集合:set() 已爬取URL集合:set()
2.MySQL urls(url, is_crawled),crawled用来标记待爬取还是已爬取
3.redis 待爬取URL集合:set 已爬取URL集合:set