Scrapy基础 第二节:Scrapy版的Hello World

本文详细介绍使用Scrapy框架搭建爬虫项目的全过程,包括环境配置、项目创建、爬虫类编写及数据流转流程。通过访问博客网站实例,展示Scrapy各组件的功能与协作方式。

第二节:Scrapy版的Hello World

前置知识:

  • 掌握Python的基础知识
  • 对爬虫基础有一定了解

说明: 运行环境

Win10,Python3 64位

目录:

本节演示如何建立一个scrapy项目和观察数据的流转过程。

这里以访问我的博客为例

https://blog.youkuaiyun.com/mist99

1 创建项目

scrapy stratproject HelloScrapy

在这里插入图片描述

工程创建完成了,我们可以列出目录树

tree HelloScrapy /f
在这里插入图片描述

items负责数据模型的建立,类似于实体类。
middlewares.py自己定义的中间件。
pipelines.py负责对spider返回数据的处理。
settings.py负责对整个爬虫的配置。
spiders 目录 负责存放继承自scrapy的爬虫类。
scrapy.cfg scrapy基础配置

2 编写爬虫类

进入目录,创建一个爬虫spider,取名为MyblogSpider

cd HelloScrapy

命令格式

scrapy genspider [options]

在这里插入图片描述

这是和我们就能看到spiders目录下多了一个 MyblogSpider.py 文件,这就是我们编写代码的地方

打开 MyblogSpider.py 可以看到代码模版
我们输入的 name就作为了爬虫名字,domain作为开始url,这里start_urls里如果有重复的http头就修改一下
然后我们在parse函数里再加上一句打印日志,这样一个scrapy版的Hello world就好了

# -*- coding: utf-8 -*-
import scrapy

class MyblogspiderSpider(scrapy.Spider):
    name = 'MyblogSpider'
    allowed_domains = ['blog.youkuaiyun.com']
    start_urls = ['https://blog.youkuaiyun.com/mist99/']

    def parse(self, response):
          print("*************** Hello Scrapy ********************")

然后我们可以在控制台直接运行这个爬虫:

scrapy crawl MyblogSpider

然后就能看到抓取网页成功的200标识,然后是parser里面我们刚才打印的日志,具体解析页面就以后再说。
在这里插入图片描述

这样我们的Hello World就执行成功了,虽然看起来有点莫名,这当然是因为scrapy中各个组件基类已经实现了。

3 Scrapy组件运行过程

从项目目录我们可以看到,工程中有item、spider、middleware、pipline、settings等一系列文件,那么在我们hello world项目运行中,它们是否都参与了项目过程呢,下面我们再增加一些日志来看
1)在item里面打开注释定义

class HelloscrapyItem(scrapy.Item):
    # define the fields for your item here like:
    print("【步骤】Item 定义结构")
    name = scrapy.Field()

2)在MyblogSpider中重载一下页面请求的函数,再添加一些注释

# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request
from HelloScrapy.items import HelloscrapyItem

class MyblogspiderSpider(scrapy.Spider):
    name = 'MyblogSpider'
    allowed_domains = ['blog.youkuaiyun.com']
    start_urls = ['https://blog.youkuaiyun.com/mist99/']

    # 页面请求
    def start_requests(self):
        print("【步骤】SinaSpider::start_requests页面请求 ")
        yield Request(self.start_urls[0])

    def parse(self, response):
        print("*************** Hello Scrapy ********************")
        print("【步骤】SinaSpider::parse分析页面 ")

        item = HelloscrapyItem()
        item["name"] = "阿丹的彩蛋"

        yield item

3)在 middlewares.py 中添加日志

    def process_response(self, request, response, spider):
        # Called with the response returned from the downloader.
        print("【步骤】HelloscrapyDownloaderMiddleware中间件")
        # Must either;
        # - return a Response object
        # - return a Request object
        # - or raise IgnoreRequest
        return response

4)在 pipelines 中添加日志

from HelloScrapy.items import HelloscrapyItem

class HelloscrapyPipeline(object):
    def process_item(self, item, spider):
        if isinstance(item, HelloscrapyItem):  # 先判断item
            print("【步骤】pipelines处理数据")
            return item

5)最后打开settings配置文件中的注释

DOWNLOADER_MIDDLEWARES = {
    'HelloScrapy.middlewares.HelloscrapyDownloaderMiddleware': 543,
}

ITEM_PIPELINES = {
    'HelloScrapy.pipelines.HelloscrapyPipeline': 300,
}

6)现在我们再运行一次爬虫

scrapy crawl MyblogSpider

输出结果:
在这里插入图片描述

这样整个项目中的数据流转过程就清楚了,下节继续总结组件知识。

