怎樣編寫scrapy擴充套件

2021-06-22 23:12:16 字數 1675 閱讀 1446

在scrapy使用過程中,很多情況下需要根據實際需求定製自己的擴充套件,小到實現自己的pipelines,大到用新的scheduler替換預設的scheduler。

擴充套件可以按照是否需要讀取crawler大致分為兩種,對於不需要讀取的,比如pipelines的編寫,只需要實現預設的方法porcess_item。需要讀取的,如scheduler的編寫又存在另外的方式。

這種處理起來比較簡單,一般是根據scrapy的signals實現相應的處理。具體實現可見文件pipelines的編寫方法。

這種方式和第一種的主要區別是需要使用crawler內部資訊,比如接收內部訊號,如signals.spider_opened等。還體現在對設定setting.py的是否需要讀取上。

i)讀取設定一般通過from_settings函式實現。一下是scrapy-redis中scheduler的from_settings的實現方法:

def from_settings(cls, settings):

persist = settings.get('scheduler_persist', scheduler_persist)

queue_key = settings.get('scheduler_queue_key', queue_key)

queue_cls = load_object(settings.get('scheduler_queue_class', queue_class))

dupefilter_key = settings.get('dupefilter_key', dupefilter_key)

idle_before_close = settings.get('scheduler_idle_before_close', idle_before_close)

server = connection.from_settings(settings)

return cls(server, persist, queue_key, queue_cls, dupefilter_key, idle_before_close)

ii)from_crawler() scrapy api的主要入口是 crawler 的例項物件, 通過類方法 from_crawler 將它傳遞給擴充套件(extensions)。 該物件提供對所有scrapy核心元件的訪問, 也是擴充套件訪問scrapy核心元件和掛載功能到scrapy的唯一途徑。

實現例子如下:

def from_crawler(cls, crawler):

instance = cls.from_settings(crawler.settings)

return instance

iii)其它函式

想pipelines中的process_item一樣,有些函式是此型別組建所必需的,整個框架在執行時會使用到次函式,所以必須加以實現。如scheduler中的enqueue_request、next_request等函式。

最難處理的也是第iii種,這需要全域性了解scrapy執行邏輯,函式呼叫關係等。比較簡單的方式是按照原元件的函式功能,函式返回值等根據自己編寫的擴充套件的功能重新實現。就是照葫蘆畫瓢。

scrapy內data stream在其文件的架構上已經說明,但是轉化到**上好難找啊。

探索的提高效率的py-charm操作:

ctrl+shift+f可以全域性查詢字元的出現。右上角的放大鏡貌似只能找函式。

scrapy 編寫擴充套件 (八)

在scrapy使用過程中,很多情況下需要根據實際需求定製自己的擴充套件,小到實現自己的pipelines,大到用新的scheduler替換預設的scheduler。擴充套件可以按照是否需要讀取crawler大致分為兩種,對於不需要讀取的,比如pipelines的編寫,只需要實現預設的方法porces...

scrapy 編寫擴充套件 (八)

在scrapy使用過程中,很多情況下需要根據實際需求定製自己的擴充套件,小到實現自己的pipelines,大到用新的scheduler替換預設的scheduler。擴充套件可以按照是否需要讀取crawler大致分為兩種,對於不需要讀取的,比如pipelines的編寫,只需要實現預設的方法porces...

python怎樣編寫 PYTHON怎樣編寫自動化

1級2018 09 18 回答 就直接寫指令碼,給你舉給例子 編寫工具 1.設計目標 首先說一下我要工具的功能 遍歷某個目錄下包括其下子目錄中所有指定的字尾檔案,然後為這些檔案的頭部插入指定的字串。2.使用場景 設計這樣的工具起因是我最近在將之前 csdn 中的部落格搬運到自己的 hexo 部落格空...