爬蟲框架就是一些爬蟲專案的半成品,可以將一些爬蟲常用的功能寫好。然後留下一些介面,在不同的爬蟲專案中,呼叫適合自己專案的介面,再編寫少量的程式碼實現自己需要的功能。因為框架已經實現了爬蟲常用的功能,所以為開發人員節省了很多精力與時間。
1、Scrapy爬蟲框架
這是一套比較成熟的python爬蟲框架,簡單輕巧,並且非常方便。可以高效率的爬取Web頁面並從頁面中提取結構化的資料。Scrapy是一套成熟的框架,所以在使用時不需要擔心收取費用的問題。其網址為:https://scrapy.org 可以看下他們的開發文件
原始碼地址:https://github.com/binux/pyspider/releases
開發文件地址為:http://docs.pyspider.org/
2、Crawley 爬蟲框架
Crawley也是python開發出的爬蟲框架,該框架致力於改變人們從網際網路中提取資料的方式。特性如下:
基於Eventlet構建的高速網路爬蟲框架
可以將資料儲存在關係型資料庫中,如mysql
可以將爬取的資料匯入為Json、XML格式
支援非關係資料跨
支援命令列工具
可以使用喜歡的工具進行資料的提取
支援使用Cookie登入或訪問那些只有登入才可以訪問的網頁
簡單易學(hope so)
官網地址為:http://project.crawley-cloud.com
3、PySpider爬蟲框架
相對於Scrapy框架而言,PySpider框架是一支新秀。它採用Python語言編寫,分散式架構,支援多種資料庫後端,強大的WebUI支援指令碼編輯器、任務監視器、專案管理器以及結果檢視器。有如下特性:
Python指令碼控制,可以用任何你喜歡的html解析包
Web介面編寫除錯指令碼、起停指令碼、監控執行狀態、檢視活動歷史、獲取結果產出
支援RabbitMQ、Beanstalk、Redis和Kombu作為訊息佇列
支援抓取JavaScript的頁面
強大的排程控制,支援超時重爬及優先順序設定
元件可替換,支援單機/分散式部署,支援Docker部署
4、Scrapy 爬蟲框架的使用
(1)搭建
01 安裝Twisted模組 計算機需要有c++ 14.0的相關支援,可以我的網盤裡下載
02 安裝Scrapy模組 直接安裝即可
03 安裝pywin32模組 直接安裝即可
(2)建立Scrapy專案
在指定資料夾內開啟命令列,輸入: scrapy startproject scrapyDemo,即可建立一個名為‘scrapyDemo’的專案
(3)建立爬蟲
在建立爬蟲時,首先需要建立一個爬蟲模組的檔案,該檔案需要放置在spiders資料夾中。爬蟲模組是用於從一個網站或多個網站中爬取資料的類,它需要繼承scrapy.Spider類,下面通過一個例子,實現爬取網頁後將網頁的程式碼以html檔案儲存到專案資料夾當中,如下:
import scrapy class QuotesSpider(scrapy.Spider): name = 'quotes' #定義爬蟲的名稱 def start_requests(self): #設定爬取目標的地址 urls=[ 'https://www.juzimi.com/article/23959', 'https://www.juzimi.com/article/23959?page=1', 'https://www.juzimi.com/article/23959?page=2' ] #獲取所有地址,有幾個地址傳送幾次請求 for url in urls: #傳送網路請求 yield scrapy.Request(url=url,callback=self.parse) def parse(self, response): #獲取頁數 page=response.url.split('/')[-2] #根據頁數設定檔名稱 filename='quotes-%s.html'%page #寫入檔案的模式開啟檔案,如果沒有該檔案將建立該檔案 with open(filename,'wb') as f: #向檔案中寫入獲取的html程式碼 f.write(response.body) #輸出儲存檔案的名稱 self.log('Saved file %s'%filename)
在執行Scrapy 所建立的爬蟲專案時,需要在命令視窗中輸入“scrapy crawl quotes”,其中“quotes”是自己定義的爬蟲名稱。
除了使用在命令視窗中啟動外,還可以在程式中啟動爬蟲的API,也就是CrawlerProcess類。首先需要在CrawlerProcess初始化時傳入專案的settings資訊,然後在crawl()方法中傳入爬蟲的名稱,最後通過start()方法啟動爬蟲,程式碼如下:
#匯入CrawlerProcess類 from scrapy.crawler import CrawlerProcess #匯入獲取專案設定資訊 from scrapy.utils.project import get_project_settings #程式入口 if __name__ == '__main__': #建立CrawlerProcess類物件並傳入專案設定資訊引數 process=CrawlerProcess(get_project_settings()) #設定需要啟動的爬蟲名稱 process.crawl('quotes') #啟動爬蟲 process.start()
(4)獲取資料
Scrapy爬蟲框架,可以通過特定的CSS或者XPath表示式來選擇HTML檔案中的某一處,並且提取出相應的資料。
1、CSS提取資料
使用CSS提取HTML檔案中的某一處資料時,可以指定HTML檔案中的標籤名稱,示例程式碼如下:
response.css('title').extract()