• Scrapy框架解析,使用


    Scrapy

    Install

    command: `pip install [name]`
    

    lib:
    lxml 解析库
    pyOpenSSL SSL协议库
    Twisted 异步Web框架
    main:
    Scrapy 框架

    Use

    command:
    创建项目
    scrapy startproject [name]
    编辑项目后, 启动爬虫脚本
    scrapy crawl [scriptname]

    结构分析:

    在scrapy框架中.
    执行新项目指令之后.例如: scrapy crawl newgrasp
    会生成如下目录

    └── newgrasp
        ├── newgrasp
        │   ├── __init__.py
        │   ├── items.py
        │   ├── middlewares.py
        │   ├── pipelines.py
        │   ├── __pycache__
        │   ├── settings.py
        │   └── spiders
        │       ├── __init__.py
        │       └── __pycache__
        └── scrapy.cfg
    

    生成了一个项目名的根目录 newgrasp

    一级目录下:

    newgrasp

    用来放置项目中各种重要组成部分, 以及爬虫文件.

    scrapy.cfg

    项目的设置文件, 主要确定项目名项目设置文件
    内容也很简单.

    [settings]
    default = newgrasp.settings
    
    [deploy]
    project = newgrasp
    

    二级目录下(重点)

    二级目录的newgrasp中. 包含了scrapy最重要的处理流程.
    items.py

    用来放置抓取的内容, 一般是资源对应的url例如:xxx.xxx.xxx.jpg; 获得url之后,放入对应的ItemModel.后面框架会自动交给pipeline处理.
    middlewares.py
    在获取response响应的时候, 请求和返回的时候都要经过中间件.
    pipelines.py
    pipeline是用来处理item的, 能够将item保存的url直接交给scrapy的DOWNLOADER组件,自动去下载对应资源.需要注意的是,其实response也是由该组件进行请求下载.同资源一样也有相对应的队列和pipeline, 唯一不同的是, 没有经过item.
    settings.py
    对scrapy进行一些设置调配.例如下载并行数, 下载目录设置等.
    spiders
    完成爬虫的逻辑,在scrapy中, 我们在其他模块中完成了请求, 和保存的动作. 在spider中, 唯一需要做的逻辑就是在Spider中设置开始抓取的页面,然后parse方法, 找到相对应的页面元素,放入对应的item中的field中. 在获取元素方面, 直接使用xpath找到元素, 放入item中即可. 如果当需要爬取的网页为多级页面, 则需要针对不同的页面创建对应parse_x方法. 在使用parse分析一级页面, 然后使用Scrapy.Request(需另导入),callback参数中调用子分析方法, 分析子页面. 仍有其他子页面或者分类的话, 就进行判断然后callback对应的parse函数.
    需要导入

    from scrapy import Request # 用来形成yield生成器, 接入pipeline, 并且调用对应的parse,形成多级抓取
    from grasp.items import ImageItem # 导入对应的Item, 才能把需要获取的资源元素url放入在pipeline设置好的对应字段中. 
    

    调试

    在使用scrapy的时候, 有的时候感觉命令行调用并不是很方便. 这个时候可以导入scrapy中内置的包, 直接再控制台运行该爬虫脚本

    from scrapy.crawler import CrawlerProcess
    from scrapy.utils.project import get_project_settings
    ......
    ......
    if __name__ == '__main__':
        process = CrawlerProcess(get_project_settings())
        process.crawl(对应的Scriper类)
        process.start()
    
  • 相关阅读:
    IntentService使用以及源码分析
    Android HandlerThread源码解析
    Android Handler消息机制源码解析
    Gradle技术之四
    Android EditText实现小数点后几位的终级方案
    Gradle系列之三 Gradle概述以及生命周期
    Gradle系列之二 Groovy对文件的操作
    Gradle系列之一 Groovy语法精讲
    Context源码分析
    用EXCLE群发outlook邮件
  • 原文地址:https://www.cnblogs.com/jrri/p/12945340.html
Copyright © 2020-2023  润新知