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的更多相关文章

  1. Python 开发轻量级爬虫08

    Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...

  2. Python 开发轻量级爬虫07

    Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...

  3. Python 开发轻量级爬虫06

    Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...

  4. Python 开发轻量级爬虫05

    Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...

  5. Python 开发轻量级爬虫03

    Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...

  6. Python 开发轻量级爬虫02

    Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url, ...

  7. Python 开发轻量级爬虫01

    Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...

  8. Python开发轻量级爬虫

    这两天自学了python写爬虫,总结一下: 开发目的:抓取百度百科python词条页面的1000个网页 设计思路: 1,了解简单的爬虫架构: 2,动态的执行流程: 3,各部分的实现: URL管理器:p ...

  9. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

随机推荐

  1. winsow xp不能安装软件, 提示"中断" 是因为设置了 软件限制策略

    原来是我为了优化和安全, 设置了软件限制策略. 我设置的是: secpol.msc中, 设置 "软件限制策略" -> "其他规则"中 , 指定了 c:/d ...

  2. Nginx中的rewrite指令

    转自:http://www.76ku.cn/articles/archives/317 rewite.在server块下,会优先执行rewrite部分,然后才会去匹配location块server中的 ...

  3. 【AngularJS】—— 10 指令的复用

    前面练习了如何自定义指令,这里练习一下指令在不同的控制器中如何复用. —— 来自<慕课网 指令3> 首先看一下一个小例子,通过自定义指令,捕获鼠标事件,并触发控制器中的方法. 单个控制器的 ...

  4. java中堆和栈的区别

    从宏观上来讲,栈内存:存储基本数据类型.堆内存:存储实际的对象内容.说明白点就是new出来的东西. int a = 3; int b = 3; a = 4; 编译器首先会处理int a = 3;将a进 ...

  5. php综合应用

    php面试题之五--PHP综合应用(高级部分) 五.PHP综合应用 1.写出下列服务的用途和默认端口(新浪网技术部) ftp.ssh.http.telnet.https ftp:File Transf ...

  6. Java VisualVM使用:堆OOM

    背景 近期遇到了一个java.lang.OutOfMemoryError: Java heap space的问题,排除了堆设置过小的问题,代码走查没有头绪,所以使用VisualVM工具分析堆内存情况. ...

  7. web.xml 模板和Servlet版本

    最近没事干,写自己小项目(项目周期无限长.开发效率无限低)的时候,遇到web.xml的dtd声明不正确,这里罗列下从Eclipse里新建项目时,自动生成的web.xml,供以后遇到类似问题的时候进行参 ...

  8. HTML 5 <input> placeholder 属性

    原文链接:http://www.w3school.com.cn/html5/att_input_placeholder.asp HTML 5 <input> placeholder 属性 ...

  9. HTTP头部详解

    因为之后的HTTP头注入要学习这些所以就看了.觉得很不错,算是学习前的科普. <HTTP头部详解>转载自:http://www.cnblogs.com/lcamry/p/5763040.h ...

  10. Raspberry Pi 配置笔记二

    配置源 http://blog.chinaunix.net/uid-21658993-id-4702322.html deb http://ipv4.mirrors.ustc.edu.cn/raspb ...