生活随笔
收集整理的這篇文章主要介紹了
python老男孩scrapy视频刷课记录
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
python全棧3 day96 02 抽屜示例:初識(shí)Scrapy并獲取新聞標(biāo)題:主要講了scrapy的生成框架結(jié)構(gòu)scrapy startproject day96、生成爬蟲(chóng)模板(cd scrapy;scrapy genspider example)、單頁(yè)parse的xpath語(yǔ)法(//全局變量下的子孫,.//當(dāng)前子孫變量,)。
python全棧3 day96 03 抽屜示例:遞歸獲取所有頁(yè)碼:分為兩部分,第一部分講了自己進(jìn)行通過(guò)對(duì)url進(jìn)行md5編碼,縮短url長(zhǎng)度到固定長(zhǎng)度,鏈接去重,第二部分主要講yield用于迭代以及depth_limit參數(shù)控制迭代深度。
python全棧3 day96 04 抽屜示例:基于pipeline實(shí)現(xiàn)標(biāo)題和URL持久化。同樣分為了兩部分,定義了格式化的Item類。pipeline注意要注冊(cè),不同的pipelines要根據(jù)spider.name進(jìn)行判斷是否進(jìn)行處理。
python全棧3 day97 01 Scrapy上節(jié)回顧。注意spider定義好域名限制allowed_domain = ["baidu.com"],遞歸時(shí)候會(huì)先判斷域名。同時(shí)還要注意start_requests可以重寫(xiě)覆蓋等。注意response.meta中也可以有depth,是爬蟲(chóng)中保存變量很重要的東西。
python全棧3 day97 02 去除重復(fù)URL。第一部分講了select相關(guān)的內(nèi)容,同時(shí)注意//a/[@id]代表有id的a,//a/@id代表取a下面的id,還有a[contains(@href,"www.baidu.com")]一些條件判斷。
第二部分講了鏈接去重RFPDupeFilter,其中著重講了cls的使用。from_settings是classmethod實(shí)例化時(shí)使用obj = ClassA.from_settings()進(jìn)行實(shí)例化,返回結(jié)果為cls()與staticmethod不同,staticmethod不帶cls參數(shù)。去重是借用文件request.seen進(jìn)行去重的,擴(kuò)展可以使用redis,緩存等。
python全棧3 day97 03 pipeline補(bǔ)充。open_spider打開(kāi)io鏈接、close_spider關(guān)閉io鏈接以及from_crawler創(chuàng)建對(duì)象并引入配置文件,__init__進(jìn)行數(shù)據(jù)的初始化。最后一個(gè)pipeline注意raise DropItem()
python全棧3 day97 04 自動(dòng)登錄抽屜并點(diǎn)贊。主要講了在Scrapy中使用Post方式進(jìn)行登錄點(diǎn)贊的操作。這里的自動(dòng)登錄抽屜網(wǎng)中沒(méi)有顯示驗(yàn)證碼等。登錄時(shí)候用的是yield Request(method="Post")的post方法賬戶密碼放入了post請(qǐng)求體,同時(shí)點(diǎn)贊的功能也是post做的。
python全棧3 day97 05 scrapy框架擴(kuò)展。這節(jié)課的信息量很大,包括了scrapy的Extension擴(kuò)展、hook(鉤子)的概念、以及進(jìn)一步的信號(hào)量signal的注冊(cè)問(wèn)題。
Extensions Extensions在爬蟲(chóng)啟動(dòng)時(shí)候進(jìn)行了初始化操作。通過(guò)與signals進(jìn)行注冊(cè),實(shí)現(xiàn)了hook。Signals。signals與twisted的deffer搭配使用,因此經(jīng)常會(huì)在源碼core的engine.py中見(jiàn)到這些信號(hào)量,包括spider_open,request_reached_downloader等。這幾個(gè)信號(hào)量同時(shí)也可以在Extension里使用,和deffer同理。都是hook方法,將自定義的方法或deffer傳到爬蟲(chóng)中。
python全棧3 day97 06 配置文件。
講了以下幾個(gè)參數(shù):
USE_AGENT請(qǐng)求頭,BOT_NAME爬蟲(chóng)名稱。AUTOTHROTTLE。自動(dòng)限制DEPTH_PRIORTY。深度搜索還是廣度優(yōu)先搜索。COOKIES_ENABLE。請(qǐng)求返回時(shí)候是否帶著cookie。CONCURRENT_REQUEST PER_DOMAIN PER_IP對(duì)應(yīng)目標(biāo)網(wǎng)站的域名或者ip的并發(fā)數(shù)。TALENTCONSOLE_ENABLE。這個(gè)很有特色,可以在爬蟲(chóng)運(yùn)行時(shí)候,在同一個(gè)機(jī)器上面運(yùn)行運(yùn)行命令:talent 127.0.0.1 6359然后輸入命令監(jiān)控爬蟲(chóng)的state狀態(tài)。
python全棧3 day98 01 Scrapy配置之自動(dòng)限速以及緩存
繼續(xù)了上節(jié)課的配置,講了自動(dòng)限速部分的源碼。重要。在throttle.py中進(jìn)行定義。緩存。默認(rèn)沒(méi)開(kāi)啟,為了更快,在“更近”的地方拿到數(shù)據(jù)。一般就是指直接放在內(nèi)存中或文件lru中,因?yàn)閿?shù)據(jù)庫(kù)操作就是IO操作,需要時(shí)間。HTTPCATHE_ENABLE/POLICE策略/DIR目錄/STAGE,為了再次運(yùn)行爬蟲(chóng)時(shí)候,不鏈接網(wǎng)絡(luò),從本地緩存中取出。如果設(shè)置緩存,可以使用RFC2616策略緩存而不是DUMMY策略。
python全棧3 day98 02 Scrapy之默認(rèn)代理以及擴(kuò)展代理
主要就是講了原生代理很難用,建議自定制,同時(shí)注意如果代理有密碼的情況加header參數(shù) proxy-authority :? basic base64(name passwd)
python全棧3 day98 03 Scrapy之自定義Https證書(shū)
一般不常用
python全棧3 day98 04 Scrapy配置之下載中間件
今天看了下進(jìn)度,感覺(jué)有一點(diǎn)點(diǎn)慢,在離職前能把scrapy的視頻看完,最深的目標(biāo)是把scrapy的core里面twisted相關(guān)搞清楚,然后同步的早上要開(kāi)始做leetcode了,下午可以用來(lái)學(xué)習(xí),網(wǎng)上開(kāi)發(fā)項(xiàng)目作總結(jié),這個(gè)順序應(yīng)該比較容易接受,因?yàn)橥粋€(gè)形式基本上搞三個(gè)小時(shí)就比較累了。一定記住從現(xiàn)在開(kāi)始每天都要寫(xiě)博客,堅(jiān)持每天寫(xiě)代碼,就像2011年開(kāi)始那樣每天都在堅(jiān)持健身中度過(guò),新的十年,從2020年開(kāi)始,寫(xiě)程序就是我的健身,要用于去嘗試,去做記錄,去積累,同時(shí)不忘記健身,不給自己太大壓力,穩(wěn)定住雙向情感障礙,即可。就這樣!今天還算可以,先睡覺(jué)了。
python全棧3 day98 04 Scrapy配置之下載中間件
注意一下middleware中的兩個(gè)函數(shù)process_request與process_response。
process_request返回None繼續(xù)執(zhí)行,返回Request重新調(diào)度,返回Response則到process_response中執(zhí)行,raise IgnoreRequest可以掛起新的異常。執(zhí)行兩個(gè)函數(shù)的時(shí)候,按照12344321的順序執(zhí)行。process_exception處理過(guò)程中異常情況。
python全棧3 day98 05 Scrapy配置之爬蟲(chóng)中間件
四個(gè)函數(shù)process_start_requests,process_spider_input,processor_spider_output.processor_spider_exception在爬蟲(chóng)中間件中執(zhí)行。同時(shí)注意這些中間件都是在scrapy.core.spidermw.SpiderMiddlewareManager和scrapy.core.downloader.middleware.DownMiddlewareManager中_add_middleware根據(jù)has_attr屬性進(jìn)行加載。
python全棧3 day98 06 Scrapy配置之自定義scrapy命令
主要講的是CrawlerProcessor和CrawlerRunner等類加載爬蟲(chóng),然后運(yùn)行爬蟲(chóng)。
python全棧3 day98 07 Scrapy源碼流程簡(jiǎn)述
這部分主要從命令行開(kāi)始講起,從CrawlerProcess和它的父類CrawlerRunner開(kāi)始講,一直引申到twisted的deffer來(lái)實(shí)現(xiàn)異步的網(wǎng)頁(yè)下載。我按照視頻寫(xiě)了一邊twisted異步下載3個(gè)鏈接的test.py感覺(jué)就是借助twisted讓回調(diào)代碼寫(xiě)的好看一些,主要是用defer.DeferredList來(lái)加載任務(wù),reactor來(lái)啟動(dòng)run和終止stop。
另外清楚了爬蟲(chóng)幾個(gè)隱藏的重要類,按照父類往下:
?
cmdline.execute()。嚴(yán)格來(lái)說(shuō)第一層不是一個(gè)類,而是一個(gè)方法。我們運(yùn)行爬蟲(chóng)時(shí)候在操作系統(tǒng)中敲scrapy,從這里開(kāi)始比如scrapy crawl spidername,那么就會(huì)進(jìn)入execute()方法,這個(gè)方法會(huì)有一個(gè)變量cmds,來(lái)判斷咱們敲的子命令是什么是runspider還是crawl,得到cmd變量也就是初始化了下面3的具體命令(這里就是crawl.Command而不是runspider.Command),就在這里初始化了CrawlerProcess到變量cmd.crawler_process。ScrapyCommand。成員函數(shù)主要是各種命令號(hào)的方法。最重要的成員變量:crawler_process爬蟲(chóng)進(jìn)程變量。可以說(shuō)這個(gè)變量如同一個(gè)進(jìn)程,爬蟲(chóng)、引擎是跑在里面的。各個(gè)命令中的Command類。繼承ScrapyCommand,其中run方法是最標(biāo)準(zhǔn)的爬蟲(chóng)啟動(dòng)方法,在1中通過(guò)cmd調(diào)用了這里的run()。在run()里面,crawler_process調(diào)用了兩個(gè)方法crawler_process.crawl(spname,**opts.spargs),和crawler_process.start()。start方法很簡(jiǎn)單,里面就是一個(gè)twisted的reactor.run(),也就是激活。那么重點(diǎn)就是crawl方法了,這里會(huì)把蜘蛛、引擎開(kāi)啟,然后開(kāi)始跑。Spider類。看到這里我們就有些眼熟了,這不就是我們平時(shí)寫(xiě)自定義爬蟲(chóng)集成的父類嘛。不過(guò)出現(xiàn)在這一層還是有一些唐突,那么我們?cè)?中說(shuō)crawler_process.crawl(spname,**opts.spargs)里面參數(shù)spname就是這個(gè)我們寫(xiě)的爬蟲(chóng),不過(guò)具體的加載爬蟲(chóng)過(guò)程我們暫且不表,先繼續(xù)往下說(shuō)Crawler。大家這里一定要注意,Spider和Crawler是兩個(gè)完全不同的概念,雖然我們平時(shí)說(shuō)爬蟲(chóng)爬蟲(chóng),但是在scrapy里面,Crawler應(yīng)該形象的理解為一個(gè)“活生生的蟲(chóng)子”,有引擎支持它運(yùn)行,而Spider應(yīng)該只理解成為一個(gè)“抓取路徑”,它最多算一個(gè)“蜘蛛殼子”,比Crawler要“小的多”。因?yàn)镃rawler類里面會(huì)激活引擎類、和Spider"蜘蛛殼子"類,以及加載各種中間件和pipeline。因此這里要作區(qū)分,我們的這篇博文主要分析的也是Crawler類的總體行為。Crawler類。進(jìn)入到crawler_process.crawl(spname,**opts.spargs),這里我們傳入的是一個(gè)Spider類,在這里會(huì)創(chuàng)建一個(gè)crawler實(shí)例,然后在self._crawl中運(yùn)行crawler.crawl,在這里我們終于見(jiàn)到了@defer.inlineCallbacks注解,終于與twisted有點(diǎn)關(guān)系了,在這里有兩個(gè)方法_create_spider,_create_engine分別創(chuàng)建了“Spider”爬蟲(chóng)類和"Engine"引擎類然后引擎開(kāi)始啟動(dòng)爬蟲(chóng),調(diào)度爬蟲(chóng)的start_requests方法。ExecutionEngine類。這個(gè)類基本上就是twisted用到的地方了。從5中的“開(kāi)始啟動(dòng)爬蟲(chóng)”也就是open_spider方法,再往下不斷將爬蟲(chóng)鏈接發(fā)到各個(gè)組件之間,基本上數(shù)據(jù)在各個(gè)組件中相互交互用到的就是twisted了。
總結(jié)
以上是生活随笔為你收集整理的python老男孩scrapy视频刷课记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。