Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。 其最初是為了 頁(yè)面抓取 (更確切來(lái)說(shuō),網(wǎng)絡(luò)抓取)所設(shè)計(jì)的, 也可以應(yīng)用在獲取API所返回的數(shù)據(jù)(例如 Amazon Associates Web Services ) 或者通用的網(wǎng)絡(luò)爬蟲(chóng)。 1.安裝scrapy: 安裝scrapy的方式很多,這邊不詳細(xì)列出,大家可以網(wǎng)上百度。我的電腦裝的是anaconda(Python的一個(gè)集成安裝,安裝它后就默認(rèn)安裝了python、IPython、集成開(kāi)發(fā)環(huán)境、Spyder和眾多的包和模塊。非常方便。我這邊用的是python2.7版本),采用最簡(jiǎn)單的方式安裝scrapy: pip install scrapy 備注:這個(gè)語(yǔ)句會(huì)自動(dòng)下載需要的模塊,其中有一個(gè)叫twisted,我在家里的電腦和公司電腦,運(yùn)行上面的命令后,到下載twisted的時(shí)候都是下載了一半就報(bào)錯(cuò),這時(shí)輸入pip install twisted重新安裝這個(gè)模塊,再重新運(yùn)行 pip install scrapy即可成功安裝。安裝完后即可開(kāi)始編寫(xiě)scrapy 2.新建一個(gè)項(xiàng)目: 進(jìn)入windows的cmd,cd到你想要?jiǎng)?chuàng)建項(xiàng)目的路徑,然后鍵入: scrapy startproject tutorial 該命令會(huì)創(chuàng)建一個(gè)較tutorial的項(xiàng)目,該項(xiàng)目的目錄如下: tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ... 這些文件分別是: l scrapy.cfg: 項(xiàng)目的配置文件 l tutorial/: 該項(xiàng)目的python模塊。之后您將在此加入代碼。 l tutorial/items.py: 項(xiàng)目中的item文件. l tutorial/pipelines.py: 項(xiàng)目中的pipelines文件 l tutorial/settings.py: 項(xiàng)目的設(shè)置文件. l tutorial/spiders/: 放置spider代碼的目錄. 3.Scrapy架構(gòu) 整體架構(gòu) 爬取流程 上圖綠線是數(shù)據(jù)流向,首先從初始URL開(kāi)始,Scheduler會(huì)將其交給Downloader進(jìn)行下載,下載之后會(huì)交給Spider進(jìn)行分析,Spider分析出來(lái)的結(jié)果有兩種:一種是需要進(jìn)一步抓取的鏈接,例如之前分析的“下一頁(yè)”的鏈接,這些東西會(huì)被傳回Scheduler;另一種是需要保存的數(shù)據(jù),它們則被送到Item Pipeline那里,那是對(duì)數(shù)據(jù)進(jìn)行后期處理(詳細(xì)分析、過(guò)濾、存儲(chǔ)等)的地方。另外,在數(shù)據(jù)流動(dòng)的通道里還可以安裝各種中間件,進(jìn)行必要的處理 數(shù)據(jù)流 4.創(chuàng)建spider 這樣我們會(huì)在spiders文件夾里得到spider1的py文件,用python編輯器打開(kāi)它如下: 我們?cè)囍帉?xiě)它,假設(shè)我要爬起中國(guó)日?qǐng)?bào)的一條消息: 我們的spider.py可以改成這樣: 然后運(yùn)行爬蟲(chóng) scrapy crawl spider1 在這個(gè)過(guò)程中: Scrapy為Spider的 start_urls 屬性中的每個(gè)URL創(chuàng)建了 scrapy.Request 對(duì)象,并將 parse 方法作為回調(diào)函數(shù)(callback)賦值給了Request。 Request對(duì)象經(jīng)過(guò)調(diào)度,執(zhí)行生成 scrapy.http.Response 對(duì)象并送回給spider parse() 方法。 運(yùn)行完后我們可以看到 打開(kāi)查看 是不是很亂?我們打開(kāi)瀏覽器查看碼源看到: 其實(shí)保存在txt里的正是這個(gè)碼源。我們大多數(shù)的工作正是從這個(gè)碼源里提取我們需要的信息,這邊只是為了掩飾方便我們把它寫(xiě)到txt,Scrapy提取數(shù)據(jù)有自己的一套機(jī)制。它們被稱作選擇器(seletors),因?yàn)樗麄兺ㄟ^(guò)特定的 XPath 或者 CSS 表達(dá)式來(lái)“選擇” HTML文件中的某個(gè)部分,當(dāng)然我們也可以用正則表達(dá)式或Beautiful Soup來(lái)提取。具體可以查看scrapy文檔(鏈接在文末)。scrapy還提供了Item類(lèi),來(lái)保存爬取到的數(shù)據(jù)(可以理解為鍵提前定義好的字典),數(shù)據(jù)解析這邊就不一一列出,具體可以查看scrapy文檔或其他的解析方式。 5.我遇到的問(wèn)題。 爬取中財(cái)網(wǎng)數(shù)據(jù)的時(shí)候, 打開(kāi)碼源看到 百度了,如下 學(xué)習(xí)交流群是個(gè)好東西,群里發(fā)問(wèn)了,一會(huì)就有群友彈窗給我 360瀏覽器里沒(méi)看,于是我用谷歌瀏覽器打開(kāi)網(wǎng)頁(yè),然后用開(kāi)發(fā)者工具打開(kāi)碼源 按照上面介紹的方法改spider1代碼,運(yùn)行爬蟲(chóng),得到如下結(jié)果,接下來(lái)進(jìn)一步解析這個(gè)文本即可 參考鏈接: http://scrapy-chs./zh_CN/0.24/intro/overview.html |
|