在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 通用爬蟲(chóng)(Broad Crawls)
Benchmarking
命令行工具(Command line tools)
下載器中間件(Downloader Middleware)
信號(hào)(Signals)
Telnet 終端(Telnet Console)
初窺 Scrapy
數(shù)據(jù)收集(Stats Collection)
Scrapyd
通用爬蟲(chóng)(Broad Crawls)
Item Loaders
試驗(yàn)階段特性
Scrapy 入門(mén)教程
自動(dòng)限速(AutoThrottle)擴(kuò)展
Settings
Scrapy 終端(Scrapy shell)
下載項(xiàng)目圖片
DjangoItem
調(diào)試(Debugging)Spiders
選擇器(Selectors)
Feed exports
Spiders Contracts
借助 Firefox 來(lái)爬取
Logging
Spiders
Ubuntu 軟件包
實(shí)踐經(jīng)驗(yàn)(Common Practices)
安裝指南
Item Exporters
擴(kuò)展(Extensions)
Items
Spider 中間件(Middleware)
異常(Exceptions)
例子
發(fā)送 email
架構(gòu)概覽
常見(jiàn)問(wèn)題(FAQ)
Jobs:暫停,恢復(fù)爬蟲(chóng)
核心 API
使用 Firebug 進(jìn)行爬取
Item Pipeline
Link Extractors
Web Service
調(diào)試內(nèi)存溢出

通用爬蟲(chóng)(Broad Crawls)

Scrapy 默認(rèn)對(duì)特定爬取進(jìn)行優(yōu)化。這些站點(diǎn)一般被一個(gè)單獨(dú)的 Scrapy spider 進(jìn)行處理, 不過(guò)這并不是必須或要求的(例如,也有通用的爬蟲(chóng)能處理任何給定的站點(diǎn))。

除了這種爬取完某個(gè)站點(diǎn)或沒(méi)有更多請(qǐng)求就停止的”專(zhuān)注的爬蟲(chóng)”,還有一種通用的爬取類(lèi)型,其能爬取大量(甚至是無(wú)限)的網(wǎng)站, 僅僅受限于時(shí)間或其他的限制。 這種爬蟲(chóng)叫做”通用爬蟲(chóng)(broad crawls)”,一般用于搜索引擎。

通用爬蟲(chóng)一般有以下通用特性:

  • 其爬取大量(一般來(lái)說(shuō)是無(wú)限)的網(wǎng)站而不是特定的一些網(wǎng)站。
  • 其不會(huì)將整個(gè)網(wǎng)站都爬取完畢,因?yàn)檫@十分不實(shí)際(或者說(shuō)是不可能)完成的。相反,其會(huì)限制爬取的時(shí)間及數(shù)量。
  • 其在邏輯上十分簡(jiǎn)單(相較于具有很多提取規(guī)則的復(fù)雜的 spider),數(shù)據(jù)會(huì)在另外的階段進(jìn)行后處理(post-processed)
  • 其并行爬取大量網(wǎng)站以避免被某個(gè)網(wǎng)站的限制所限制爬取的速度(為表示尊重,每個(gè)站點(diǎn)爬取速度很慢但同時(shí)爬取很多站點(diǎn))。

正如上面所述,Scrapy 默認(rèn)設(shè)置是對(duì)特定爬蟲(chóng)做了優(yōu)化,而不是通用爬蟲(chóng)。不過(guò), 鑒于其使用了異步架構(gòu),Scrapy 對(duì)通用爬蟲(chóng)也十分適用。 本篇文章總結(jié)了一些將 Scrapy 作為通用爬蟲(chóng)所需要的技巧, 以及相應(yīng)針對(duì)通用爬蟲(chóng)的 Scrapy 設(shè)定的一些建議。

增加并發(fā)

并發(fā)是指同時(shí)處理的 request 的數(shù)量。其有全局限制和局部(每個(gè)網(wǎng)站)的限制。

