第二節:Scrapy版的Hello World
前置知識:
- 掌握Python的基礎知識
- 對爬蟲基礎有一定了解
說明: 運行環境
Win10,Python3 64位
目錄:
- 第一節:Scrapy介紹和安裝配置
- 第二節:Scrapy版的Hello World
- 第三節:Scapy框架結構和組件介紹
本節演示如何建立一個scrapy項目和觀察數據的流轉過程。
這裏以訪問我的博客爲例
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
輸出結果:
這樣整個項目中的數據流轉過程就清楚了,下節繼續總結組件知識。