任务描述 本关任务:借助Scrapy框架编写一个最基本的爬虫小程序,掌握Scrapy基础理论和使用。 相关知识 Scrapy安装与新建项目 Windows下安装 由于 Python 官方已经宣布在 2020 年停止对 Python2 的支持,因此本教程的相关 Python 操作均是在 Python3 下进行的,请确保所使用的电脑上已安装 Python3。 在 Windows 环境下,如果安装好了 Python3 ,可以借助 pip 进行 Scrapy 进行安装: pip install scrapy 由于 Scrapy 依赖 Wheel、Twisted、Pillow 等第三方包,所以安装过程中很可能会由于依赖缺失而导致安装失败,这时可以根据提示依次进行各依赖的安装并最终完成 Scrapy 的安装。 Linux/Unix下安装 同样的请先确保安装了 Python3,之后需要在命令行下执行: pip3 install scrapy 如果出现类似于ModuleNotFoundError: No module named 'twisted.persisted' 等由于依赖缺失导致的报错,请先使用pip install命令完成相应依赖的安装,之后即可完成 Scrapy 的安装。 Mac OS下安装 由于 Mac OS 自带了 Python2 本,因此我们建议先升级到 Python3: brew install python 此时系统中同时具备了 Python2 和 Python3 ,需要不同的命令去开启不同本的 Python: #开启Python2 $: python #开启Python3 $: python3 由于 Python 进行了升级因此 pip 命令也失效了,此时我们可以使用pip3命令进行 Scrapy 的安装: pip3 install scrapy 安装过程中,依然可能会出现由于依赖缺失而导致报错,此时在安装完缺失的依赖后,再进行 Scrapy 的安装。 Anaconda安装Scrapy Anaconda 是一个开源的 Python 发行本,其包含了 conda、Python 等 180 多个科学包及其依赖项。在使用 Anaconda 安装 Scrapy 前,请先检查是否已经安装了 Scrapy: conda list 如果没有安装,则可使用 conda 命令进行安装: conda install scrapy 之后 conda 会帮助我们自动完成相关依赖的下载,并最终完成 scrapy 的安装。 在安装成功后,仍需再执行以下命令,来最后安装 Scrapy 依赖的安装: conda install service_identity 在对应的平台中依据各自对应的方法完成 Scrapy 的安装后,可以通过执行 Scrapy 命令来校验 Scrapy 是否已被正确安装,如下所示: # Mac OS下执行Scrapy命令以校验Scrapy是否已安装 root:~ /$ scrapy Scrapy 1.5.1 - no active project Usage: scrapy <command> [options] [args] Available commands: bench Run quick benchmark test fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project) settings Get settings values shell Inte\fractive scraping console startproject Create new project version Print Scrapy version view Open URL in browser, as seen by Scrapy [ more ] More commands available when run from project directory 如果在执行 Scrapy 命令后,输出了类似于以上所示的信息,则说明 Scrapy 已被正确安装。 Scrapy新建项目 Scrapy 提供了脚手架功能,即我们可以借助 Scrapy 的脚手架功能方便快捷地生成 Scrapy 爬虫程序的整个工程目录及涉及到的各个文件。 Scrapy 的脚手架命令用法如下所示: scrapy startproject [爬虫名字] 在指定目录下执行上述命令后,scrapy 会帮我们生成爬虫程序的目录及文件,如下所示为命令使用及输出信息示例: #Mac OS下利用Scrapy创建项目 root:~test$ scrapy startproject litteScrapyCrawler New Scrapy project 'litteScrapyCrawler', using template directory '/usr/local/lib/python3.7/site-packages/scrapy/templates/project', created in: /Users/test/litteScrapyCrawler You can start your first spider with: cd litteScrapyCrawler scrapy genspider example example.com cd litteScrapyCrawler scrapy genspider 爬虫名 作用的域名 例:scrapy genspider Hello www.educoder.net 从以上的输出信息中可以看出,我们在 /Users/test 目录下执行了脚手架命令,创建了名字为littleScrapyCrawler的爬虫程序,之后 Scrapy 帮助我们生成了 littleScrapyCrawler 目录,观察 littleScrapyCrawler 的目录我们发现如下所示的目录结构,从途中可以看到,生成目录中具有多个文件。 编程要求 为了帮助学习者掌握 Scrapy 基础,在命令行完成以下任务: 使用 Scrapy 框架,在当前目录/root下,创建一个名为 HelloWorld爬虫程序框架,框架中爬虫名为 world ,作用域名为 www.baidu.com。 测试说明 平台会检测生成的代码框架的命名、结构及内容是否正确。
最新发布
10-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值