• Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)


    1.Scrapy注意点

    Scrapy是爬虫框架。

    它分为一下部分,其中引擎是核心

    1. Scrapy Engine(引擎):负责spider、ltemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
    2. Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。默认使用16个线程爬取数据
    3. Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给spider来处理。
    4. Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取ltem字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
    5. ltem Pipeline(管道):它负责处理Spider中获取到的ltem,并进行后期处理(详细分析、过滤、存储等)的地方。(将爬虫爬取到的数据进行存储)
    6. Downloader Middlewares(下载中间件):一个可以自定义扩展下载功能的组件。
    7. Spider Middlewares (Spider中间件):一个可以自定扩展和操作引擎和spider中间通信的功能组件。

    通过pip install scrapy在终端上下载这个爬虫框架。

    注意:框架不能像包一样直接导入,需要生成框架结构,在这个结构上操作

    启动框架:

    首先在终端上进入到要生成项目的路径.

    然后输入scrapy startproject 项目名启动框架
    在这里插入图片描述
    此时项目路径下会有一个框架生成的文件夹

    在这里插入图片描述

    之后生成爬虫文件命令如图:
    在这里插入图片描述

    先进入爬虫spiders文件夹中,输入scrapy genspider 爬虫文件名称 爬取网页的链接命令生成爬虫文件。这里以豆瓣读书为例

    在这里插入图片描述

    最后使用scrapy crawl +爬虫名(book)来启动爬虫,因为在终端不方便数据查询,所以一般会使用其他方式启动。

    这里创建新文件运行这个命令
    在这里插入图片描述
    运行结果scrapy日志信息是红色输出,网页源码以白色输出。

    2. Scrapy爬取豆瓣读书和评分

    scrapy爬取基本流程如下:

    1. 设置爬虫基础参数 settings.py
    2. 爬虫
    3. 数据封装
    4. 管道

    设置爬虫基础参数
    在这里插入图片描述
    这里不遵守这个协议,否则爬取不到什么信息了。改成False

    在这里插入图片描述
    默认爬取的线程数,可以取消注释,并修改数目,默认16个线程。

    在这里插入图片描述
    爬取网页后暂停的时间数目,默认不暂停。

    在这里插入图片描述
    请求头,这里需要至少要修改成浏览器信息

    在这里插入图片描述
    设定保存优先级,数字越大,优先级越小。用于多种保存方式下,哪一种保存方式优先。

    代码部分

    数据定义items.py

    # Define here the models for your scraped items
    #
    # See documentation in:
    # https://docs.scrapy.org/en/latest/topics/items.html
    
    import scrapy
    
    
    # 封装数据
    class TestscrapyItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        title = scrapy.Field()
        rating_nums = scrapy.Field()
    
    

    爬虫部分spiders/book.py

    import scrapy
    import re
    from ..items import TestscrapyItem
    
    
    class BookSpider(scrapy.Spider):
        name = 'book'  # 通过这个名字启动爬虫
        allowed_domains = ['book.douban.com']
        start_urls = ['https://book.douban.com/top250?start=0']
    
        def parse(self, response):
            # response是爬虫返回的网页数据
            # print(response.text)
    
            # 封装对象
            items = TestscrapyItem()
    
            title = re.findall(', response.text)
            rating_nums = re.findall('(.*?)', response.text)
    
            # print(rating_nums)
            # 封装数据给pipelines
            for title, rating_nums in zip(title, rating_nums):
                items['title'] = title
                items['rating_nums'] = rating_nums
                yield items #给pipelines
    
    

    数据存储部分pipelines.py

    # Define your item pipelines here
    #
    # Don't forget to add your pipeline to the ITEM_PIPELINES setting
    # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
    
    
    # useful for handling different item types with a single interface
    from itemadapter import ItemAdapter
    
    
    # 保存数据
    class TestscrapyPipeline:
        def __init__(self):
            self.file = open('data.txt', 'w', encoding='utf-8')
    
        def process_item(self, item, spider):
            self.file.write(f"{item['title']}  评分:{item['rating_nums']}\n==========\n")
            return item  # 通知爬虫,这个数据已经保存成功了
    
        # 析构函数
        def __del__(self):
            self.file.close()
            print('文件保存成功')
    
    

    启动爬虫执行cmd命令 start.py

    import os
    
    os.system('scrapy crawl book')
    

    运行结果

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【深度学习】数据准备-pytorch自定义图像分割类数据集加载
    Java源码分析 | CharSequence
    【LeetCode每日一题】——448.找到所有数组中消失的数字
    从Cookie到设备ID,从算法到云+端!全面盘点设备指纹技术的五代发展
    HarmonyOS网络管理开发—HTTP与WebSocket
    LabVIEW大量数据的内存管理
    两APP通信之AIDL使用。
    C++ const关键字
    变量使用、
    [附源码]java毕业设计学生实习管理系统
  • 原文地址:https://blog.csdn.net/dodamce/article/details/127101510