一、scrapy爬蟲框架圖
scrapy是Python語言寫成的爬蟲框架,它結構清晰且具有高度的可定製化能力。以下是scrapy爬蟲框架的實現原理圖:
+-------------------------------------------------+ | | | Scheduler +--------+ Spider | | ---------> | | ---------> | | | Scrapy | | | Item Pipeline | Engine | Downloader | | ---------> | | <--------- | | +--------+ | | | +-------------------------------------------------+
二、scrapy爬蟲框架結構主要包括
Scrapy框架主要包括以下5個組件:
1.引擎 (Scrapy Engine):負責控制各組件之間的數據流,包括調度器、下載器以及爬蟲。
2.調度器 (Scheduler):負責接收引擎傳遞過來的數據請求,並將請求放入隊列中讓下載器去下載。
3.爬蟲 (Spider):負責定義爬取網站的邏輯和網站如何進行解析,生成可爬取的數據及應對各種異常。
4.下載器 (Downloader):負責下載爬蟲需要的網頁,並將網頁返回給引擎,同時支持通過配置隨機更換user-agent,來防止被封禁。
5.管道 (Item Pipeline):負責處理引擎傳遞過來的數據,支持對數據的清洗、格式轉換和持久化操作。
三、scrapy爬蟲框架面試題
面試時常出以下幾個問題:
1. scrapy怎麼實現去重?
通過調度器和去重過濾器實現,可以利用集合、Redis、資料庫等進行去重。
2. 如何對代理池進行維護?
可以使用開源框架Scrapy——ProxyPool進行維護,實現自動掃描和測試代理IP可用性,從而不斷更新代理池。
3. 如何處理分頁數據?
在請求中添加頁碼參數,並重寫start_requests方法來動態生成請求,將所有數據的請求全部添加至調度器中,讓調度器去調度下載器進行請求。
四、scrapy爬蟲框架包含的組件
在實際爬蟲開發中,我們還可以使用以下兩個組件:
1.中間件 (Middleware):可以對爬取過程中的Request和Response進行處理,如添加隨機User-Agent頭、IP代理等。
2.擴展 (Extension):提供了一系列的擴展API,可以自定義Scrapy的各個環節的實現來完善框架。
五、scrapy爬蟲框架流程
1.定義爬蟲解析規則。
註:通過分析網站的查詢語言,選擇正確的解析方法來爬取目標信息。
2.定義數據保存管道。
註:爬取的數據可以直接保存在CSV文件、MongoDB資料庫、MySQL資料庫等存儲介質中。
3.創建爬蟲並配置參數。
註:如果需要,可以在這個階段為爬蟲添加更多的中間件和擴展。
4.啟動Scrapy引擎。
註:在引擎中調用start_requests()方法啟動Scrapy。
六、scrapy爬蟲框架安裝
1. 安裝Scrapy
pip install scrapy
2. 安裝Scrapy-Redis (可選)
pip install scrapy-redis
七、scrapy爬蟲框架有幾個模塊
Scrapy 框架主要有以下幾個子模塊:
1. scrapy.spiders:爬蟲模塊
2. scrapy.selector:XPath 和 CSS 查詢器
3. scrapy.exceptions:異常處理模塊
4. scrapy.utils:包含一些常用的 Scrapy 工具類
八、scrapy爬蟲框架不指定域名可以嗎
可以,Scrapy 爬蟲框架允許爬取一個或多個指定的域名的網頁,也可以在不指定域名的情況下進行爬取。在 spiders/ 目錄下創建一個名為 argument.py 文件:
# -*- coding: utf-8 -*- import scrapy from scrapy.http import Request class ArgumentSpider(scrapy.Spider): name = 'argument' def start_requests(self): # 定義爬取的URL列表 urls = [ 'http://www.example.com/', 'http://www.example.org/', 'http://www.example.net/', ] for url in urls: yield Request(url=url, callback=self.parse) def parse(self, response): """ 解析函數 """ pass
九、scrapy爬蟲框架獲取虎撲nba
以獲取虎撲NBA新聞為例:
1.創建項目。
scrapy startproject huPu
2.在huPu/spiders目錄下創建hupu.py文件:
import scrapy class HupuSpider(scrapy.Spider): name = 'hupu' #爬蟲運行的起始url allowed_domains = ['voice.hupu.com'] start_urls = ['https://voice.hupu.com/nba/1'] def parse(self, response): #所有的帖子列表 post_list = response.xpath('//div[@class="news-list"]/ul/li') for post in post_list: item = {} #標題 item['title'] = post.xpath('./a/text()').extract_first() #鏈接 item['href'] = post.xpath('./a/@href').extract_first() #時間 item['date'] = post.xpath('./span/text()').extract_first() #爬取詳情頁 yield scrapy.Request(url=item['href'], callback=self.parse_detail, meta={'item': item}) #翻頁,-1表示去掉下一頁 next_url = response.xpath('//div[@class="page"]/a[@class="hp-next-page"]/@href') if next_url: url = 'https://voice.hupu.com/nba/' + next_url.extract_first().strip('/') yield scrapy.Request(url=url, callback=self.parse) def parse_detail(self, response): item = response.meta['item'] #詳情 item['detail'] = response.xpath('//div[contains(@class,"artical-content")]/text() | //div[contains(@class,"artical-content")]/p/text()').extract() yield item
3.執行爬蟲。
scrapy crawl hupu
十、python爬蟲框架scrapy選取相關小標題
1. scrapy結構圖
2. scrapy包含的組件
3. scrapy的使用面試題
4. scrapy的啟動流程
5. scrapy安裝方法
6. scrapy包含的幾個模塊
7. scrapy不指定域名可不可以爬取
8. scrapy爬取虎撲nba新聞演示
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/197448.html