- N +

scrapy框架優(yōu)缺點(diǎn)?爬蟲(chóng)什么時(shí)候用scrapy

其實(shí)scrapy框架優(yōu)缺點(diǎn)的問(wèn)題并不復(fù)雜,但是又很多的朋友都不太了解爬蟲(chóng)什么時(shí)候用scrapy,因此呢,今天小編就來(lái)為大家分享scrapy框架優(yōu)缺點(diǎn)的一些知識(shí),希望可以幫助到大家,下面我們一起來(lái)看看這個(gè)問(wèn)題的分析吧!

pythonscrapy是什么意思

python和scrapy是倆事,python是一門(mén)計(jì)算機(jī)語(yǔ)言,scrapy是用python語(yǔ)言編寫(xiě)的爬蟲(chóng)框架。

tributo和spider區(qū)別

tributo和spider是兩款不同的跑鞋,區(qū)別如下:1.tributo是耐克旗下的跑鞋品牌,而spider則是亞瑟士旗下的跑鞋品牌,產(chǎn)地和制造工藝有很大不同。2.tributo注重跑鞋的輕量化和緩震效果,擁有更好的穩(wěn)定性和腳部支撐性能,而spider則比較追求鞋身透氣性和靈活性,適合路跑和踏青,但緩震相對(duì)較差。3.tributo的價(jià)格較高,一般在1000以上,而spider則價(jià)格較親民,一般在500左右,適合普通跑者購(gòu)買(mǎi)。

scrapy爬蟲(chóng)框架入門(mén)實(shí)例

以下是一個(gè)簡(jiǎn)單的Scrapy爬蟲(chóng)框架入門(mén)實(shí)例,用于爬取豆瓣電影Top250的電影名稱(chēng)和評(píng)分:

創(chuàng)建Scrapy項(xiàng)目

在命令行中輸入以下命令,創(chuàng)建一個(gè)名為douban的Scrapy項(xiàng)目:

scrapystartprojectdouban

創(chuàng)建Spider

在douban/spiders目錄下創(chuàng)建一個(gè)名為douban_spider.py的文件,編寫(xiě)以下代碼:

importscrapy

classDoubanSpider(scrapy.Spider):

name="douban"

start_urls=[

'https://movie.douban.com/top250'

]

defparse(self,response):

formovieinresponse.css('div.item'):

yield{

'title':movie.css('span.title::text').get(),

'rating':movie.css('span.rating_num::text').get()

}

next_page=response.css('span.nexta::attr(href)').get()

ifnext_pageisnotNone:

yieldresponse.follow(next_page,self.parse)

運(yùn)行Spider

在命令行中進(jìn)入douban目錄,輸入以下命令運(yùn)行Spider:

scrapycrawldouban-omovies.csv

其中,-o參數(shù)指定輸出文件的格式和路徑,這里將結(jié)果保存為CSV文件。

4.查看結(jié)果

運(yùn)行完畢后,在douban目錄下會(huì)生成一個(gè)movies.csv文件,打開(kāi)文件即可查看爬取到的電影名稱(chēng)和評(píng)分。

以上就是一個(gè)簡(jiǎn)單的Scrapy爬蟲(chóng)框架入門(mén)實(shí)例。需要注意的是,爬蟲(chóng)的編寫(xiě)需要遵守網(wǎng)站的爬蟲(chóng)規(guī)則,不得進(jìn)行惡意爬取和攻擊行為。

開(kāi)源爬蟲(chóng)框架各有什么優(yōu)缺點(diǎn)

首先爬蟲(chóng)框架有三種

分布式爬蟲(chóng):Nutch

JAVA單機(jī)爬蟲(chóng):Crawler4j,WebMagic,WebCollector

非JAVA單機(jī)爬蟲(chóng):scrapy

第一類(lèi):分布式爬蟲(chóng)優(yōu)點(diǎn):

海量URL管理

網(wǎng)速快

缺點(diǎn):

Nutch是為搜索引擎設(shè)計(jì)的爬蟲(chóng),大多數(shù)用戶(hù)是需要一個(gè)做精準(zhǔn)數(shù)據(jù)爬取(精抽取)的爬蟲(chóng)。Nutch運(yùn)行的一套流程里,有三分之二是為了搜索引擎而設(shè)計(jì)的。對(duì)精抽取沒(méi)有太大的意義。

用Nutch做數(shù)據(jù)抽取,會(huì)浪費(fèi)很多的時(shí)間在不必要的計(jì)算上。而且如果你試圖通過(guò)對(duì)Nutch進(jìn)行二次開(kāi)發(fā),來(lái)使得它適用于精抽取的業(yè)務(wù),基本上就要破壞Nutch的框架,把Nutch改的面目全非。

