scrapy 開發流程

1、Spider 開發流程

  實現一個 Spider 子的過程就像是完成一系列的填空題,Scrapy 框架提出如下問題讓用戶在Spider 子類中做答:框架

     一、爬蟲從哪一個或者那些頁面開始爬取?scrapy

   二、對於一個已下載的頁面,提取其中的那些數據?ide

   三、爬取完當前頁面後,接下來爬取哪一個或那些頁面?函數

 上面問題的答案包含了一個爬蟲最重要的邏輯,回答了這些問題,一個爬蟲也就開發出來了。url

實現一個Spider 只須要完成下面4個步驟:

  步驟 01: 繼承 scrapy.Spiderspa

import scrapy

class BooksSpider(scrapy.Spider):
        ...

 

  步驟 02:爲 Spider 取名;code

import scrapy 

class BooksSpider(scrapy.Spider):
        name = "book"
        ...

 

  步驟 03:設定起始爬取點;對象

class BooksSpider(scrapy.Spider):
        ...
        start_url = ['http://books.toscrape.com/']
        ...

start_url 同常被實現成一個列表,其中放入全部的其實爬去點的 url (例子中只有一個其實點)。看到這裏,你們可能會想,請求頁面下載不是必定要提交 Request 對象麼? 而咱們僅定義了 url 列表,是誰暗中構造並提交了 Request 對象呢? 經過閱讀 Spider 基類源碼能夠找到答案,相關代碼以下:blog

 

 

  步驟 04:實現頁面解析函數;繼承

    頁面解析函數也就是構造 Request 對象是經過 callback 參數指定的回調函數(或默認的 parse 方法)。頁面解析函數是實現 Spider 中最核心的部分,它須要完成如下兩項工做:

  一、使用選擇器提取頁面中的數據,將數據封裝後 (Item 或字典)提交給 Scrapy 引擎。

  二、使用選擇器或 LinkExtractor 提取頁面中的鏈接,用其構造新的Request 對象並提交給 Scrapy 引擎(下載鏈接頁面)。

  一個頁面中可能包含多項數據以及多個鏈接,所以頁面解析函數被要求返回一個可迭代對象(一般被實現成一個生成器函數),每次迭代返回一項數據(Item或字典)或一個 Request 對象。

相關文章
相關標籤/搜索