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.即可,...