Scrapy基礎 第二節:Scrapy版的Hello World

第二節:Scrapy版的Hello World

前置知識:

  • 掌握Python的基礎知識
  • 對爬蟲基礎有一定了解

說明: 運行環境

Win10,Python3 64位

目錄:

本節演示如何建立一個scrapy項目和觀察數據的流轉過程。

這裏以訪問我的博客爲例

https://blog.csdn.net/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.csdn.net']
    start_urls = ['https://blog.csdn.net/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.csdn.net']
    start_urls = ['https://blog.csdn.net/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

輸出結果:
在這裏插入圖片描述

這樣整個項目中的數據流轉過程就清楚了,下節繼續總結組件知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章