摘要:快速入門(mén)首先,初步要做的就是快速構(gòu)建一個(gè)爬蟲(chóng)。然后把結(jié)果加入到一個(gè)隊(duì)列中。既然是入門(mén),我們肯定是先關(guān)心我們需要的。
因?yàn)楣卷?xiàng)目需求,需要做一個(gè)爬蟲(chóng)。所以我一個(gè)python小白就被拉去做了爬蟲(chóng)。花了兩周時(shí)間,拼拼湊湊總算趕出來(lái)了。所以寫(xiě)個(gè)blog做個(gè)記錄。快速入門(mén)
首先,初步要做的就是快速構(gòu)建一個(gè)爬蟲(chóng)。
配置環(huán)境 Mac下安裝1) 直接從官網(wǎng)下載
python下載官網(wǎng)
2) 是通過(guò)brew安裝
首先安裝xcode
可以選擇在App Store安裝或者使用xcode-select --install這個(gè)命令安裝
接著安裝brew
usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
把這個(gè)命令輸入終端運(yùn)行就可以安裝了
brew官網(wǎng)
接著利用brew安裝python3
brew install python3
安裝完python3以后,我們來(lái)裝scrapy。因?yàn)閜ython3是自帶pip3的,
所以如果找不到該命令的話,可以去看看python3的安裝路徑。brew是將其安裝在了usrlocalin這個(gè)目錄下。
如果pip沒(méi)安裝上的話,不要慌。我們還可以通過(guò)命令來(lái)安裝
curl -O https://bootstrap.pypa.io/get-pip.py python3 get-pip.py
接下來(lái)安裝scrapy
輸入命令pip3 install Scrapy就可以了
首先從官網(wǎng)上下載msi文件
在安裝選項(xiàng)中勾選上需要pip
然后在cmd中輸入
pip3 install Scrapy
完成
Linux安裝sudo get-apt install python36 python36-devel gcc sudo pip3 install Scrapy
兩條命令就搞定了。
因?yàn)槲业呐老x(chóng)是跑在docker上,有些鏡像可能沒(méi)有g(shù)cc。所以需要devel和gcc,否則有些包會(huì)安不上。切記
Redhat系的話,只需要把get-apt改成yum就可以了
建立項(xiàng)目 scrapy startproject demo
建立爬蟲(chóng) scrapy genspider demo_spider www.google.com
啟動(dòng)爬蟲(chóng) scrapy crwal demo_spider
當(dāng)你建立完項(xiàng)目的時(shí)候,scrapy會(huì)幫你生成一堆文件。
目錄結(jié)構(gòu)是這樣的
在你的demo項(xiàng)目中,會(huì)有個(gè)scrapy.cfg的配置文件和一個(gè)demo的文件夾
scrapy.cfg這個(gè)文件我們先暫時(shí)不去關(guān)心。我們來(lái)關(guān)心一下demo文件夾下的東西
分別是items.py,middlewares.py,pipelines.py,settings.py和一個(gè)spiders文件夾。
接著我們?nèi)?b>spiders目錄下去創(chuàng)建一個(gè)爬蟲(chóng)scrapy genspider demo_spider www.google.com
OK,爬蟲(chóng)生成功了。
我們來(lái)初步解析一下這個(gè)爬蟲(chóng)。
有一個(gè)DemoSpiderSpider的類(lèi)。很明顯,這個(gè)是我們剛才生成爬蟲(chóng)的名字為demo_spider然后后面又添加了一個(gè)Spider。
接著往下看,有個(gè)name的屬性,這個(gè)屬性很重要,我們到時(shí)候啟動(dòng)爬蟲(chóng)的時(shí)候,就要通過(guò)這個(gè)name來(lái)告知scarpy啟動(dòng)的是哪個(gè)爬蟲(chóng)
allowed_demains是用來(lái)指定,我們只爬取哪些域名下的。比如說(shuō),我在爬取google的搜索結(jié)果的時(shí)候,會(huì)爬到很多別的網(wǎng)站,這個(gè)屬性就是用來(lái)告知,除了www.google.com以外的,我都不爬取。
start_urls是用來(lái)做啟動(dòng)url,看命名就知道了。可以把Scrapy的爬取過(guò)程看成一個(gè)廣度搜索。所以它會(huì)先迅速把start_urls下的所有url都爬取一遍。然后把結(jié)果加入到一個(gè)隊(duì)列中。也是因?yàn)檫@個(gè)原因,所以在做并發(fā)爬蟲(chóng)時(shí),會(huì)讓不同的爬蟲(chóng)的start_urls不一樣。當(dāng)然還有重復(fù)的問(wèn)題要解決(笑)
接下來(lái)就是parse方法了,我們對(duì)頁(yè)面的爬取也是在這個(gè)parse中解決
初步理解了spider,我們往外層走。
我們首先來(lái)假想幾個(gè)問(wèn)題,如果我是Scrapy框架的設(shè)計(jì)者,我會(huì)這么設(shè)計(jì)這個(gè)框架。
既然是通用的爬蟲(chóng)框架,那用戶是不是應(yīng)該可以操作header之類(lèi)的,讓我的每一個(gè)爬蟲(chóng)都經(jīng)過(guò)代理,或者是設(shè)置不同的cookie。
當(dāng)當(dāng)當(dāng),所以就有了中間件。middlewares.py
我們來(lái)看看Scrapy生成的是什么樣的。
既然是入門(mén),我們肯定是先關(guān)心我們需要的。看第二張圖。有這么幾個(gè)干方法process_request,process_response,process_exception
處理request,response,exception。很好,我們就要這幾個(gè)東西。
我們可以這么理解,我們的爬蟲(chóng)爬到的每一個(gè)頁(yè)面,都會(huì)經(jīng)過(guò)這些中間件。
來(lái)看看架構(gòu)圖
所以我們的數(shù)據(jù)是經(jīng)過(guò)每一個(gè)中間件。然后中間件來(lái)決定去留。
然后我們來(lái)想想具體process_request下的情況。
第一種,我修改了代理,但是我只是改了代理,我還需要把這個(gè)數(shù)據(jù)繼續(xù)下去。返回None
第二種,這個(gè)已經(jīng)處理好了,現(xiàn)在我需要想直接把數(shù)據(jù)發(fā)給spider了,這個(gè)時(shí)候,我們就需要返回一個(gè)response了。
第三種,我想要重新調(diào)度我的request.這時(shí)候只要返回request。調(diào)度器會(huì)終止process_request,然后用這個(gè)request重新開(kāi)始。
第四種,這個(gè)數(shù)據(jù)我直接丟棄了,不想用了。直接raise一個(gè)IgnoreRequest,也就是,如果你不處理這個(gè)異常,這異常就直接扔了。當(dāng)然,你還可以選擇在process_exception去處理這個(gè)異常
Python爬蟲(chóng)從入門(mén)到放棄(十七)之 Scrapy框架中Download Middleware用法
初步理解了中間件,我們來(lái)說(shuō)說(shuō)items
在spider處理完數(shù)據(jù)以后,寫(xiě)入item中,然后就來(lái)到了這兒。
scrapy生成的代碼
怎么用呢。舉個(gè)例子,我在spider中需要存儲(chǔ)url。于是我在這個(gè)文件中就寫(xiě)入
url = scrapy.Field
接著在spider中生成這個(gè)item。然后將item["url"] = url,在處理完了以后。yield item
完成
這個(gè)數(shù)據(jù)呢,就會(huì)交給pipelines來(lái)處理
接著,我們來(lái)看看pipelines
我們和剛才一樣,思考一下,數(shù)據(jù)拿過(guò)來(lái)有幾種可能。
數(shù)據(jù)不是我的,我不處理。OK,我直接返回itme
數(shù)據(jù)是我的,但是數(shù)據(jù)錯(cuò)了。扔掉。raise一個(gè)DropItem就可以了
這邊呢,如果要寫(xiě)入數(shù)據(jù)庫(kù),玩玩寫(xiě)入的時(shí)間特別長(zhǎng),所以推薦使用Twisted來(lái)做一個(gè)異步寫(xiě)入
最后。我們來(lái)看看settings
配置文件,比如是否遵守robots.txt之類(lèi)的。當(dāng)然,你剛才寫(xiě)的所有middlewares,pipelines。都要在這兒注冊(cè)!!!!隨便給它一個(gè)不重復(fù)的數(shù)字就好了
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42263.html
摘要:快速入門(mén)接上篇學(xué)習(xí)一安裝,安裝后,我們利用一個(gè)簡(jiǎn)單的例子來(lái)熟悉如何使用創(chuàng)建一個(gè)爬蟲(chóng)項(xiàng)目。創(chuàng)建一個(gè)項(xiàng)目在已配置好的環(huán)境下輸入系統(tǒng)將在當(dāng)前目錄生成一個(gè)的項(xiàng)目文件。這部分才是業(yè)務(wù)的核心部分。提取的方式有幾種。具體代碼詳見(jiàn)入門(mén)項(xiàng)目 快速入門(mén) 接上篇Scrapy學(xué)習(xí)(一) 安裝,安裝后,我們利用一個(gè)簡(jiǎn)單的例子來(lái)熟悉如何使用Scrapy創(chuàng)建一個(gè)爬蟲(chóng)項(xiàng)目。 創(chuàng)建一個(gè)Scrapy項(xiàng)目 在已配置好的環(huán)境...
摘要:一基礎(chǔ)環(huán)境由于不是職業(yè)的開(kāi)發(fā)者,因此環(huán)境是基于的。二安裝打開(kāi)命令行工具創(chuàng)建虛擬環(huán)境,默認(rèn)情況下會(huì)創(chuàng)建目錄,所有的虛擬環(huán)境都會(huì)產(chǎn)生一個(gè)子目錄保存在此,里面包含基本程序文件以及庫(kù)文件。 目錄 基于 Python 的 Scrapy 爬蟲(chóng)入門(mén):環(huán)境搭建 基于 Python 的 Scrapy 爬蟲(chóng)入門(mén):頁(yè)面提取 基于 Python 的 Scrapy 爬蟲(chóng)入門(mén):圖片處理 作為一個(gè)全棧工程師(...
摘要:本文大部分內(nèi)容摘抄自官網(wǎng)的,看到巧妙之處則加了點(diǎn)評(píng)。,接下來(lái)的工作至此,框架已經(jīng)明確選定了,接下來(lái),我們將進(jìn)一步研讀的文檔,研究怎樣把的封裝成需要的。,文檔修改歷史,首次發(fā)布 showImg(https://segmentfault.com/img/bVx6ZU); 1,引言 在《Scrapy的架構(gòu)初探》一文,我基于爬蟲(chóng)開(kāi)發(fā)的經(jīng)驗(yàn)對(duì)Scrapy官網(wǎng)文章作了點(diǎn)評(píng)和解讀,事件驅(qū)動(dòng)的異步處理...
摘要:本文內(nèi)容爬取豆瓣電影頁(yè)面內(nèi)容,字段包含排名,片名,導(dǎo)演,一句話描述有的為空,評(píng)分,評(píng)價(jià)人數(shù),上映時(shí)間,上映國(guó)家,類(lèi)別抓取數(shù)據(jù)存儲(chǔ)介紹爬蟲(chóng)框架教程一入門(mén)創(chuàng)建項(xiàng)目創(chuàng)建爬蟲(chóng)注意,爬蟲(chóng)名不能和項(xiàng)目名一樣應(yīng)對(duì)反爬策略的配置打開(kāi)文件,將修改為。 本文內(nèi)容 爬取豆瓣電影Top250頁(yè)面內(nèi)容,字段包含:排名,片名,導(dǎo)演,一句話描述 有的為空,評(píng)分,評(píng)價(jià)人數(shù),上映時(shí)間,上映國(guó)家,類(lèi)別 抓取數(shù)據(jù)存儲(chǔ) ...
摘要:本文基于,平臺(tái)完整項(xiàng)目代碼安裝安裝官網(wǎng)下載注意環(huán)境變量是否配置成功安裝為了安裝順利,請(qǐng)備好梯子安裝過(guò)程中注意以下報(bào)錯(cuò)信息解決辦法下載對(duì)應(yīng)版本的文件表示版本表示位下載后在文件目錄下執(zhí)行文件名創(chuàng)建項(xiàng)目創(chuàng)建創(chuàng)建在項(xiàng)目跟目錄執(zhí)行配置文件 本文基于python 3.7.0,win10平臺(tái); 2018-08完整項(xiàng)目代碼:https://github.com/NameHewei/python-scr...
閱讀 2967·2023-04-25 19:45
閱讀 2689·2021-11-19 09:40
閱讀 689·2021-10-14 09:49
閱讀 2666·2021-09-30 09:47
閱讀 2200·2021-09-26 09:55
閱讀 1219·2021-09-22 16:01
閱讀 2808·2019-08-30 14:19
閱讀 705·2019-08-29 16:44