zoukankan      html  css  js  c++  java
  • Python爬虫之Scrapy框架结构

    Scrapy项目结构

    scrapy.cfg
    myproject/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            spider1.py
            spider2.py
            ...

    文件介绍:
    • scrapy.cfg:项目的配置文件
    • myproject/:项目的Python模块,将会从这里引用代码
    • myproject/items.py:项目的目标文件
    • myproject/pipelines.py:项目的管道文件
    • myproject/settings:项目的设置文件
    • myproject/spiders/:存储爬虫代码目录

    项目步骤

    一、明确目标

    1. 打开items.py文件
    2. items中定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,提供了一些额外的保护减少错误
    3. 可以通过创建一个scrapy.Item类,并且定义类型为scrapy.Field的类属性来定义一个Item
    4. 接下来,创建一个自定义Item子类,和构建item模型

    例如:

    import scrapy
    
    class BeautyItem(scrapy.Item):
        name = scrapy.Field()
        age = scrapy.Field()
        img = scrapy.Field()

    二、制作爬虫

    • 在当前目录下输入命令
    scrapy genspider spider_name "allowed_domains"

      将在myproject/spiders/目录下创建一个名为'spider_name'的爬虫文件,并制定爬虫域的范围(allowed_domains,用于限定爬取的数据来源不超过这个域名范围)

    • 打开该目录下的spider_name.py文件,默认增加了下列代码:
    import scrapy
    
    class Spider_name(scrapy.Spider):
    
        name = "spider_name"
        allowed_domains = ["allowed_domains"]
        start_urls = ['http://www.allowed_domains']
    
        def parse(self, response):
            pass

      其实也可以由我们自行创建爬虫文件并编写上面的代码,只不过使用命令可以免去编写固定代码的麻烦

      要创建一个Spider,你必须用scrapy.Spider类创建一个子类,并确定了两个强制的属性和一个方法

    • name = "" :爬虫的识别名称,必须是唯一的,不同的爬虫必须定义不同的名称
    • allowed_domains = [] :是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略(非必要属性)
    • start_urls = [] :爬取的url列表。爬虫从这里开始爬取数据,所以第一此下载的数据将会从这些urls开始,其他子URL将会从起始URL继承性生成
    • parse(self, response) :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下:
    1. 负责解析返回的网页数据(response.body),提取结构化数据(生成item)
    2. 生成需要下一页的URL请求

    保存数据

    scrapy保存信息的最简单的方法主要有四种,-o输出指定格式的文件,命令如下:

    # json格式
    scrapy crawl spider_name -o file_name.json
    
    # json line格式
    scrapy crawl spider_name -o file_name.jsonl
    
    # csv逗号表达式,可用excel打开
    scrapy crawl spider_name -o file_name.csv
    
    # xml格式
    scrapy crawl spider_name -o file_name.xml

    Item Pipelines

    当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item。

    每个Item Pipeline都是实现了简单方法的Python类,比如决定此Item是丢弃还是存储。以下是Item Pipeline的一些典型应用:

    • 验证爬取的数据(检查item包含某些字段,比方说name字段)
    • 查重(并丢弃)
    • 将爬取结果保存到文件或数据库中

      

    编写Item pipeline很简单,item pipeline组件是一个独立的Python类,其中process_item()方法必须实现

    import something
    
    class somethingPipeline(Object):
        
        def __init__(self):
            # 可选实现,做参数初始化(如打开保存目录文件)等
            # do something
    
        def process_item(self, item, spider):
            # item(Item对象) - 被爬取的item
            # spider(Spider对象) - 爬取该item的spider
            # 这个方法必须实现,每个item pipeline组件都需要调用该方法
            # 必须返回一个Item对象,被丢弃的item将不会被之后的pipeline组件锁处理
            return item
    
        def open_spider(self, spider):
            # spider(Spider对象) - 被开启的spider
            # 可选实现,当spider被开启时被调用
    
        def close_spider(self, spider):
            # spider(spider对象) - 被关闭的spider
            # 可选实现,当spider被关闭时被调用

  • 相关阅读:
    使用SO_REVTIMEO套接字选项为recvfrom设置超时
    使用select为描述符设置超时
    套接字超时设置方法
    使用SIGALARM为recvfrom设置超时
    使用SIGALARM为connect设置超时
    20200410 阿里巴巴Java开发手册
    20200409 Vue 视频学习【归档】
    20200319 Spring MVC 官方文档【归档】
    20200319 Spring Web MVC 2-5
    20200319 Spring Web MVC 1
  • 原文地址:https://www.cnblogs.com/keqipu/p/7309266.html
Copyright © 2011-2022 走看看