Nutch依賴(lài)hadoop運(yùn)行,hadoop本身會(huì)消耗很多的時(shí)間。如果集群機(jī)器數(shù)量較少,爬取速度反而不如單機(jī)爬蟲(chóng)。

Nutch雖然有一套插件機(jī)制,而且作為亮點(diǎn)宣傳。可以看到一些開(kāi)源的Nutch插件,提供精抽取的功能。但是開(kāi)發(fā)過(guò)Nutch插件的人都知道,Nutch的插件系統(tǒng)有多蹩腳。利用反射的機(jī)制來(lái)加載和調(diào)用插件,使得程序的編寫(xiě)和調(diào)試都變得異常困難,更別說(shuō)在上面開(kāi)發(fā)一套復(fù)雜的精抽取系統(tǒng)了。

Nutch并沒(méi)有為精抽取提供相應(yīng)的插件掛載點(diǎn)。Nutch的插件有只有五六個(gè)掛載點(diǎn),而這五六個(gè)掛載點(diǎn)都是為了搜索引擎服務(wù)的,并沒(méi)有為精抽取提供掛載點(diǎn)。大多數(shù)Nutch的精抽取插件,都是掛載在“頁(yè)面解析”(parser)這個(gè)掛載點(diǎn)的,這個(gè)掛載點(diǎn)其實(shí)是為了解析鏈接(為后續(xù)爬取提供URL),以及為搜索引擎提供一些易抽取的網(wǎng)頁(yè)信息(網(wǎng)頁(yè)的meta信息、text)

用Nutch進(jìn)行爬蟲(chóng)的二次開(kāi)發(fā),爬蟲(chóng)的編寫(xiě)和調(diào)試所需的時(shí)間,往往是單機(jī)爬蟲(chóng)所需的十倍時(shí)間不止。了解Nutch源碼的學(xué)習(xí)成本很高,何況是要讓一個(gè)團(tuán)隊(duì)的人都讀懂Nutch源碼。調(diào)試過(guò)程中會(huì)出現(xiàn)除程序本身之外的各種問(wèn)題(hadoop的問(wèn)題、hbase的問(wèn)題)。

Nutch2的版本目前并不適合開(kāi)發(fā)。官方現(xiàn)在穩(wěn)定的Nutch版本是nutch2.2.1,但是這個(gè)版本綁定了gora-0.3。Nutch2.3之前、Nutch2.2.1之后的一個(gè)版本,這個(gè)版本在官方的SVN中不斷更新。而且非常不穩(wěn)定(一直在修改)。

第二類(lèi):JAVA單機(jī)爬蟲(chóng)優(yōu)點(diǎn):

支持多線(xiàn)程。

支持代理。

能過(guò)濾重復(fù)URL的。

負(fù)責(zé)遍歷網(wǎng)站和下載頁(yè)面。爬js生成的信息和網(wǎng)頁(yè)信息抽取模塊有關(guān),往往需要通過(guò)模擬瀏覽器(htmlunit,selenium)來(lái)完成。

缺點(diǎn):設(shè)計(jì)模式對(duì)軟件開(kāi)發(fā)沒(méi)有指導(dǎo)性作用。用設(shè)計(jì)模式來(lái)設(shè)計(jì)爬蟲(chóng),只會(huì)使得爬蟲(chóng)的設(shè)計(jì)更加臃腫。第三類(lèi):非JAVA單機(jī)爬蟲(chóng)優(yōu)點(diǎn):

先說(shuō)python爬蟲(chóng),python可以用30行代碼,完成JAVA

50行代碼干的任務(wù)。python寫(xiě)代碼的確快,但是在調(diào)試代碼的階段,python代碼的調(diào)試往往會(huì)耗費(fèi)遠(yuǎn)遠(yuǎn)多于編碼階段省下的時(shí)間。

使用python開(kāi)發(fā),要保證程序的正確性和穩(wěn)定性,就需要寫(xiě)更多的測(cè)試模塊。當(dāng)然如果爬取規(guī)模不大、爬取業(yè)務(wù)不復(fù)雜,使用scrapy這種爬蟲(chóng)也是蠻不錯(cuò)的,可以輕松完成爬取任務(wù)。

缺點(diǎn):

bug較多,不穩(wěn)定。

爬蟲(chóng)可以爬取ajax信息么?

