版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章提升網(wǎng)絡(luò)爬蟲速度《Python網(wǎng)絡(luò)爬蟲基礎(chǔ)教程》學(xué)習(xí)目標(biāo)/Target了解網(wǎng)絡(luò)爬蟲速度的提升方案,能夠說出多線程和協(xié)程的區(qū)別熟悉多線程爬蟲的運(yùn)行流程,能夠歸納多線程爬蟲的運(yùn)行流程掌握多線程爬蟲的實(shí)現(xiàn)技術(shù),能夠使用threading和queue模塊實(shí)現(xiàn)多線程爬蟲熟悉協(xié)程爬蟲的運(yùn)行流程,能夠歸納協(xié)程爬蟲的運(yùn)行流程掌握協(xié)程爬蟲的實(shí)現(xiàn)技術(shù),能夠使用asyncio和aiohttp庫實(shí)現(xiàn)協(xié)程爬蟲章節(jié)概述/Summary網(wǎng)絡(luò)環(huán)境不穩(wěn)定導(dǎo)致如下情況出現(xiàn):當(dāng)基于單線程的網(wǎng)絡(luò)爬蟲采集網(wǎng)頁數(shù)據(jù)時(shí),如果有一個(gè)網(wǎng)頁的響應(yīng)速度慢或者網(wǎng)頁一直處于加載狀態(tài)中,那么網(wǎng)絡(luò)爬蟲需要等待該網(wǎng)頁加載完才能繼續(xù)采集。這顯然降低了網(wǎng)絡(luò)爬蟲的運(yùn)行速度。為解決此問題,提升網(wǎng)絡(luò)爬蟲的運(yùn)行速度,我們可以在網(wǎng)絡(luò)爬蟲程序中加入多線程、協(xié)程等技術(shù),實(shí)現(xiàn)同時(shí)抓取或解析多個(gè)網(wǎng)頁的數(shù)據(jù)。目錄/Contents6.16.26.3網(wǎng)絡(luò)爬蟲速度提升方案多線程爬蟲協(xié)程爬蟲6.4實(shí)踐項(xiàng)目:采集黑馬頭條的評論列表網(wǎng)路爬蟲速度提升方案6.1了解網(wǎng)絡(luò)爬蟲速度的提升方案,能夠說出多線程和協(xié)程的區(qū)別學(xué)習(xí)目標(biāo)6.1網(wǎng)絡(luò)爬蟲速度提升方案影響網(wǎng)絡(luò)爬蟲速度的因素主要是網(wǎng)絡(luò)I/O操作,原因在于網(wǎng)絡(luò)I/O操作的速度趕不上CPU的處理速度。網(wǎng)絡(luò)I/O操作可以理解為在網(wǎng)絡(luò)協(xié)議的支持下,一個(gè)主機(jī)通過網(wǎng)絡(luò)與其他主機(jī)進(jìn)行數(shù)據(jù)傳輸?shù)倪^程。例如下載圖片就是一個(gè)網(wǎng)絡(luò)I/O操作。試想一下,網(wǎng)絡(luò)爬蟲正在執(zhí)行下載大量圖片的任務(wù),它在下載圖片的過程中會一直處于阻塞狀態(tài)。這會導(dǎo)致CPU當(dāng)前處于空閑狀態(tài),直到下載完圖片后才能讓CPU調(diào)度其他任務(wù)。這就造成了CPU的浪費(fèi)。在Python中,提升網(wǎng)絡(luò)爬蟲程序運(yùn)行速度主要有三種方案,分別是多進(jìn)程、多線程和協(xié)程。6.1網(wǎng)絡(luò)爬蟲速度提升方案多進(jìn)程多線程協(xié)程多進(jìn)程可以利用多核CPU,將任務(wù)運(yùn)行到不同的CPU上,實(shí)現(xiàn)同時(shí)執(zhí)行多個(gè)任務(wù)。進(jìn)程的數(shù)量取決于計(jì)算機(jī)CPU的處理器個(gè)數(shù)。6.1網(wǎng)絡(luò)爬蟲速度提升方案多進(jìn)程多線程協(xié)程多線程是以并發(fā)(一個(gè)時(shí)間段內(nèi)發(fā)生若干事情的情況)的方式執(zhí)行任務(wù)的,它不能實(shí)現(xiàn)真正地同時(shí)執(zhí)行多個(gè)任務(wù),而是通過線程的快速切換提升程序的運(yùn)行速度。6.1網(wǎng)絡(luò)爬蟲速度提升方案多進(jìn)程多線程協(xié)程協(xié)程是以異步并發(fā)的方式執(zhí)行任務(wù)的,由于協(xié)程無需系統(tǒng)內(nèi)核的上下文切換,所以程序在執(zhí)行過程中可以避免大量的等待時(shí)間。6.1網(wǎng)絡(luò)爬蟲速度提升方案6.1網(wǎng)絡(luò)爬蟲速度提升方案網(wǎng)絡(luò)爬蟲如何選擇多進(jìn)程、多線程和協(xié)程呢?多進(jìn)程適用于CPU密集型的代碼,如循環(huán)處理、大量的密集并行計(jì)算等;多線程適用于I/O密集型的代碼,如文件處理、網(wǎng)絡(luò)交互等;協(xié)程適用于大量不需要CPU的操作(如網(wǎng)絡(luò)I/O)。結(jié)合多線程、多進(jìn)程和多協(xié)程的特點(diǎn)和用途,一般會選擇多線程和協(xié)程技術(shù)開發(fā)網(wǎng)絡(luò)爬蟲程序。6.1網(wǎng)絡(luò)爬蟲速度提升方案多學(xué)一招進(jìn)程是系統(tǒng)進(jìn)行資源分配的最小單位,它擁有自己的內(nèi)存空間,每個(gè)進(jìn)程之間的數(shù)據(jù)不共享。線程是系統(tǒng)調(diào)度執(zhí)行的最小單位,它不能獨(dú)立存在,必須依賴進(jìn)程,每個(gè)線程之間的數(shù)據(jù)可以共享。協(xié)程是用戶態(tài)的輕量級線程,調(diào)度由用戶控制,擁有自己的寄存器上下文和棧。進(jìn)程、線程和協(xié)程多線程爬蟲6.2熟悉多線程爬蟲的運(yùn)行流程,能夠歸納多線程爬蟲的運(yùn)行流程學(xué)習(xí)目標(biāo)6.2.1多線程爬蟲流程分析6.2.1多線程爬蟲流程分析多線程爬蟲會將多線程技術(shù)運(yùn)用在抓取網(wǎng)頁和解析網(wǎng)頁上,它的運(yùn)行流程圖如右所示。6.2.1多線程爬蟲流程分析(1)構(gòu)建一個(gè)網(wǎng)址隊(duì)列,用于存放網(wǎng)絡(luò)爬蟲待抓取數(shù)據(jù)的所有網(wǎng)址。(2)開啟多個(gè)線程抓取網(wǎng)頁。(3)將抓取到的網(wǎng)頁源碼存儲到網(wǎng)頁源碼隊(duì)列中。(4)開啟多個(gè)線程對網(wǎng)頁源碼隊(duì)列中的網(wǎng)頁數(shù)據(jù)進(jìn)行解析。(5)將解析之后的數(shù)據(jù)存儲到網(wǎng)頁數(shù)據(jù)隊(duì)列中。(6)將網(wǎng)頁數(shù)據(jù)隊(duì)列中的數(shù)據(jù)進(jìn)行存儲。多線程爬蟲的運(yùn)行流程如下。掌握多線程爬蟲的實(shí)現(xiàn)技術(shù),能夠使用threading和queue模塊實(shí)現(xiàn)多線程爬蟲學(xué)習(xí)目標(biāo)6.2.2多線程爬蟲實(shí)現(xiàn)技術(shù)6.2.2多線程爬蟲實(shí)現(xiàn)技術(shù)由于線程具有獨(dú)立運(yùn)行、狀態(tài)不可預(yù)測、執(zhí)行順序隨機(jī)的特點(diǎn),當(dāng)多個(gè)線程同時(shí)訪問同一份資源時(shí),容易導(dǎo)致程序產(chǎn)生不可預(yù)料的結(jié)果,為此多線程爬蟲使用隊(duì)列管理網(wǎng)址或網(wǎng)頁源碼。Python中分別提供了支持多線程和隊(duì)列的內(nèi)置模塊threading和queue。
threading模塊模塊threading中定義了Thread類,該類專門用于管理線程。若希望在程序中創(chuàng)建一個(gè)線程(也稱子線程),需要實(shí)例化一個(gè)Thread類的對象。6.2.2多線程爬蟲實(shí)現(xiàn)技術(shù)Thread(group=None,target=None,name=None,args=(),kwargs={},*,daemon=None)group:必須為None,目前未實(shí)現(xiàn),是為以后的擴(kuò)展功能保留的預(yù)留參數(shù)。target:表示子線程的功能函數(shù),用于為子線程分派任務(wù)。name:線程的名稱,默認(rèn)由“Thread-N”形式組成,其中N為十進(jìn)制數(shù)。args:target指定函數(shù)的位置參數(shù)。kwargs:target指定函數(shù)的關(guān)鍵字參數(shù)。daemon:表示是否將線程設(shè)為守護(hù)線程(在后臺運(yùn)行的一類特殊線程,用于執(zhí)行特定的任務(wù))6.2.2多線程爬蟲實(shí)現(xiàn)技術(shù)classMyThread(Thread):def__init__(self,num):super().__init__()='線程'+str(num)defrun(self):message=+'運(yùn)行'print(message)thread_two=MyThread(1)方式二fromthreadingimportThread#任務(wù)函數(shù)deftask():print('線程運(yùn)行')thread_one=Thread(target=task)
方式一Python創(chuàng)建線程的方式。
Queue模塊Python的queue模塊中提供了3個(gè)表示同步的、線程安全的隊(duì)列的類,這些隊(duì)列類包括Queue類、LifoQueue類和PriorityQueue類,隊(duì)列是線程間常用的交換數(shù)據(jù)的形式。6.2.2多線程爬蟲實(shí)現(xiàn)技術(shù)fromqueueimportQueuequeue_object=Queue(10)foriinrange(4):queue_object.put(i)whilenotqueue_object.empty():print(queue_object.get())Queue類Queue類表示一個(gè)基本的FIFO(FirstInFirstOut)隊(duì)列,即先進(jìn)先出,也就是說先存入隊(duì)列中的元素先取出來。
Queue模塊6.2.2多線程爬蟲實(shí)現(xiàn)技術(shù)fromqueueimportLifoQueuelifo_queue=LifoQueue()foriinrange(4):lifo_queue.put(i)whilenotlifo_queue.empty():print(lifo_queue.get())LifoQueue類LifoQueue類表示一個(gè)LIFO(LastinFirstOut)隊(duì)列,與棧類似,即后進(jìn)先出,也就是說后存入隊(duì)列中的元素先取出來。
Queue模塊6.2.2多線程爬蟲實(shí)現(xiàn)技術(shù)fromqueueimportPriorityQueueclassJob:def__init__(self,level,description):self.level=levelself.description=descriptionreturndef__lt__(self,other):returnself.level<other.levelpriority_queue=PriorityQueue()priority_queue.put(Job(5,'中級別工作'))priority_queue.put(Job(10,'低級別工作'))priority_queue.put(Job(1,'重要工作'))whilenotpriority_queue.empty():next_job=priority_queue.get()print('開始工作:',next_job.description)PriorityQueue類PriorityQueue類表示優(yōu)先級隊(duì)列,它按級別順序取出元素,級別最低的最先取出。6.2.2多線程爬蟲實(shí)現(xiàn)技術(shù)為了便于管理隊(duì)列的元素,Queue類中提供了一些常用方法,這些方法的說明如下表所示。方法說明qsize()返回隊(duì)列的大小empty()如果隊(duì)列為空,返回True,否則為Falsefull()如果隊(duì)列滿了,返回True,否則為Falseget()從隊(duì)頭獲取并刪除第一個(gè)元素put()將一個(gè)元素放入隊(duì)列末尾join()阻塞線程,直至隊(duì)列中所有元素被處理完task_done()在完成一項(xiàng)工作之后,task_done()函數(shù)向任務(wù)已經(jīng)完成的隊(duì)列發(fā)送一個(gè)信號get_nowait()立即取出一個(gè)元素,無需額外等待put_nowait()立即放入一個(gè)元素,無需額外等待掌握多線程爬蟲的實(shí)現(xiàn)技術(shù),能夠使用多線程技術(shù)抓取黑馬程序員論壇網(wǎng)站數(shù)據(jù)學(xué)習(xí)目標(biāo)6.2.3多線程爬蟲基本示例6.2.3多線程爬蟲基本示例以黑馬程序員論壇網(wǎng)站為例,帶領(lǐng)大家一起使用threading和queue模塊實(shí)現(xiàn)多線程爬蟲,并讓多線程爬蟲采集Python技術(shù)交流版塊中所有帖子的文章標(biāo)題、文章作者、文章鏈接以及發(fā)布時(shí)間。案例需求6.2.3多線程爬蟲基本示例案例步驟案例分析定義HeiMa類構(gòu)造請求網(wǎng)址定義數(shù)據(jù)存儲方法定義提取方法定義抓取方法6.2.3多線程爬蟲基本示例執(zhí)行代碼運(yùn)行代碼后,可以看到在代碼文件同級目錄下添加了一個(gè)新的文件thread-heima.json,該文件中存儲了Python技術(shù)交流版塊中所有貼子的文章標(biāo)題、文章作者、文章鏈接和發(fā)布時(shí)間。[單擊查看源碼]熟悉多線程爬蟲性能分析,能夠計(jì)算出多線程爬蟲耗時(shí)時(shí)間學(xué)習(xí)目標(biāo)6.2.4多線程爬蟲性能分析6.2.4多線程爬蟲性能分析if__name__=="__main__":begin_page=int(input("請輸入起始頁碼:"))end_page=int(input("請輸入結(jié)束頁碼:"))s_time=time.time()heima_forum(begin_page,end_page)e_time=time.time()print(f'總用時(shí):{e_time-s_time}秒')在4.6節(jié)中,編寫了一個(gè)單線程爬蟲采集Python+人工智能技術(shù)交流版塊中所有貼子的文章標(biāo)題、文章作者、文章鏈接和發(fā)布時(shí)間。使用time模塊計(jì)算此爬蟲運(yùn)行時(shí)間。運(yùn)行代碼,在控制臺中輸入起始頁碼為1,結(jié)束頁碼為70,按下回車后輸出的結(jié)果如下。總用時(shí):17.572004795074463秒6.2.4多線程爬蟲性能分析if__name__=='__main__':s_time=time.time()heima=HeiMa()heima.run()e_time=time.time()print(f'總用時(shí):{e_time-s_time}秒')在6.2.3小節(jié)項(xiàng)目的main語句中添加網(wǎng)絡(luò)爬蟲耗時(shí)計(jì)算的代碼。運(yùn)行代碼,在控制臺中輸入起始頁碼為1,結(jié)束頁碼為70,按下回車后輸出的結(jié)果如下??傆脮r(shí):3.3751931190490723秒6.2.4多線程爬蟲性能分析通過比較單線程爬蟲和多線程爬蟲耗費(fèi)的時(shí)長可知,在相同的條件下,多線程的性能優(yōu)于單線程爬蟲的性能。協(xié)程爬蟲6.3熟悉協(xié)程爬蟲的運(yùn)行流程,能夠歸納協(xié)程爬蟲的運(yùn)行流程學(xué)習(xí)目標(biāo)6.3.1協(xié)程爬蟲流程分析6.3.1協(xié)程爬蟲流程分析由于協(xié)程的切換不像多線程調(diào)度那樣耗費(fèi)資源,所以我們不用嚴(yán)格限制協(xié)程的數(shù)量,它的運(yùn)行流程圖如右所示。(1)構(gòu)建一個(gè)網(wǎng)址列表,由于要為每個(gè)網(wǎng)址分配一個(gè)協(xié)程,所以需要準(zhǔn)備一個(gè)網(wǎng)址列表。(2)為每個(gè)網(wǎng)址分配一個(gè)協(xié)程,每個(gè)協(xié)程負(fù)責(zé)先抓取源碼,再對這些源碼進(jìn)行解析并從中提取出目標(biāo)數(shù)據(jù)。(3)將提取的目標(biāo)數(shù)據(jù)存儲到數(shù)據(jù)列表中。(4)遍歷步驟(3)的數(shù)據(jù)列表,將取出的數(shù)據(jù)進(jìn)行存儲。協(xié)程爬蟲的運(yùn)行流程如下。6.3.1協(xié)程爬蟲流程分析掌握協(xié)程爬蟲的實(shí)現(xiàn)技術(shù),能夠使用asyncio和aiohttp庫實(shí)現(xiàn)協(xié)程爬蟲學(xué)習(xí)目標(biāo)6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)Python中提供了支持協(xié)程的內(nèi)置庫asyncio,該庫經(jīng)常會與第三方庫aiohttp配合使用,以幫助開發(fā)人員快速實(shí)現(xiàn)協(xié)程爬蟲。另外,我們也可以使用aiofiles庫將爬蟲解析完的數(shù)據(jù)實(shí)現(xiàn)異步寫入。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)
asyncio庫importasyncioasyncdefmain(): #定義協(xié)程
print('hello')awaitasyncio.sleep(1)#阻塞等待1秒
print('world')在asyncio庫中,async/await
關(guān)鍵字用于定義協(xié)程,其中關(guān)鍵字async位于關(guān)鍵字def的前面,表明async修飾的函數(shù)是一個(gè)協(xié)程函數(shù),而不是普通函數(shù);關(guān)鍵字await位于協(xié)程函數(shù)內(nèi)部,該關(guān)鍵字的后面需要跟著可等待對象(協(xié)程對象、協(xié)程任務(wù)和Future類的對象),表明當(dāng)前協(xié)程會被掛起并主動讓出執(zhí)行權(quán)。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)
asyncio庫asyncdefmain():task1=asyncio.create_task(coroutine_one())task2=asyncio.create_task(coroutine_two())awaittask1awaittask2loop=asyncio.get_event_loop() loop.run_until_complete(main()) 要想運(yùn)行創(chuàng)建的協(xié)程,可以通過asyncio庫的run()和run_until_complete()方法實(shí)現(xiàn)。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)asyncio.run(main()) 方式一方式二
aiohttp庫aiohttp庫是一個(gè)為Python提供的異步HTTP客戶端/服務(wù)端編程的第三方庫,在使用之前需要先進(jìn)行安裝。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)pipinstallaiohttp
aiohttp庫aiohttp庫中提供了一個(gè)status屬性,status屬性用于獲取請求的狀態(tài)碼,另外aiohttp庫中還提供了很多方法。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)方法說明ClientSession()用于創(chuàng)建客戶端會話text()以字符串形式顯示服務(wù)器內(nèi)容json()以JSON形式響應(yīng)服務(wù)器內(nèi)容read()返回二進(jìn)制文本post()發(fā)送POST請求get()發(fā)送GET請求
aiohttp庫使用aiohttp庫的get()方法請求百度首頁,具體代碼如下所示。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)importasyncio,aiohttpasyncdefmain():#使用with語句的上下文管理器,保證處理session之后正確關(guān)閉
asyncwithaiohttp.ClientSession()assession:#使用get()方法發(fā)送GET請求
asyncwithsession.get('/')asresp:print(resp.status) #輸出響應(yīng)狀態(tài)碼asyncio.run(main())
aiofiles庫aiofiles庫提供文件異步操作,并非Python的標(biāo)準(zhǔn)庫,所以使用之前需要先進(jìn)行安裝。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)pipinstallaiofiles
aiofiles庫aiofiles庫中提供了許多與處理Python文件相似的方法,常用方法如下所示。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)方法說明open()使用協(xié)程打開一個(gè)文件close()使用協(xié)程關(guān)閉文件read()使用協(xié)程讀取文件,可設(shè)置讀取的字節(jié)數(shù)realall()使用協(xié)程讀取文件所有內(nèi)容write()使用協(xié)程寫入文件數(shù)據(jù),可設(shè)置寫入的字符長度writelines()使用協(xié)程寫入文件數(shù)據(jù),每次寫入一行數(shù)據(jù)
aiofiles庫使用aiofiles庫向文件寫入并讀取數(shù)據(jù),具體如下。6.3.2協(xié)程爬蟲實(shí)現(xiàn)技術(shù)importasyncio,aiofilesasyncdefwirte_demo():asyncwithaiofiles.open("text.txt","w",encoding="utf-8")asfp:awaitfp.write("helloworld")print("數(shù)據(jù)寫入成功")asyncdefread_demo():asyncwithaiofiles.open("text.txt","r",encoding="utf-8")asfp:content=awaitfp.read()print(content)多學(xué)一招事件循環(huán)是每個(gè)asyncio
應(yīng)用的核心。事件循環(huán)會運(yùn)行異步任務(wù)和回調(diào),執(zhí)行網(wǎng)絡(luò)IO操作,以及運(yùn)行子程序。await語句后需要跟隨可等待對象,“可等待”可理解為跳轉(zhuǎn)到等待對象,并將當(dāng)前任務(wù)掛起,當(dāng)?shù)却龑ο蟮娜蝿?wù)處理完成,再跳回當(dāng)前任務(wù)繼續(xù)執(zhí)行。asyncio庫中的可等待對象包括協(xié)程對象、協(xié)程任務(wù)和Future對象??傻却龑ο蠛褪录h(huán)掌握協(xié)程爬蟲的實(shí)現(xiàn)技術(shù),能夠使用協(xié)程技術(shù)抓取黑馬程序員論壇網(wǎng)站數(shù)據(jù)學(xué)習(xí)目標(biāo)6.3.3協(xié)程爬蟲基本示例以黑馬程序員論壇網(wǎng)站為例,帶領(lǐng)大家一起使用aiohttp、asyncio和aiofiles模塊實(shí)現(xiàn)協(xié)程爬蟲,并讓協(xié)程爬蟲采集Python技術(shù)交流版塊中所有帖子的文章標(biāo)題、文章作者、文章鏈接以及發(fā)布時(shí)間。6.3.3協(xié)程爬蟲基本示例案例需求案例步驟6.3.3協(xié)程爬蟲基本示例導(dǎo)入相關(guān)模塊,定義協(xié)程函數(shù)定義請求網(wǎng)址并提取數(shù)據(jù)創(chuàng)建事件循環(huán),啟動協(xié)程函數(shù)123執(zhí)行代碼當(dāng)程序運(yùn)行后,可以看到在代碼文件同級目錄下添加了一個(gè)新的文件coroutine-heima.json,該文件存儲了黑馬程序員論壇中1~70頁的文章標(biāo)題、文章作者、文章鏈接和發(fā)布時(shí)間。6.3.3協(xié)程爬蟲基本示例[單擊查看源碼]熟悉協(xié)程爬蟲性能分析,能夠計(jì)算出協(xié)程爬蟲耗時(shí)時(shí)間學(xué)習(xí)目標(biāo)6.3.4協(xié)程爬蟲性能分析if__name__=='__main__':s_time=time.time()loop=asyncio.get_event_loop()#創(chuàng)建事件循環(huán)
loop.run_until_complete(main())e_time=time.time()print(f'總用時(shí):{e_time-s_time}秒')為了對協(xié)程爬蟲的性能進(jìn)行分析,在6.3.3小節(jié)的示例的基礎(chǔ)上,增加網(wǎng)絡(luò)爬蟲耗時(shí)計(jì)算的代碼,比較單線程爬蟲和協(xié)程爬蟲在采集相同數(shù)據(jù)時(shí)總共耗費(fèi)的時(shí)長。運(yùn)行代碼,結(jié)果如下。總用時(shí):3.2851879596710205秒6.3.4協(xié)程爬蟲性能分析通過比較單線程爬蟲和協(xié)程爬蟲耗費(fèi)的時(shí)長可知,在相同的條件下,協(xié)程爬蟲的性能優(yōu)于單線程爬蟲的性能。6.3.4協(xié)程爬蟲性能分析[單擊查看源碼]實(shí)踐項(xiàng)目:使用多線程采集黑馬頭條的評論列表6.4掌握黑馬頭條數(shù)據(jù)的抓取,能夠使用多線程采集黑馬頭條的評論列表學(xué)習(xí)目標(biāo)6.4使用多線程采集黑馬頭條的評論列表黑馬頭條是一款新聞資訊類項(xiàng)目,由用戶端、自媒體端、管理后臺端組成完整的業(yè)務(wù)閉環(huán),通過大數(shù)據(jù)平臺分析用戶喜好,為用戶精準(zhǔn)推送資訊新聞。本節(jié)將使用多線程的知識開發(fā)一個(gè)多線程爬蟲項(xiàng)目,采集黑馬頭條自媒體端指定頁面范圍的評論列表。6.4使用多線程采集黑馬頭條的評論列表
項(xiàng)目需求訪問黑馬頭條自媒體端登錄頁面,使用默認(rèn)的賬號密碼登錄后,在左側(cè)的菜單欄中選擇“內(nèi)容管理”→“評論列表”進(jìn)入評論列表頁面。
項(xiàng)目目標(biāo)6.4使用多線程采集黑馬頭條的評論列表首先判斷待提取的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 食品衛(wèi)生安全檢測技術(shù)進(jìn)展
- 策劃大寒節(jié)氣活動模板
- 財(cái)務(wù)月報(bào)解讀模板
- 碩士生導(dǎo)師訓(xùn)練模板
- 圣誕新媒體運(yùn)營報(bào)告模板
- 學(xué)生會總結(jié)大會主持稿
- 統(tǒng)編版五年級語文上冊寒假作業(yè)(三)(有答案)
- 河北省唐山市2024-2025學(xué)年七年級上學(xué)期1月期末考試生物試卷(含答案)
- 二零二五年度教育資源共享平臺合作合同2篇
- 二零二五年度智能倉儲系統(tǒng)安裝與物流管理協(xié)議3篇
- 2023年保安公司副總經(jīng)理年終總結(jié) 保安公司分公司經(jīng)理年終總結(jié)(5篇)
- 中國華能集團(tuán)公司風(fēng)力發(fā)電場運(yùn)行導(dǎo)則(馬晉輝20231.1.13)
- 中考語文非連續(xù)性文本閱讀10篇專項(xiàng)練習(xí)及答案
- 2022-2023學(xué)年度六年級數(shù)學(xué)(上冊)寒假作業(yè)【每日一練】
- 法人不承擔(dān)責(zé)任協(xié)議書(3篇)
- 電工工具報(bào)價(jià)單
- 反歧視程序文件
- 油氣藏類型、典型的相圖特征和識別實(shí)例
- 流體靜力學(xué)課件
- 顧客忠誠度論文
- 實(shí)驗(yàn)室安全檢查自查表
評論
0/150
提交評論