Scrapy 默認(rèn)的全局并發(fā)限制對(duì)同時(shí)爬取大量網(wǎng)站的情況并不適用,因此您需要增加這個(gè)值。 增加多少取決于您的爬蟲(chóng)能占用多少 CPU。 一般開(kāi)始可以設(shè)置為 100 。不過(guò)最好的方式是做一些測(cè)試,獲得 Scrapy 進(jìn)程占取 CPU 與并發(fā)數(shù)的關(guān)系。 為了優(yōu)化性能,您應(yīng)該選擇一個(gè)能使 CPU 占用率在 80%-90% 的并發(fā)數(shù)。

增加全局并發(fā)數(shù)

CONCURRENT_REQUESTS = 100

降低 log 級(jí)別

當(dāng)進(jìn)行通用爬取時(shí),一般您所注意的僅僅是爬取的速率以及遇到的錯(cuò)誤。 Scrapy 使用 INFO log 級(jí)別來(lái)報(bào)告這些信息。為了減少 CPU 使用率(及記錄 log 存儲(chǔ)的要求), 在生產(chǎn)環(huán)境中進(jìn)行通用爬取時(shí)您不應(yīng)該使用 DEBUG log 級(jí)別。 不過(guò)在開(kāi)發(fā)的時(shí)候使用 DEBUG 應(yīng)該還能接受。

設(shè)置 Log 級(jí)別:

LOG_LEVEL = 'INFO'

禁止 cookies

除非您 真的 需要,否則請(qǐng)禁止 cookies。在進(jìn)行通用爬取時(shí) cookies 并不需要, (搜索引擎則忽略 cookies)。禁止 cookies 能減少 CPU 使用率及 Scrapy 爬蟲(chóng)在內(nèi)存中記錄的蹤跡,提高性能。

禁止 cookies:

COOKIES_ENABLED = False

禁止重試

對(duì)失敗的 HTTP 請(qǐng)求進(jìn)行重試會(huì)減慢爬取的效率,尤其是當(dāng)站點(diǎn)響應(yīng)很慢(甚至失敗)時(shí), 訪問(wèn)這樣的站點(diǎn)會(huì)造成超時(shí)并重試多次。這是不必要的,同時(shí)也占用了爬蟲(chóng)爬取其他站點(diǎn)的能力。

禁止重試:

RETRY_ENABLED = False

減小下載超時(shí)

如果您對(duì)一個(gè)非常慢的連接進(jìn)行爬取(一般對(duì)通用爬蟲(chóng)來(lái)說(shuō)并不重要), 減小下載超時(shí)能讓卡住的連接能被快速的放棄并解放處理其他站點(diǎn)的能力。

減小下載超時(shí):

DOWNLOAD_TIMEOUT = 15

禁止重定向

除非您對(duì)跟進(jìn)重定向感興趣,否則請(qǐng)考慮關(guān)閉重定向。當(dāng)進(jìn)行通用爬取時(shí),一般的做法是保存重定向的地址,并在之后的爬取進(jìn)行解析。這保證了每批爬取的 request 數(shù)目在一定的數(shù)量,否則重定向循環(huán)可能會(huì)導(dǎo)致爬蟲(chóng)在某個(gè)站點(diǎn)耗費(fèi)過(guò)多資源。

關(guān)閉重定向:

REDIRECT_ENABLED = False

啟用 “Ajax Crawlable Pages” 爬取

有些站點(diǎn)(基于 2013 年的經(jīng)驗(yàn)數(shù)據(jù),之多有 1%)聲明其為 ajax crawlabl。這意味著該網(wǎng)站提供了原本只有 ajax 獲取到的數(shù)據(jù)的純 HTML 版本。網(wǎng)站通過(guò)兩種方法聲明:

  1. 在 url 中使用#! - 這是默認(rèn)的方式;
  2. 使用特殊的 meta 標(biāo)簽 - 這在”main”, “index” 頁(yè)面中使用。

Scrapy 自動(dòng)解決(1);解決(2)您需要啟用 AjaxCrawlMiddleware:

AJAXCRAWL_ENABLED = True

通用爬取經(jīng)常抓取大量的 “index” 頁(yè)面; AjaxCrawlMiddleware 能幫助您正確地爬取。 由于有些性能問(wèn)題,且對(duì)于特定爬蟲(chóng)沒(méi)有什么意義,該中間默認(rèn)關(guān)閉。