網(wǎng)頁(yè)上有一些異步加載的數(shù)據(jù),爬取這些數(shù)據(jù)有兩種方法:使用模擬瀏覽器(問(wèn)題1中描述過(guò)了),或者分析ajax的http請(qǐng)求,自己生成ajax請(qǐng)求的url,獲取返回的數(shù)據(jù)。如果是自己生成ajax請(qǐng)求,使用開(kāi)源爬蟲(chóng)的意義在哪里?其實(shí)是要用開(kāi)源爬蟲(chóng)的線(xiàn)程池和URL管理功能(比如斷點(diǎn)爬取)。

如果我已經(jīng)可以生成我所需要的ajax請(qǐng)求(列表),如何用這些爬蟲(chóng)來(lái)對(duì)這些請(qǐng)求進(jìn)行爬取?

爬蟲(chóng)往往都是設(shè)計(jì)成廣度遍歷或者深度遍歷的模式,去遍歷靜態(tài)或者動(dòng)態(tài)頁(yè)面。爬取ajax信息屬于deepweb(深網(wǎng))的范疇,雖然大多數(shù)爬蟲(chóng)都不直接支持。但是也可以通過(guò)一些方法來(lái)完成。比如WebCollector使用廣度遍歷來(lái)遍歷網(wǎng)站。爬蟲(chóng)的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡(jiǎn)單來(lái)說(shuō),就是將生成的ajax請(qǐng)求作為種子,放入爬蟲(chóng)。用爬蟲(chóng)對(duì)這些種子,進(jìn)行深度為1的廣度遍歷(默認(rèn)就是廣度遍歷)。

爬蟲(chóng)怎么爬取要登陸的網(wǎng)站?

這些開(kāi)源爬蟲(chóng)都支持在爬取時(shí)指定cookies,模擬登陸主要是靠cookies。至于cookies怎么獲取,不是爬蟲(chóng)管的事情。你可以手動(dòng)獲取、用http請(qǐng)求模擬登陸或者用模擬瀏覽器自動(dòng)登陸獲取cookie。

爬蟲(chóng)怎么抽取網(wǎng)頁(yè)的信息?

開(kāi)源爬蟲(chóng)一般都會(huì)集成網(wǎng)頁(yè)抽取工具。主要支持兩種規(guī)范:CSSSELECTOR和XPATH。

網(wǎng)頁(yè)可以調(diào)用爬蟲(chóng)么?

爬蟲(chóng)的調(diào)用是在Web的服務(wù)端調(diào)用的,平時(shí)怎么用就怎么用,這些爬蟲(chóng)都可以使用。

爬蟲(chóng)速度怎么樣?

單機(jī)開(kāi)源爬蟲(chóng)的速度,基本都可以講本機(jī)的網(wǎng)速用到極限。爬蟲(chóng)的速度慢,往往是因?yàn)橛脩?hù)把線(xiàn)程數(shù)開(kāi)少了、網(wǎng)速慢,或者在數(shù)據(jù)持久化時(shí),和數(shù)據(jù)庫(kù)的交互速度慢。而這些東西,往往都是用戶(hù)的機(jī)器和二次開(kāi)發(fā)的代碼決定的。這些開(kāi)源爬蟲(chóng)的速度,都很可以。

scrapy框架

Scrapy是適用于Python的一個(gè)快速、高層次的屏幕抓取和web抓取的框架,它用于抓取web站點(diǎn)并從頁(yè)面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試。

Scrapy占內(nèi)存大嗎

Scrapy的內(nèi)存消耗相對(duì)較小。Scrapy是一個(gè)基于異步IO的高效Web爬蟲(chóng)框架,它使用了Twisted異步網(wǎng)絡(luò)庫(kù),在處理網(wǎng)絡(luò)請(qǐng)求時(shí)能更好地利用計(jì)算機(jī)的資源。

Scrapy采用了輕量級(jí)的設(shè)計(jì)理念,將爬取和解析過(guò)程分離,只在內(nèi)存中保存必要的數(shù)據(jù),而不會(huì)一次性將整個(gè)頁(yè)面加載到內(nèi)存中。

此外,Scrapy還提供了調(diào)度器和管道的機(jī)制,可根據(jù)需求自定義控制內(nèi)存使用。雖然具體消耗取決于爬取的頁(yè)面大小、解析復(fù)雜度和爬蟲(chóng)設(shè)置,但一般情況下,Scrapy相對(duì)于其他爬蟲(chóng)框架會(huì)占用較少的內(nèi)存。

關(guān)于scrapy框架優(yōu)缺點(diǎn)和爬蟲(chóng)什么時(shí)候用scrapy的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

返回列表
上一篇:
下一篇: