Python 开发轻量级爬虫04
Python 开发轻量级爬虫
(imooc总结04--url管理器)
介绍抓取URL管理器
url管理器用来管理待抓取url集合和已抓取url集合。
这里有一个问题,遇到一个url,我们就抓取它的内容,为什么还要对url进行管理呢? 是为了防止重复抓取、防止循环抓取。
我们都知道,每一个网页都有很多指向其它网页的url,其它网页的url也会指向本网页。这样不同url之间就存在一种循环指向的问题。
如果不对这些url进行管理,那么我们的爬虫就在循环不断抓取这两个url,形成一个死循环。重复抓取、循环抓取是我们要避免的情况。
所以我们使用url管理器对它们进行统一的管理。
url管理器需要支持这些功能:

首先需要支持 将一个新url添加到待爬取集合中,在添加的同时,需要判断待添加url是不是在容器中已经存在。如果是的话,就不能添加,以防止重复抓取。
同时,我们需要支持,可以从容器中获取一个待爬取url,获取的时候就要判断容器中还有没有待爬取的url。
最后,如果url被爬取之后,我们需要将这个url从爬取的集合移动到已爬取的集合。
url管理器有哪几种实现方式?

目前有三种实现方式,
1.我们可以直接将待爬取的url集合和已爬取的url集合存储在内存中。
比如:如果用python语言的话,可以将两个集合存储在两个set()数据结构中。为什么选用set?是因为python set可以直接去除集合中重复的元素。
2.我们可以将url存储在关系数据库中。
比如:MySQL数据库 我们可以建立一个表urls,它有两个字段url、is_crawled 。
is_crawled这个字段用来表示这个url是待爬取还是已爬取,也就是用一个表来存储了待爬取和已爬取两个数据集合。
3.我们可以将一个url存储到一个缓存数据库中。
比如说:redis redis本身就支持set这种数据结构,我们就可以将待爬取url集合和已爬取url集合存储到两个set中。
目前,大型互联网公司,由于缓存数据库的高性能,所以都将url存储到缓存数据库。
对于个人,选用内存作为存储,如果内存不够用或者想要永久存储,我们可以选用关系型数据库。
这三个就是url管理器的实现方式,在本实例中,我们会选用python set来实现一个小型的url管理器。
Python 开发轻量级爬虫04的更多相关文章
- Python 开发轻量级爬虫08
Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...
- Python 开发轻量级爬虫07
Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...
- Python 开发轻量级爬虫06
Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...
- Python 开发轻量级爬虫05
Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...
- Python 开发轻量级爬虫03
Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...
- Python 开发轻量级爬虫02
Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url, ...
- Python 开发轻量级爬虫01
Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...
- Python开发轻量级爬虫
这两天自学了python写爬虫,总结一下: 开发目的:抓取百度百科python词条页面的1000个网页 设计思路: 1,了解简单的爬虫架构: 2,动态的执行流程: 3,各部分的实现: URL管理器:p ...
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...
随机推荐
- move_upload_file 因为文件字符集编码iconv引起的问题
对 包含中文的文件 进行操作时提示 Invalid argument? 包括: 这里的move_uploaded_file和 fopen等操作都是如此. 而且用了字符编码转换后, iconv('utf ...
- \r,\n,\r\n的区别
http://www.studyofnet.com/news/285.html \n是换行,英文是New line,表示使光标到行首\r是回车,英文是Carriage return,表示使光标下移一格 ...
- 自定义select控件开发
目的:select下拉框条目太多(上百),当用户选择具体项时会浪费用户很多时间去寻找,因此需要一个搜索框让用户输入关键字来匹配列表,便于用户选择 示例图: 1.html结构 <div class ...
- 即将翻译 Building The New Financial Times Web App
<金融时报>这份Web APP 经验的总结,写得非常详细,也提到Web APP制作中常遇到的问题.为么他们就没有点透Bug - -! Building The New Financial ...
- HTTP状态301、404、200、304分别表示什么意思
301 (永久移动)请求的网页已永久移动到新位置.服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置.您应使用此代码告诉 Googlebot 某个网页或网站已永久移动 ...
- Latex 数学符号表
- ThinkPHP魔术方法
我们在使用thinkphp开发系统的时候,有时候会用到getById('1')这个方法快速的获取一条信息的内容,比用where(" id =1 ")->find();好用多了 ...
- 【转】(笔记)CANopen协议【CANFestival】移植方法
一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * ...
- servlet过滤器实现维护项目
最近公司需要系统维护,提出要建一个维护系统,要求: 1.访问公司域名跳到系统首页 2.点击首页的任意按钮给出维护提示信息 3.用户访问之前收藏的任意系统链接跳转到首页 下面介绍下用过滤器实现上述需求 ...
- mongodb python image 图像存储读取
最近做一些数据库调研的工作,目标是实现影像更快的入库.出库.查询,并实现并行访问等操作. 将结果总结成一个mongoImg类,也算是小结吧. ''' Created on 2013-8-6 class ...