zoukankan      html  css  js  c++  java
  • Scrapy学习-1-入门

    基础知识
    爬虫发展史
     
    爬虫去重
    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,除非被覆盖。

  • 相关阅读:
    CI框架学习——基本的用法(一)
    android测试之——Instrumentation(一)
    android测试之——mokeyrunner上(二)
    两台linux机器时间同步
    linux常用命令
    hdu2609(最小表示法)
    poj1509(环形字符串求最小字典序)
    最小最大表示法,求环形字符串的最小最大字典树(模板)
    区间dp总结篇
    dp之最长递增、公共子序列总结
  • 原文地址:https://www.cnblogs.com/cq146637/p/9053116.html
Copyright © 2011-2022 走看看