Scrapy爬蟲 三 scrapy架構及原理

2022-07-07 17:36:12 字數 1234 閱讀 9654

scrapy現在已經完美支援python3+,所以後面的例項我都會使用python3+的環境。首先我們來嚐下鮮,下面的**是scrapy官方文件中的一段演示**,就這麼幾行**就完成了對 的爬取解析儲存,可以一窺scrapy的強大。

#quotes_spider.py

import scrapy

class quotesspider(scrapy.spider):

name = "quotes"

start_urls = [

'',]

def parse(self, response):

for quote in response.css('div.quote'):

yield

next_page = response.css('li.next a::attr("href")').extract_first()

if next_page is not none:

next_page = response.urljoin(next_page)

yield scrapy.request(next_page, callback=self.parse)

執行scrapy runspider quotes_spider.py -o quotes.json執行後的資料儲存在quotes.json檔案中

[,,

,,,,

,,,,

,]

scrapy使用了twisted作為框架,twisted有些特殊的地方是它是事件驅動的,並且比較適合非同步的**。對於會阻塞執行緒的操作包含訪問檔案、資料庫或者web、產生新的程序並需要處理新程序的輸出(如執行shell命令)、執行系統層次操作的**(如等待系統佇列),twisted提供了允許執行上面的操作但不會阻塞**執行的方法。

下面的圖表顯示了scrapy架構元件,以及執行scrapy時的資料流程,圖中紅色箭頭標出。

我大概翻譯了下,具體參考官方文件

scrapy資料流是由執行的核心引擎(engine)控制,流程是這樣的:

上圖展示了scrapy的所有元件工作流程,下面單獨介紹各個元件

scrapy爬蟲框架 三

pipelines.py from scrapy.exporters import jsonitemexporter class qsbkspiderpipeline object def init self 初始化方法 使用二進位制來寫入,因此 w wb self.fp open duanzi2....

爬蟲scrapy框架學習(三)

3.示例2redisspider a.使用方法 它與示例1只有乙個地方不同,就是將start url存入redis中,如下 b.總結 該示例很簡單,只是將start url存入redis key中,就可實現分布式爬蟲,多台電腦共同完成乙個爬蟲,資料不會重複 4.示例3rediscrawlspider...

scrapy爬蟲框架

作者經過幾周的python爬蟲實踐之後,深入學習了一下scrapy這個爬蟲框架,現將一些基本知識和 總結整理一下,以備後查。2.scrapy的命令列使用 這部分網上很多部落格都有總結,不需要背,理解會用主要的命令 startproject crawl fetch list genspider.即可,...