• Scripy学习(一)


    一."5+2"结构

    SPIDERS(入口,需要用户编写):1.提供最初始的访问链接 2.解析Downloader返回的响应,返回想要的内容和额外的爬取请求

    Spider Midderware:

    ITEM PIPELINES:(出口,用户编写):清理,检验和查看,存储数据

    DOWNLOADER:(已有实现):下载网页

    SCHEDULER:(已有实现):对所有请求进行调度处理(相当于队列,有序提供url)

    ENGINE(已有实现):控制模块之间的数据流,根据条件触发时间

    Downloader Middleware:(用户可编写)实施ENGINE.Scheduler和Download之前进行用户可配置的控制

    流程:

    SPIDERS将url请求列表通过中间件传递给SCHEDURER

    SCHEDULER处理后通过ENGINE传递给DOWNLOAD

    DOWNLOAD下载相关网页后通过ENGINE把数据传递给SPIDERS

    SPIDERS解析数据,将想要的数据分为两部分:(ITEMS/REQUESTS)

    ITEM PIPELINES接收数据并进行数据清理

    二.缺点

    和request库相同,都没有提供处理js,提交表单,应对验证码等功能的实现

    三.常用命令

    startproject:创建一个新工程

    genspider:创建一个爬虫

    setting:获得爬虫的所有信息

    crawer:运行一个爬虫

    list:列出工程中所有爬虫

    shell:启动url调试命令行

    四.第一个实例

    步骤:

    1.建立爬虫工程

    scrapy startproject  scrapy_demo

    scapy.cfg:部署Scrapy爬虫的配置文件

    scrapy_demo:用户自定义python代码

    2.创建一个爬虫

    scrapy genspider demo scrapy_demo     会在Spider文件夹下创建一个demo.py文件,代码如下

    # -*- coding: utf-8 -*-
    import scrapy
    
    
    class DemoSpider(scrapy.Spider):
        name = 'demo'
        #只能在该域中爬去网页
        allowed_domains = ['scrapy_demo']
        start_urls = ['http://scrapy_demo/']
        #用于处理响应,解析内容形成字典,发现新的url爬虫请求
        def parse(self, response):
            pass

    3.配置产生的spider爬虫(修改demo文件)

    class DemoSpider(scrapy.Spider):
        name = 'demo'
        #只能在该域中爬去网页
        # allowed_domains = ['scrapy_demo']
        start_urls = ['https://python123.io/ws/demo.html']
        #用于处理响应,解析内容形成字典,发现新的url爬虫请求
        def parse(self, response):
            #将爬取的url名的后半部分作为文件名
            fname=response.url.split('/')[-1]
            with open(fname,'wb') as wf:
                wf.write(response.body)
            self.log('保存%s文件成功'%fname)
            pass

    4.运行爬虫,获取网页

    scrapy crawl demo

    可以看到在当前目录下生成了demo.html文件

  • 相关阅读:
    ElasticSearch 常用的查询过滤语句
    ElasticSearch的 Query DSL 和 Filter DSL
    photoshop CS 调整选择区域的大小
    pthread_once重塑singleton模式
    SGU536 Berland Chess
    怎样实现多线程
    [置顶] Linux下将Nutch1.3导入eclipse
    ENC28J60学习笔记——第1部分
    再看copy_on_write缩小临界区的例子
    leetcode Roman Integer
  • 原文地址:https://www.cnblogs.com/hhy-love-python/p/scrapy.html
Copyright © 2020-2023  润新知