基础知识
爬虫发展史
 
爬虫去重
1. 存储到数据库中

    存取速度慢

2. 存储到内存中的集合里,内存占用十分大

    当爬取数据有1亿条时

        1*10**8*2Byte*50str_len/1024/1024/1024 = 9

    结果显示仅仅爬取1亿条url数据就占用了9个G的内存,显然是不合适的

3. 将url经过md5等哈希方法存储在集合中

    一般一个md5占用128位,16Byte,结果大约为1.5G与上种方法相比,大大减少了内存占用

4. 使用bitmap位图法

    将url经过哈希后的md5值通过hash函数映射到某一位上

    一个url占据一位,同样的一个亿的数据,内存大约占据12M的内存大小。相比与hash方法又占用的内存又小了几个数量级

    这种方法带来的冲突会导致,再寻址

    虽然极大降低了内存占用,但是牺牲了运行时间

5. bloomfilter方法

    对bitmap优化后的方法,减少了hash冲突的可能性
Scrapy入门
介绍
  Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
 
github项目
  https://github.com/scrapy/scrapy
 
scrapy架构
 
新建scrapy工程
# 在虚拟环境中,workon <yourvenvname>

scrapy startproject TestSpider

This will create a tutorial directory with the following contents:
TestSpider/
scrapy.cfg # deploy configuration file TestSpider/ # project's Python module, you'll import your code from here
__init__.py items.py # project items definition file middlewares.py # project middlewares file pipelines.py # project pipelines file settings.py # project settings file spiders/ # a directory where you'll later put your spiders
__init__.py
cd TestSpider scrapy genspider example example.com
简单运行一下工程
# 创建一个main.py文件

    from scrapy.cmdline import execute

    import sys
import os sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy", "crawl", "jobbole"]) # 在虚拟环境中执行 scrapy crawl jobbole # 或者直接运行我们的main.py文件 *** # 提示缺少模块 pip install pypiwin32 # 配置settings,不遵循OBEY协议 ROBOTSTXT_OBEY = False # 快速调试工程,一次请求,多次测试 scrapy shell <url_path>
 
 
Scrapy内置settings
  • BOT_NAME
    默认: 'scrapybot'
    Scrapy项目实现的bot的名字。用来构造默认 User-Agent,同时也用来log。
    当你使用 startproject 命令创建项目时其也被自动赋值。
  • CONCURRENT_ITEMS
    默认: 100
    Item Processor(即 Item Pipeline) 同时处理(每个response的)item的最大值
  • CONCURRENT_REQUESTS
    默认: 16
    Scrapy downloader 并发请求(concurrent requests)的最大值。
  • CONCURRENT_REQUESTS_PER_DOMAIN
    默认: 8
    对单个网站进行并发请求的最大值。
  • CONCURRENT_REQUESTS_PER_IP
    默认: 0
    对单个IP进行并发请求的最大值。如果非0,则忽略 CONCURRENT_REQUESTS_PER_DOMAIN 设定, 使用该设定。 也就是说,并发限制将针对IP,而不是网站。
    该设定也影响 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下载延迟应用在IP而不是网站上。
  • DEFAULT_ITEM_CLASS
    默认: 'scrapy.item.Item'
    the Scrapy shell 中实例化item使用的默认类。
  • DEFAULT_REQUEST_HEADERS
    默认:

    {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
    }

    Scrapy HTTP Request使用的默认header。由 DefaultHeadersMiddleware 产生。

  • DOWNLOADER
    默认: 'scrapy.core.downloader.Downloader'
    用于crawl的downloader.
  • DOWNLOADER_MIDDLEWARES
    默认:: {}
    保存项目中启用的下载中间件及其顺序的字典。
  • DOWNLOAD_DELAY
    默认: 0
    下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度, 减轻服务器压力。同时也支持小数:
  • DOWNLOAD_HANDLERS
    默认: {}
    保存项目中启用的下载处理器(request downloader handler)的字典。
  • DOWNLOAD_TIMEOUT
    默认: 180
    下载器超时时间(单位: 秒)。
  • EXTENSIONS
    默认:{}
    保存项目中启用的插件及其顺序的字典。
  • ITEM_PIPELINES
    默认: {}
    保存项目中启用的pipeline及其顺序的字典。该字典默认为空,值(value)任意。 不过值(value)习惯设定在0-1000范围内。
  • ITEM_PIPELINES_BASE
    默认: {}
    保存项目中默认启用的pipeline的字典。 永远不要在项目中修改该设定,而是修改 ITEM_PIPELINES 。
  • LOG_ENABLED
    默认: True
    是否启用logging。
  • LOG_ENCODING
    默认: 'utf-8'
    logging使用的编码。
  • LOG_FILE
    默认: None
    logging输出的文件名。如果为None,则使用标准错误输出(standard error)。
  • LOG_FORMAT
    默认: '%(asctime)s [%(name)s] %(levelname)s: %(message)s'
    日志的数据格式
  • LOG_DATEFORMAT
    默认: '%Y-%m-%d %H:%M:%S'
    日志的日期格式
  • LOG_LEVEL
    默认: 'DEBUG'
    log的最低级别。可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。
  • LOG_STDOUT
    默认: False
    如果为 True ,进程所有的标准输出(及错误)将会被重定向到log中。
  • RANDOMIZE_DOWNLOAD_DELAY
    默认: True
    如果启用,当从相同的网站获取数据时,Scrapy将会等待一个随机的值 (0.5到1.5之间的一个随机值 * DOWNLOAD_DELAY)。
    该随机值降低了crawler被检测到(接着被block)的机会。某些网站会分析请求, 查找请求之间时间的相似性。
  • REDIRECT_MAX_TIMES
    默认: 20
    定义request允许重定向的最大次数。超过该限制后该request直接返回获取到的结果。 对某些任务我们使用Firefox默认值。
  • ROBOTSTXT_OBEY
    默认: False
    是否遵循robots协议
  • SCHEDULER
    默认: 'scrapy.core.scheduler.Scheduler'
    用于爬取的调度器。
  • SPIDER_MIDDLEWARES
    默认: {}
    保存项目中启用的下载中间件及其顺序的字典。
  • USER_AGENT
    默认: "Scrapy/VERSION (+http://scrapy.org)"
    爬取的默认User-Agent,除非被覆盖。

