日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python老男孩scrapy视频刷课记录

發布時間:2023/12/14 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python老男孩scrapy视频刷课记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python全棧3 day96 02 抽屜示例:初識Scrapy并獲取新聞標題:主要講了scrapy的生成框架結構scrapy startproject day96、生成爬蟲模板(cd scrapy;scrapy genspider example)、單頁parse的xpath語法(//全局變量下的子孫,.//當前子孫變量,)。

python全棧3 day96 03 抽屜示例:遞歸獲取所有頁碼:分為兩部分,第一部分講了自己進行通過對url進行md5編碼,縮短url長度到固定長度,鏈接去重,第二部分主要講yield用于迭代以及depth_limit參數控制迭代深度。

python全棧3 day96 04 抽屜示例:基于pipeline實現標題和URL持久化。同樣分為了兩部分,定義了格式化的Item類。pipeline注意要注冊,不同的pipelines要根據spider.name進行判斷是否進行處理。

python全棧3 day97 01 Scrapy上節回顧。注意spider定義好域名限制allowed_domain = ["baidu.com"],遞歸時候會先判斷域名。同時還要注意start_requests可以重寫覆蓋等。注意response.meta中也可以有depth,是爬蟲中保存變量很重要的東西。

python全棧3 day97 02 去除重復URL。第一部分講了select相關的內容,同時注意//a/[@id]代表有id的a,//a/@id代表取a下面的id,還有a[contains(@href,"www.baidu.com")]一些條件判斷。

第二部分講了鏈接去重RFPDupeFilter,其中著重講了cls的使用。from_settings是classmethod實例化時使用obj = ClassA.from_settings()進行實例化,返回結果為cls()與staticmethod不同,staticmethod不帶cls參數。去重是借用文件request.seen進行去重的,擴展可以使用redis,緩存等。

python全棧3 day97 03 pipeline補充。open_spider打開io鏈接、close_spider關閉io鏈接以及from_crawler創建對象并引入配置文件,__init__進行數據的初始化。最后一個pipeline注意raise DropItem()

python全棧3 day97 04 自動登錄抽屜并點贊。主要講了在Scrapy中使用Post方式進行登錄點贊的操作。這里的自動登錄抽屜網中沒有顯示驗證碼等。登錄時候用的是yield Request(method="Post")的post方法賬戶密碼放入了post請求體,同時點贊的功能也是post做的。

python全棧3 day97 05 scrapy框架擴展。這節課的信息量很大,包括了scrapy的Extension擴展、hook(鉤子)的概念、以及進一步的信號量signal的注冊問題。

  • Extensions Extensions在爬蟲啟動時候進行了初始化操作。通過與signals進行注冊,實現了hook。
  • Signals。signals與twisted的deffer搭配使用,因此經常會在源碼core的engine.py中見到這些信號量,包括spider_open,request_reached_downloader等。這幾個信號量同時也可以在Extension里使用,和deffer同理。都是hook方法,將自定義的方法或deffer傳到爬蟲中。
  • python全棧3 day97 06 配置文件。

    講了以下幾個參數:

  • USE_AGENT請求頭,BOT_NAME爬蟲名稱。
  • AUTOTHROTTLE。自動限制
  • DEPTH_PRIORTY。深度搜索還是廣度優先搜索。
  • COOKIES_ENABLE。請求返回時候是否帶著cookie。
  • CONCURRENT_REQUEST PER_DOMAIN PER_IP對應目標網站的域名或者ip的并發數。
  • TALENTCONSOLE_ENABLE。這個很有特色,可以在爬蟲運行時候,在同一個機器上面運行運行命令:talent 127.0.0.1 6359然后輸入命令監控爬蟲的state狀態。
  • python全棧3 day98 01 Scrapy配置之自動限速以及緩存

  • 繼續了上節課的配置,講了自動限速部分的源碼。重要。在throttle.py中進行定義。
  • 緩存。默認沒開啟,為了更快,在“更近”的地方拿到數據。一般就是指直接放在內存中或文件lru中,因為數據庫操作就是IO操作,需要時間。HTTPCATHE_ENABLE/POLICE策略/DIR目錄/STAGE,為了再次運行爬蟲時候,不鏈接網絡,從本地緩存中取出。
  • 如果設置緩存,可以使用RFC2616策略緩存而不是DUMMY策略。
  • python全棧3 day98 02 Scrapy之默認代理以及擴展代理

    主要就是講了原生代理很難用,建議自定制,同時注意如果代理有密碼的情況加header參數 proxy-authority :? basic base64(name passwd)

    python全棧3 day98 03 Scrapy之自定義Https證書

    一般不常用

    python全棧3 day98 04 Scrapy配置之下載中間件

    今天看了下進度,感覺有一點點慢,在離職前能把scrapy的視頻看完,最深的目標是把scrapy的core里面twisted相關搞清楚,然后同步的早上要開始做leetcode了,下午可以用來學習,網上開發項目作總結,這個順序應該比較容易接受,因為同一個形式基本上搞三個小時就比較累了。一定記住從現在開始每天都要寫博客,堅持每天寫代碼,就像2011年開始那樣每天都在堅持健身中度過,新的十年,從2020年開始,寫程序就是我的健身,要用于去嘗試,去做記錄,去積累,同時不忘記健身,不給自己太大壓力,穩定住雙向情感障礙,即可。就這樣!今天還算可以,先睡覺了。

    python全棧3 day98 04 Scrapy配置之下載中間件

    注意一下middleware中的兩個函數process_request與process_response。

  • process_request返回None繼續執行,返回Request重新調度,返回Response則到process_response中執行,raise IgnoreRequest可以掛起新的異常。
  • 執行兩個函數的時候,按照12344321的順序執行。
  • process_exception處理過程中異常情況。
  • python全棧3 day98 05 Scrapy配置之爬蟲中間件

  • 四個函數process_start_requests,process_spider_input,processor_spider_output.processor_spider_exception在爬蟲中間件中執行。
  • 同時注意這些中間件都是在scrapy.core.spidermw.SpiderMiddlewareManager和scrapy.core.downloader.middleware.DownMiddlewareManager中_add_middleware根據has_attr屬性進行加載。
  • python全棧3 day98 06 Scrapy配置之自定義scrapy命令

    主要講的是CrawlerProcessor和CrawlerRunner等類加載爬蟲,然后運行爬蟲。

    python全棧3 day98 07 Scrapy源碼流程簡述

    這部分主要從命令行開始講起,從CrawlerProcess和它的父類CrawlerRunner開始講,一直引申到twisted的deffer來實現異步的網頁下載。我按照視頻寫了一邊twisted異步下載3個鏈接的test.py感覺就是借助twisted讓回調代碼寫的好看一些,主要是用defer.DeferredList來加載任務,reactor來啟動run和終止stop。

    另外清楚了爬蟲幾個隱藏的重要類,按照父類往下:

    ?

  • cmdline.execute()。嚴格來說第一層不是一個類,而是一個方法。我們運行爬蟲時候在操作系統中敲scrapy,從這里開始比如scrapy crawl spidername,那么就會進入execute()方法,這個方法會有一個變量cmds,來判斷咱們敲的子命令是什么是runspider還是crawl,得到cmd變量也就是初始化了下面3的具體命令(這里就是crawl.Command而不是runspider.Command),就在這里初始化了CrawlerProcess到變量cmd.crawler_process。
  • ScrapyCommand。成員函數主要是各種命令號的方法。最重要的成員變量:crawler_process爬蟲進程變量。可以說這個變量如同一個進程,爬蟲、引擎是跑在里面的。
  • 各個命令中的Command類。繼承ScrapyCommand,其中run方法是最標準的爬蟲啟動方法,在1中通過cmd調用了這里的run()。在run()里面,crawler_process調用了兩個方法crawler_process.crawl(spname,**opts.spargs),和crawler_process.start()。start方法很簡單,里面就是一個twisted的reactor.run(),也就是激活。那么重點就是crawl方法了,這里會把蜘蛛、引擎開啟,然后開始跑。
  • Spider類??吹竭@里我們就有些眼熟了,這不就是我們平時寫自定義爬蟲集成的父類嘛。不過出現在這一層還是有一些唐突,那么我們在3中說crawler_process.crawl(spname,**opts.spargs)里面參數spname就是這個我們寫的爬蟲,不過具體的加載爬蟲過程我們暫且不表,先繼續往下說Crawler。大家這里一定要注意,Spider和Crawler是兩個完全不同的概念,雖然我們平時說爬蟲爬蟲,但是在scrapy里面,Crawler應該形象的理解為一個“活生生的蟲子”,有引擎支持它運行,而Spider應該只理解成為一個“抓取路徑”,它最多算一個“蜘蛛殼子”,比Crawler要“小的多”。因為Crawler類里面會激活引擎類、和Spider"蜘蛛殼子"類,以及加載各種中間件和pipeline。因此這里要作區分,我們的這篇博文主要分析的也是Crawler類的總體行為。
  • Crawler類。進入到crawler_process.crawl(spname,**opts.spargs),這里我們傳入的是一個Spider類,在這里會創建一個crawler實例,然后在self._crawl中運行crawler.crawl,在這里我們終于見到了@defer.inlineCallbacks注解,終于與twisted有點關系了,在這里有兩個方法_create_spider,_create_engine分別創建了“Spider”爬蟲類和"Engine"引擎類然后引擎開始啟動爬蟲,調度爬蟲的start_requests方法。
  • ExecutionEngine類。這個類基本上就是twisted用到的地方了。從5中的“開始啟動爬蟲”也就是open_spider方法,再往下不斷將爬蟲鏈接發到各個組件之間,基本上數據在各個組件中相互交互用到的就是twisted了。
  • 總結

    以上是生活随笔為你收集整理的python老男孩scrapy视频刷课记录的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。