前言:
因?yàn)閟crapy-redis里面有兩個(gè)spider,一個(gè)basespider,一個(gè)crawlspider;有人分不清他們的區(qū)別;本文就來掰一掰他們的事;
正文:
`CrawlSpider` 和 `Spider` 是兩個(gè)不同的爬蟲類,具有以下區(qū)別:
- 1. `Spider` 類:`Spider` 是 Scrapy 中最基本的爬蟲類。你可以從 `scrapy.Spider` 類派生出自定義的爬蟲類。在基本的 `Spider` 類中,你需要定義 `start_urls` 和 `parse` 方法來指定起始 URL 和解析響應(yīng)的邏輯。`Spider` 類提供了基礎(chǔ)的請(qǐng)求發(fā)送和響應(yīng)處理功能,并在需要時(shí)提供了回調(diào)函數(shù)來處理解析和處理響應(yīng)的邏輯。
- 2. `CrawlSpider` 類:`CrawlSpider` 是 Scrapy 提供的高級(jí)爬蟲類之一,它是基于 `Spider` 類的擴(kuò)展。`CrawlSpider` 類提供了更方便的機(jī)制用于定義和跟蹤規(guī)則(rules),使得爬取復(fù)雜網(wǎng)站的操作更加簡(jiǎn)單。通過在 `CrawlSpider` 類中定義 `rules` 屬性和回調(diào)函數(shù),你可以指定抓取頁面的鏈接和數(shù)據(jù)提取規(guī)則。`CrawlSpider` 能夠自動(dòng)根據(jù)規(guī)則解析鏈接并深度優(yōu)先進(jìn)行爬取。
`Spider` 類是 Scrapy 中最基本的爬蟲類,提供了處理請(qǐng)求和解析響應(yīng)的基本功能。而 `CrawlSpider` 類是基于 `Spider` 類的擴(kuò)展,提供了更方便的機(jī)制用于定義和跟蹤規(guī)則,使得爬取復(fù)雜網(wǎng)站的操作更加簡(jiǎn)單。如果你的爬蟲需要根據(jù)特定的規(guī)則進(jìn)行鏈接提取和頁面抓取,`CrawlSpider` 類可能是更適合的選擇。但如果你只需要簡(jiǎn)單的頁面抓取和數(shù)據(jù)提取,`Spider` 類已經(jīng)足夠了。
------------也就是說,最大的區(qū)別就是個(gè)rules!!
那么,
rules的優(yōu)勢(shì)在哪?
- 當(dāng)使用 CrawlSpider 類和 rules 規(guī)則時(shí),能夠更方便地定義和管理頁面的抓取規(guī)則,從而簡(jiǎn)化爬蟲的編寫和維護(hù)過程。
- 相比于不使用 CrawlSpider 和 rules 的情況,使用規(guī)則的優(yōu)勢(shì)包括規(guī)則的自動(dòng)化處理、鏈接提取、跟進(jìn)和頁面的解析,減少了手動(dòng)編寫大量重復(fù)代碼的工作量。
案例:
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class QuotesCrawler(CrawlSpider):
name = "quotes_crawler"
start_urls = ["http://quotes.toscrape.com/"]
allowed_domains = ["quotes.toscrape.com"]
rules = (
Rule(LinkExtractor(restrict_xpaths="http://a[@class='tag']"), follow=True),
Rule(LinkExtractor(restrict_xpaths="http://div[@class='quote']/span/a"), callback='parse_quote'),
)
def parse_quote(self, response):
quote = {
'text': response.xpath("http://h1/text()").get(),
'author': response.xpath("http://h3/text()").get(),
'tags': response.xpath("http://div[@class='tags']/a/text()").getall(),
}
yield quote
案例講解:
我們創(chuàng)建了一個(gè)名為 QuotesCrawler 的爬蟲類,繼承自 CrawlSpider。我們的目標(biāo)是爬取名言網(wǎng)站(http://quotes.toscrape.com/)上的名言和標(biāo)簽。
- start_urls:起始 URL,設(shè)置為名言網(wǎng)站的首頁。
- allowed_domains:限制爬蟲只在該域名下進(jìn)行爬取。
- rules:定義了兩個(gè)規(guī)則。
- 第一個(gè)規(guī)則使用 LinkExtractor 和 restrict_xpaths,提取標(biāo)簽頁面的鏈接,并通過 follow=True 讓爬蟲跟進(jìn)這些鏈接。
- 第二個(gè)規(guī)則使用 LinkExtractor 和 restrict_xpaths,提取名言詳情頁面的鏈接,并通過 callback='parse_quote' 指定回調(diào)函數(shù)處理這些頁面。
- parse_quote:作為回調(diào)函數(shù),解析名言詳情頁面的響應(yīng),提取名言的文本、作者和標(biāo)簽,并以字典形式返回。
通過使用 CrawlSpider 和 rules,我們只需定義規(guī)則和回調(diào)函數(shù),而無需編寫大量的鏈接提取和跟進(jìn)的代碼。這樣,Scrapy 會(huì)自動(dòng)根據(jù)規(guī)則進(jìn)行頁面抓取和處理,大大減少了編寫重復(fù)代碼的工作量。同時(shí),當(dāng)網(wǎng)站結(jié)構(gòu)變化時(shí),我們只需修改規(guī)則,而不是整個(gè)爬蟲邏輯。
--------也就是說,crawlspider的一個(gè)rules能減少抓取數(shù)據(jù)的代碼量,方便管理;補(bǔ):可能前些年還好,現(xiàn)在越來越多的網(wǎng)站開始各種css渲染/js渲染生成頁面數(shù)據(jù),你真用rules去搞,抓出來的好多都牛頭不對(duì)馬嘴; ?文章來源:http://www.zghlxwxcb.cn/news/detail-775780.html
延伸一個(gè)知識(shí)點(diǎn):
鏈接跟進(jìn)(啟用 `follow=True`)的優(yōu)劣勢(shì):
-
- 優(yōu)點(diǎn):
-
? - 抓取更多頁面:鏈接跟進(jìn)可以使爬蟲抓取到更多相關(guān)的頁面,尤其是對(duì)于有關(guān)聯(lián)關(guān)系的頁面,如列表頁和詳情頁。
-
? - 遞歸爬?。和ㄟ^跟進(jìn)鏈接,可以實(shí)現(xiàn)遞歸爬取,深入地獲取更多內(nèi)容和數(shù)據(jù)。
-
? - 更新抓取的數(shù)據(jù):可以通過跟進(jìn)鏈接來確保已經(jīng)抓取的數(shù)據(jù)保持更新,捕捉最新的內(nèi)容和評(píng)論。
-
? - 避免遺漏數(shù)據(jù):某些網(wǎng)站可能在列表頁中提供部分內(nèi)容,啟用鏈接跟進(jìn)可確保獲取到完整的頁面內(nèi)容,避免遺漏重要數(shù)據(jù)。
-
-
- 缺點(diǎn):
-
? - 更多網(wǎng)絡(luò)請(qǐng)求和數(shù)據(jù)抓?。焊M(jìn)鏈接會(huì)導(dǎo)致爬蟲抓取更多的頁面,增加網(wǎng)絡(luò)帶寬和處理資源的消耗。
-
? - 可能會(huì)抓取無關(guān)頁面:如果抓取的頁面沒有足夠的篩選條件,可能會(huì)抓取到無關(guān)的頁面,導(dǎo)致數(shù)據(jù)冗余或混亂。
-
-
不啟用鏈接跟進(jìn)(將 `follow=False` 或不進(jìn)行配置):
-
- 優(yōu)點(diǎn):
-
? - 簡(jiǎn)化抓取邏輯:不啟用鏈接跟進(jìn)可簡(jiǎn)化爬蟲的抓取邏輯,只關(guān)注初始頁面上的數(shù)據(jù)獲取。
-
? - 控制抓取規(guī)模:不啟用鏈接跟進(jìn)可以控制抓取的深度和規(guī)模,避免抓取過多的頁面。
-
-
- 缺點(diǎn):
-
? - 只能抓取初始頁面:不啟用鏈接跟進(jìn)會(huì)限制爬蟲僅抓取初始頁面上的數(shù)據(jù),可能會(huì)錯(cuò)過與頁面相關(guān)的其他內(nèi)容。
-
? - 需要手動(dòng)編寫更多代碼:不啟用鏈接跟進(jìn)需要手動(dòng)編寫代碼來處理額外的鏈接和頁面獲取,增加工作量。
-
----這里想說的是,最好別鏈接! 鏈了感覺抓全了,你稍微一個(gè)不注意,抓一堆廣告下來;徒增了負(fù)載...能手寫,盡量手寫~ 當(dāng)然,你做搜索引擎,可是適當(dāng)跟進(jìn),反正你服務(wù)器容量大,隨便搞唄,寧可錯(cuò)抓1000不能放錯(cuò)一個(gè).對(duì)吧...文章來源地址http://www.zghlxwxcb.cn/news/detail-775780.html
到了這里,關(guān)于爬蟲工作量由小到大的思維轉(zhuǎn)變---<第三十六章 Scrapy 關(guān)于CrawlSpider引發(fā)的議題>的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!