一、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
微信掃一掃
支付寶掃一掃