Scrapy学习-1-入门的更多相关文章

  1. Python爬虫Scrapy(二)_入门案例

    本章将从案例开始介绍python scrapy框架,更多内容请参考:python学习指南 入门案例 学习目标 创建一个Scrapy项目 定义提取的结构化数据(Item) 编写爬取网站的Spider并提 ...

  2. python爬虫之Scrapy学习

    在爬虫的路上,学习scrapy是一个必不可少的环节.也许有好多朋友此时此刻也正在接触并学习scrapy,那么很好,我们一起学习.开始接触scrapy的朋友可能会有些疑惑,毕竟是一个框架,上来不知从何学 ...

  3. Scrapy爬虫快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  4. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  5. [IT学习]sql 入门及实例

    sql 是一种数据库查询语言,可以让你很快的查询到数据.其实一般情况下,你也可以采用excel来查询数据库数据. 但是人们通常认为sql会更加灵活和方便一些. sql学习的入门网站: http://w ...

  6. PHP学习笔记 - 入门篇(5)

    PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...

  7. PHP学习笔记 - 入门篇(4)

    PHP学习笔记 - 入门篇(4) 什么是运算符 PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要 ...

  8. PHP学习笔记 - 入门篇(3)

    PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...

  9. PHP学习笔记--入门篇

    PHP学习笔记--入门篇 一.Echo语句 1.格式 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来) 如下代码 <?php echo "Hello world! ...

  10. Scrapy 爬虫框架入门案例详解

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:崔庆才 Scrapy入门 本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对 ...

随机推荐

  1. python基础一 day10(1)

    要背的:

  2. 数组初始化 和 vector初始化

    ] = {}; 整个数组都初始化为0 vector<); 整个vector初始化为1 如果你定义的vector是这样定义的: vector<int> B; 去初始化,千万不要用: ; ...

  3. Android Studio 中安装 apk 被拆分成多个 slice,如何禁止?

    Android Studio 3.0.1 中,Run 'app' 时,生成的 apk 被分割成多个 slice: $ adb install-multiple -r D:\...\app\build\ ...

  4. PAT (Basic Level) Practise (中文)-1030. 完美数列(25)

    PAT (Basic Level) Practise (中文)-1030. 完美数列(25)   http://www.patest.cn/contests/pat-b-practise/1030 给 ...

  5. javaEE(16)_Servlet监听器

    一.监听器原理 1.监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 2.监听器典型案例 ...

  6. 主DNS服务-正向解析

    环境 准备最少两台主机 一台当DNS服务器,一台当客户机 如:192.168.43.7这台主机当DNS服务器,192.168.43.6这台主机当客户机 安装DNS服务 yum install -y b ...

  7. python数据类型、字符编码、文件处理-练习

    练习-字符串 # 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分) name = " aleX" # ) 移除 name 变量对应的值两边的空格,并输出处理 ...

  8. A Fast and Easy to Use AES Library

    http://www.codeproject.com/Articles/57478/A-Fast-and-Easy-to-Use-AES-Library Introduction EfAesLib i ...

  9. cs231n课程索引

    课程资源 课程官网 课程视频-youtube 课程视频-字幕版 官方笔记 官方笔记-中文版 课程作业参考答案

  10. 【ORACLE】调整序列的当前种子值

    [ORACLE]调整序列的当前种子值 --必须用SYS用户执行脚本:或具有SYSDBA角色登录: CREATE OR replace ); v_step ):;--步进 tsql ); BEGIN E ...