c爬蟲(chóng)抓取網(wǎng)頁(yè)數據
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(2021-07-09pyspider框架介紹框架Scrapy)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-02-07 21:07
2021-07-09
pyspider框架介紹
pyspider是中文binux編寫(xiě)的強大的網(wǎng)絡(luò )爬蟲(chóng)系統,它的GitHub地址是,官方文檔地址是。
pyspider 帶有強大的 WebUI、腳本編輯器、任務(wù)監視器、項目管理器和結果處理器。支持多數據庫后端,多消息隊列,爬取JavaScript渲染頁(yè)面。使用起來(lái)非常方便。
pyspider基本功能
我們將 PySpider 的功能總結如下。
提供方便易用的WebUI系統,可以可視化編寫(xiě)和調試爬蟲(chóng)。
提供爬取進(jìn)度監控、爬取結果查看、爬蟲(chóng)項目管理等功能。
支持多種后端數據庫,如 MySQL、MongoDB、Redis、SQLite、Elasticsearch、PostgreSQL。
支持多個(gè)消息隊列,如 RabbitMQ、Beanstalk、Redis、Kombu。
提供優(yōu)先級控制、故障重試、定時(shí)捕捉等功能。
使用 PhantomJS,您可以抓取由 JavaScript 呈現的頁(yè)面。
支持單機和分布式部署,支持Docker部署。
如果你想快速輕松地爬取一個(gè)頁(yè)面,使用 pyspider 是一個(gè)不錯的選擇。
與 Scrapy 的比較
Scrapy,另一個(gè)爬蟲(chóng)框架,后面會(huì )介紹。學(xué)習了 Scrapy 之后,這部分就更容易理解了。我們先來(lái)了解一下pyspider和Scrapy的區別。
pyspider 提供 WebUI。爬蟲(chóng)的編寫(xiě)和調試都是在WebUI中進(jìn)行的,而Scrapy原生沒(méi)有這個(gè)功能。它使用代碼和命令行操作,但可以連接到 Portia 以實(shí)現可視化配置。
pyspider的調試非常方便,WebUI的操作方便直觀(guān)。在 Scrapy 中,使用 parse 命令進(jìn)行調試,不如 pyspider 方便。
pyspider 支持 PhantomJS 在 JavaScript 采集 中渲染頁(yè)面,并且 ScrapySplash 組件可以??吭?Scrapy 中,這需要額外的配置。
PyQuery 作為選擇器內置在 PySpider 中,XPath、CSS 選擇器和正則匹配都??吭?Scrapy 中。
pyspider的可擴展性不足,可配置程度不高。在Scrapy中,通過(guò)對接Middleware、Pipeline、Extension等組件可以實(shí)現非常強大的功能。模塊間耦合度低,可擴展性極高。
如果想快速抓取一個(gè)頁(yè)面,推薦使用pyspider,開(kāi)發(fā)比較方便,比如快速抓取一個(gè)普通新聞網(wǎng)站的新聞內容。如果要處理非常大規模的抓取,反爬度很強,建議使用Scrapy,比如對網(wǎng)站的大規模數據采集的被封IP、被封賬號進(jìn)行抓取, 和高頻驗證。
pyspider的架構
pyspider的架構主要分為三個(gè)部分:Scheduler(調度器)、Fetcher(抓取器)、Processor(處理器)。整個(gè)爬取過(guò)程由Monitor(監視器)監控,爬取結果為Result Worker(results)。處理器),如圖 12-1 所示。
Scheduler發(fā)起任務(wù)調度,Fetcher負責抓取網(wǎng)頁(yè)內容,Processor負責解析網(wǎng)頁(yè)內容,然后將新生成的Request發(fā)送給Scheduler進(jìn)行調度,并保存生成的提取結果輸出。
pyspider的任務(wù)執行過(guò)程邏輯很清晰,具體流程如下。
每個(gè) pyspider 項目都對應一個(gè) Python 腳本,該腳本定義了一個(gè)帶有 on_start() 方法的 Handler 類(lèi)。爬取首先調用on_start()方法生成初始爬取任務(wù),然后發(fā)送給Scheduler進(jìn)行調度。
Scheduler 將抓取任務(wù)分發(fā)給 Fetcher 進(jìn)行抓取,Fetcher 執行并獲取響應,然后將響應發(fā)送給 Processor。
Processer處理響應并提取新的URL生成新的爬蟲(chóng)任務(wù),然后通過(guò)消息隊列通知Schduler當前的爬蟲(chóng)任務(wù)執行狀態(tài),并將新生成的爬蟲(chóng)任務(wù)發(fā)送給Scheduler。如果生成了新的 fetch 結果,則將其發(fā)送到結果隊列中,由 Result Worker 處理。
Scheduler接收到一個(gè)新的抓取任務(wù),然后查詢(xún)數據庫,判斷是新的抓取任務(wù)還是需要重試的任務(wù),然后繼續調度,然后發(fā)回Fetcher去抓取。
不斷重復上述工作,直到所有任務(wù)都執行完畢,抓取結束。
捕獲后,程序會(huì )回調on_finished()方法,這里可以定義后處理過(guò)程。結語(yǔ)
本節我們主要了解pyspider的基本功能和架構。接下來(lái)我們用一個(gè)例子來(lái)體驗一下pyspider的爬取操作,然后總結一下它的各種用途。
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章: 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(2021-07-09pyspider框架介紹框架Scrapy)
2021-07-09
pyspider框架介紹
pyspider是中文binux編寫(xiě)的強大的網(wǎng)絡(luò )爬蟲(chóng)系統,它的GitHub地址是,官方文檔地址是。
pyspider 帶有強大的 WebUI、腳本編輯器、任務(wù)監視器、項目管理器和結果處理器。支持多數據庫后端,多消息隊列,爬取JavaScript渲染頁(yè)面。使用起來(lái)非常方便。
pyspider基本功能
我們將 PySpider 的功能總結如下。
提供方便易用的WebUI系統,可以可視化編寫(xiě)和調試爬蟲(chóng)。
提供爬取進(jìn)度監控、爬取結果查看、爬蟲(chóng)項目管理等功能。
支持多種后端數據庫,如 MySQL、MongoDB、Redis、SQLite、Elasticsearch、PostgreSQL。
支持多個(gè)消息隊列,如 RabbitMQ、Beanstalk、Redis、Kombu。
提供優(yōu)先級控制、故障重試、定時(shí)捕捉等功能。
使用 PhantomJS,您可以抓取由 JavaScript 呈現的頁(yè)面。
支持單機和分布式部署,支持Docker部署。
如果你想快速輕松地爬取一個(gè)頁(yè)面,使用 pyspider 是一個(gè)不錯的選擇。
與 Scrapy 的比較
Scrapy,另一個(gè)爬蟲(chóng)框架,后面會(huì )介紹。學(xué)習了 Scrapy 之后,這部分就更容易理解了。我們先來(lái)了解一下pyspider和Scrapy的區別。
pyspider 提供 WebUI。爬蟲(chóng)的編寫(xiě)和調試都是在WebUI中進(jìn)行的,而Scrapy原生沒(méi)有這個(gè)功能。它使用代碼和命令行操作,但可以連接到 Portia 以實(shí)現可視化配置。
pyspider的調試非常方便,WebUI的操作方便直觀(guān)。在 Scrapy 中,使用 parse 命令進(jìn)行調試,不如 pyspider 方便。
pyspider 支持 PhantomJS 在 JavaScript 采集 中渲染頁(yè)面,并且 ScrapySplash 組件可以??吭?Scrapy 中,這需要額外的配置。
PyQuery 作為選擇器內置在 PySpider 中,XPath、CSS 選擇器和正則匹配都??吭?Scrapy 中。
pyspider的可擴展性不足,可配置程度不高。在Scrapy中,通過(guò)對接Middleware、Pipeline、Extension等組件可以實(shí)現非常強大的功能。模塊間耦合度低,可擴展性極高。
如果想快速抓取一個(gè)頁(yè)面,推薦使用pyspider,開(kāi)發(fā)比較方便,比如快速抓取一個(gè)普通新聞網(wǎng)站的新聞內容。如果要處理非常大規模的抓取,反爬度很強,建議使用Scrapy,比如對網(wǎng)站的大規模數據采集的被封IP、被封賬號進(jìn)行抓取, 和高頻驗證。
pyspider的架構
pyspider的架構主要分為三個(gè)部分:Scheduler(調度器)、Fetcher(抓取器)、Processor(處理器)。整個(gè)爬取過(guò)程由Monitor(監視器)監控,爬取結果為Result Worker(results)。處理器),如圖 12-1 所示。
Scheduler發(fā)起任務(wù)調度,Fetcher負責抓取網(wǎng)頁(yè)內容,Processor負責解析網(wǎng)頁(yè)內容,然后將新生成的Request發(fā)送給Scheduler進(jìn)行調度,并保存生成的提取結果輸出。
pyspider的任務(wù)執行過(guò)程邏輯很清晰,具體流程如下。
每個(gè) pyspider 項目都對應一個(gè) Python 腳本,該腳本定義了一個(gè)帶有 on_start() 方法的 Handler 類(lèi)。爬取首先調用on_start()方法生成初始爬取任務(wù),然后發(fā)送給Scheduler進(jìn)行調度。
Scheduler 將抓取任務(wù)分發(fā)給 Fetcher 進(jìn)行抓取,Fetcher 執行并獲取響應,然后將響應發(fā)送給 Processor。
Processer處理響應并提取新的URL生成新的爬蟲(chóng)任務(wù),然后通過(guò)消息隊列通知Schduler當前的爬蟲(chóng)任務(wù)執行狀態(tài),并將新生成的爬蟲(chóng)任務(wù)發(fā)送給Scheduler。如果生成了新的 fetch 結果,則將其發(fā)送到結果隊列中,由 Result Worker 處理。
Scheduler接收到一個(gè)新的抓取任務(wù),然后查詢(xún)數據庫,判斷是新的抓取任務(wù)還是需要重試的任務(wù),然后繼續調度,然后發(fā)回Fetcher去抓取。
不斷重復上述工作,直到所有任務(wù)都執行完畢,抓取結束。
捕獲后,程序會(huì )回調on_finished()方法,這里可以定義后處理過(guò)程。結語(yǔ)
本節我們主要了解pyspider的基本功能和架構。接下來(lái)我們用一個(gè)例子來(lái)體驗一下pyspider的爬取操作,然后總結一下它的各種用途。
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章:
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(學(xué)爬蟲(chóng)的幾個(gè)誤區,你都知道嗎?(上) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2022-02-07 21:02
)
我其實(shí)沒(méi)想到人們對爬行的熱情如此之高??磥?lái)我的粉絲群中的每個(gè)人都想學(xué)習爬行。
反過(guò)來(lái)想,也就不足為奇了:爬蟲(chóng)等于數據,沒(méi)有數據怎么辦?
但我發(fā)現,這種基于能力和知識點(diǎn)的學(xué)習路線(xiàn)雖然看起來(lái)不錯,但如果沒(méi)有實(shí)際的項目支持,很難實(shí)施。
在和很多人的交流中,我也發(fā)現了學(xué)習爬蟲(chóng)的幾個(gè)誤區。
學(xué)習爬蟲(chóng)的幾個(gè)誤區
1.不明白:我開(kāi)發(fā)了一個(gè)簡(jiǎn)單的爬蟲(chóng)對比葫蘆畫(huà),但原理不明白,稍微改一下也不行。
2.缺乏明確的目標:如果你的目標是學(xué)習爬行,這還不夠明確。進(jìn)一步細化和明確目標,例如:學(xué)會(huì )攀登你最需要的3個(gè)網(wǎng)站。
3. 貪多,貪眾:我沒(méi)底子,只想一口吃掉一個(gè)胖子。很多人認為某件事并不難,但他們從來(lái)沒(méi)有做過(guò),或者從來(lái)沒(méi)有學(xué)過(guò)。
4.缺乏實(shí)踐經(jīng)驗:爬蟲(chóng)所涉及的知識體系非常豐富,超出了任何語(yǔ)言的范疇。如果被知識點(diǎn)驅使去學(xué)習爬蟲(chóng),會(huì )非常困難,無(wú)法掌握關(guān)鍵點(diǎn)。
我一直主張以實(shí)戰為切入點(diǎn),學(xué)習技術(shù)。比如我在B站的Python_Seven醬也是實(shí)戰的。小江機器人等項目很多人都很熟悉。
幾周前突然想到爬蟲(chóng)的學(xué)習路線(xiàn)也可以這樣做:
這種學(xué)習路徑比基于能力和知識的階梯更容易執行:
1.目標很明確,學(xué)習攀登10個(gè)不同難度級別網(wǎng)站。
2.目標明確,深度學(xué)習成為可能。確保完全理解 10 個(gè) 網(wǎng)站 抓取過(guò)程,而不僅僅是畫(huà)一個(gè)勺子。
3.不要貪得太多,什么都不要,10個(gè)網(wǎng)站(還包括幾個(gè)練習網(wǎng)站)。但不要太貪心。在你牢牢掌握這些之前,不要想著(zhù)應用爬取,也不要去追求特別難的網(wǎng)站。
4.實(shí)戰,up是實(shí)戰,到底是實(shí)戰。但經(jīng)過(guò)實(shí)戰,我學(xué)到了知識并付諸實(shí)踐。
來(lái)吧,這是我們篩選的10個(gè)項目。
學(xué)習爬行的10個(gè)項目
具體的網(wǎng)站僅供參考,可以換成同難度的類(lèi)似網(wǎng)站。
注意:8和9是同一個(gè)網(wǎng)站,使用的方法不同。
下面是10個(gè)網(wǎng)站及相關(guān)知識點(diǎn)的列表:
1.網(wǎng)站僅供參考,可替換為其他相同難度的網(wǎng)站。
2.以學(xué)習為目的,抓取過(guò)程一定要恰當,不要對網(wǎng)站的操作施加壓力。
30天時(shí)間表
如果你有一個(gè)目標,你就必須有一個(gè)計劃。我看到很多人說(shuō)想學(xué)Python,一年前來(lái)找我,一年后還是那個(gè)狀態(tài)。沒(méi)有時(shí)間計劃的目標大多是無(wú)法實(shí)現的目標。
我為這10個(gè)項目制定了30天的學(xué)習計劃。
這個(gè)30天爬蟲(chóng)計劃的第一天就是了解爬蟲(chóng)的規則。多條爬蟲(chóng)進(jìn)公安局的故事大家都聽(tīng)過(guò)。所以這件事非常重要。
事實(shí)上,爬行動(dòng)物是無(wú)辜的。明白了規則之后,爬蟲(chóng)變色就不用說(shuō)了。否則,百度、谷歌、天眼查等大公司和平臺都會(huì )進(jìn)入。你要明白:什么是不可逾越的紅線(xiàn)?什么可以爬?你能爬多少?如何文明優(yōu)雅地攀登?
那么是時(shí)候攻克這10個(gè)爬蟲(chóng)項目了,涉及的知識點(diǎn)不同,從最簡(jiǎn)單的小蟲(chóng)卵到分布式的大型爬蟲(chóng)。
關(guān)于Python技術(shù)儲備
學(xué)好 Python 是賺錢(qián)的好方法,不管是工作還是副業(yè),但要學(xué)好 Python,還是要有學(xué)習計劃的。最后,我們將分享一套完整的Python學(xué)習資料,以幫助那些想學(xué)習Python的朋友!
一、Python全方位學(xué)習路線(xiàn)
Python的各個(gè)方向都是將Python中常用的技術(shù)點(diǎn)進(jìn)行整理,形成各個(gè)領(lǐng)域知識點(diǎn)的匯總。它的用處是你可以根據以上知識點(diǎn)找到對應的學(xué)習資源,保證你能學(xué)得更全面。
二、學(xué)習軟件
工人要做好工作,首先要磨利他的工具。學(xué)習Python常用的開(kāi)發(fā)軟件就到這里,為大家節省不少時(shí)間。
三、入門(mén)視頻
當我們看視頻學(xué)習時(shí),沒(méi)有手我們就無(wú)法移動(dòng)眼睛和大腦。更科學(xué)的學(xué)習方式是理解后再使用。這時(shí)候動(dòng)手項目就很合適了。
四、實(shí)際案例
光學(xué)理論是無(wú)用的。你必須學(xué)會(huì )??跟隨,你必須先進(jìn)行實(shí)際練習,然后才能將所學(xué)應用于實(shí)踐。這時(shí)候可以借鑒實(shí)戰案例。
五、采訪(fǎng)信息
我們必須學(xué)習 Python 才能找到一份高薪工作。以下面試題是來(lái)自阿里、騰訊、字節跳動(dòng)等一線(xiàn)互聯(lián)網(wǎng)公司的最新面試資料,部分阿里大佬給出了權威答案??赐赀@套面試材料相信大家都能找到一份滿(mǎn)意的工作。
本完整版Python全套學(xué)習資料已上傳至CSDN。需要的可以微信掃描下方官方CSDN認證二維碼免費獲取【保證100%免費】
查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(學(xué)爬蟲(chóng)的幾個(gè)誤區,你都知道嗎?(上)
)
我其實(shí)沒(méi)想到人們對爬行的熱情如此之高??磥?lái)我的粉絲群中的每個(gè)人都想學(xué)習爬行。
反過(guò)來(lái)想,也就不足為奇了:爬蟲(chóng)等于數據,沒(méi)有數據怎么辦?

但我發(fā)現,這種基于能力和知識點(diǎn)的學(xué)習路線(xiàn)雖然看起來(lái)不錯,但如果沒(méi)有實(shí)際的項目支持,很難實(shí)施。
在和很多人的交流中,我也發(fā)現了學(xué)習爬蟲(chóng)的幾個(gè)誤區。
學(xué)習爬蟲(chóng)的幾個(gè)誤區
1.不明白:我開(kāi)發(fā)了一個(gè)簡(jiǎn)單的爬蟲(chóng)對比葫蘆畫(huà),但原理不明白,稍微改一下也不行。
2.缺乏明確的目標:如果你的目標是學(xué)習爬行,這還不夠明確。進(jìn)一步細化和明確目標,例如:學(xué)會(huì )攀登你最需要的3個(gè)網(wǎng)站。
3. 貪多,貪眾:我沒(méi)底子,只想一口吃掉一個(gè)胖子。很多人認為某件事并不難,但他們從來(lái)沒(méi)有做過(guò),或者從來(lái)沒(méi)有學(xué)過(guò)。
4.缺乏實(shí)踐經(jīng)驗:爬蟲(chóng)所涉及的知識體系非常豐富,超出了任何語(yǔ)言的范疇。如果被知識點(diǎn)驅使去學(xué)習爬蟲(chóng),會(huì )非常困難,無(wú)法掌握關(guān)鍵點(diǎn)。
我一直主張以實(shí)戰為切入點(diǎn),學(xué)習技術(shù)。比如我在B站的Python_Seven醬也是實(shí)戰的。小江機器人等項目很多人都很熟悉。
幾周前突然想到爬蟲(chóng)的學(xué)習路線(xiàn)也可以這樣做:
這種學(xué)習路徑比基于能力和知識的階梯更容易執行:
1.目標很明確,學(xué)習攀登10個(gè)不同難度級別網(wǎng)站。
2.目標明確,深度學(xué)習成為可能。確保完全理解 10 個(gè) 網(wǎng)站 抓取過(guò)程,而不僅僅是畫(huà)一個(gè)勺子。
3.不要貪得太多,什么都不要,10個(gè)網(wǎng)站(還包括幾個(gè)練習網(wǎng)站)。但不要太貪心。在你牢牢掌握這些之前,不要想著(zhù)應用爬取,也不要去追求特別難的網(wǎng)站。
4.實(shí)戰,up是實(shí)戰,到底是實(shí)戰。但經(jīng)過(guò)實(shí)戰,我學(xué)到了知識并付諸實(shí)踐。
來(lái)吧,這是我們篩選的10個(gè)項目。
學(xué)習爬行的10個(gè)項目
具體的網(wǎng)站僅供參考,可以換成同難度的類(lèi)似網(wǎng)站。


注意:8和9是同一個(gè)網(wǎng)站,使用的方法不同。
下面是10個(gè)網(wǎng)站及相關(guān)知識點(diǎn)的列表:
1.網(wǎng)站僅供參考,可替換為其他相同難度的網(wǎng)站。
2.以學(xué)習為目的,抓取過(guò)程一定要恰當,不要對網(wǎng)站的操作施加壓力。

30天時(shí)間表
如果你有一個(gè)目標,你就必須有一個(gè)計劃。我看到很多人說(shuō)想學(xué)Python,一年前來(lái)找我,一年后還是那個(gè)狀態(tài)。沒(méi)有時(shí)間計劃的目標大多是無(wú)法實(shí)現的目標。
我為這10個(gè)項目制定了30天的學(xué)習計劃。

這個(gè)30天爬蟲(chóng)計劃的第一天就是了解爬蟲(chóng)的規則。多條爬蟲(chóng)進(jìn)公安局的故事大家都聽(tīng)過(guò)。所以這件事非常重要。
事實(shí)上,爬行動(dòng)物是無(wú)辜的。明白了規則之后,爬蟲(chóng)變色就不用說(shuō)了。否則,百度、谷歌、天眼查等大公司和平臺都會(huì )進(jìn)入。你要明白:什么是不可逾越的紅線(xiàn)?什么可以爬?你能爬多少?如何文明優(yōu)雅地攀登?
那么是時(shí)候攻克這10個(gè)爬蟲(chóng)項目了,涉及的知識點(diǎn)不同,從最簡(jiǎn)單的小蟲(chóng)卵到分布式的大型爬蟲(chóng)。
關(guān)于Python技術(shù)儲備
學(xué)好 Python 是賺錢(qián)的好方法,不管是工作還是副業(yè),但要學(xué)好 Python,還是要有學(xué)習計劃的。最后,我們將分享一套完整的Python學(xué)習資料,以幫助那些想學(xué)習Python的朋友!
一、Python全方位學(xué)習路線(xiàn)
Python的各個(gè)方向都是將Python中常用的技術(shù)點(diǎn)進(jìn)行整理,形成各個(gè)領(lǐng)域知識點(diǎn)的匯總。它的用處是你可以根據以上知識點(diǎn)找到對應的學(xué)習資源,保證你能學(xué)得更全面。

二、學(xué)習軟件
工人要做好工作,首先要磨利他的工具。學(xué)習Python常用的開(kāi)發(fā)軟件就到這里,為大家節省不少時(shí)間。

三、入門(mén)視頻
當我們看視頻學(xué)習時(shí),沒(méi)有手我們就無(wú)法移動(dòng)眼睛和大腦。更科學(xué)的學(xué)習方式是理解后再使用。這時(shí)候動(dòng)手項目就很合適了。

四、實(shí)際案例
光學(xué)理論是無(wú)用的。你必須學(xué)會(huì )??跟隨,你必須先進(jìn)行實(shí)際練習,然后才能將所學(xué)應用于實(shí)踐。這時(shí)候可以借鑒實(shí)戰案例。

五、采訪(fǎng)信息
我們必須學(xué)習 Python 才能找到一份高薪工作。以下面試題是來(lái)自阿里、騰訊、字節跳動(dòng)等一線(xiàn)互聯(lián)網(wǎng)公司的最新面試資料,部分阿里大佬給出了權威答案??赐赀@套面試材料相信大家都能找到一份滿(mǎn)意的工作。


本完整版Python全套學(xué)習資料已上傳至CSDN。需要的可以微信掃描下方官方CSDN認證二維碼免費獲取【保證100%免費】
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(PHPHTML數據爬蟲(chóng)的設計思路及應用的優(yōu)勢)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2022-02-05 16:08
內容
1. 為什么是爬蟲(chóng)?
在“大數據時(shí)代”,數據獲取方式:
從第三方數據平臺購買(mǎi)數據爬蟲(chóng)數據2.什么是爬蟲(chóng)?
抓取網(wǎng)絡(luò )數據的程序
3. 爬蟲(chóng)如何抓取網(wǎng)頁(yè)數據?
首先,你需要了解一個(gè)網(wǎng)頁(yè)的三個(gè)特征:
每個(gè)網(wǎng)頁(yè)都有自己的 URL(Uniform Resource Locator)來(lái)定位網(wǎng)頁(yè) 所有使用 HTML(超文本標記語(yǔ)言)來(lái)描述頁(yè)面信息 所有網(wǎng)頁(yè)使用 HTTP/HTTPS(超文本傳輸??協(xié)議)來(lái)傳輸 HTML 數據
爬蟲(chóng)設計思路:
首先確定需要爬取的網(wǎng)頁(yè)的URL地址,通過(guò)HTTP/HTTPS協(xié)議獲取對應的HTML頁(yè)面,提取HTML頁(yè)面中的有用數據:
一個(gè)。如果是需要的數據--保存
灣。如果還有其他網(wǎng)址,繼續步驟2 4. Python爬蟲(chóng)的優(yōu)勢?語(yǔ)言的優(yōu)點(diǎn)和缺點(diǎn)
PHP
世界上最好的語(yǔ)言
對于多線(xiàn)程,異步支持不好,并發(fā)處理不夠
爪哇
完善的網(wǎng)絡(luò )爬蟲(chóng)生態(tài)系統
Java語(yǔ)言本身繁瑣,代碼量大,數據重構成本高
C/C++
運營(yíng)效率和性能幾乎是最高的
學(xué)習成本高
Python
語(yǔ)法優(yōu)美,代碼簡(jiǎn)潔,開(kāi)發(fā)效率高,模塊多
5.抓取HTML頁(yè)面的學(xué)習路線(xiàn):解析服務(wù)器對應內容:采集動(dòng)態(tài)HTML、Captcha處理Scrapy框架:分布式策略:爬蟲(chóng)、反爬蟲(chóng)、反反之間的較量爬蟲(chóng):6.爬蟲(chóng)分類(lèi)6.1 通用爬蟲(chóng):
1.定義:搜索引擎爬蟲(chóng)系統
2.目標:爬取互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè),放到本地服務(wù)器上形成備份,對這些網(wǎng)頁(yè)做相關(guān)的處理(提取關(guān)鍵詞,去除廣告),最終為用戶(hù)提供借口拜訪(fǎng)
3.爬取過(guò)程:
a) 首先選擇一部分已有的URL,將這些URL放入爬取隊列
b) 從隊列中取出URL,然后解析NDS得到主機IP,然后到這個(gè)IP對應的服務(wù)器下載HTML頁(yè)面,保存到搜索引擎的本地服務(wù)器,然后把爬取的抓取隊列中的 URL
c) 分析網(wǎng)頁(yè)內容,找出網(wǎng)頁(yè)中的其他URL連接,繼續第二步,直到爬取結束
4.搜索引擎如何獲得一個(gè)新的網(wǎng)站 URL:
主動(dòng)向搜索引擎提交網(wǎng)址:在其他網(wǎng)站中設置網(wǎng)站的外部鏈接:其他網(wǎng)站上方的友好鏈接搜索引擎會(huì )配合DNS服務(wù)商,可以快速< @k10@ >新網(wǎng)站
5.一般爬蟲(chóng)注意事項
萬(wàn)能爬蟲(chóng)不是萬(wàn)物皆可爬,它必須遵守規則:
機器人協(xié)議:該協(xié)議將指定通用爬蟲(chóng)爬取網(wǎng)頁(yè)的權限
我們可以在不同的網(wǎng)頁(yè)上訪(fǎng)問(wèn)機器人權限
6.一般爬蟲(chóng)一般流程:
7.通用爬蟲(chóng)的缺點(diǎn)
只能提供文本相關(guān)的內容(HTML、WORD、PDF)等,不能提供多媒體文件(msic、圖片、視頻)等二進(jìn)制文件。結果是一樣的,不同背景的人聽(tīng)不同的搜索結果是無(wú)法理解的 人的語(yǔ)義檢索側重于爬蟲(chóng)的優(yōu)勢
DNS域名解析成IP:在命令框中輸入ping獲取服務(wù)器的IP
6.2 關(guān)注爬蟲(chóng):
爬蟲(chóng)程序員編寫(xiě)的針對某個(gè)內容的爬蟲(chóng) -> 面向主題的爬蟲(chóng),需要爬蟲(chóng)的爬蟲(chóng) 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(PHPHTML數據爬蟲(chóng)的設計思路及應用的優(yōu)勢)
內容
1. 為什么是爬蟲(chóng)?
在“大數據時(shí)代”,數據獲取方式:
從第三方數據平臺購買(mǎi)數據爬蟲(chóng)數據2.什么是爬蟲(chóng)?
抓取網(wǎng)絡(luò )數據的程序
3. 爬蟲(chóng)如何抓取網(wǎng)頁(yè)數據?
首先,你需要了解一個(gè)網(wǎng)頁(yè)的三個(gè)特征:
每個(gè)網(wǎng)頁(yè)都有自己的 URL(Uniform Resource Locator)來(lái)定位網(wǎng)頁(yè) 所有使用 HTML(超文本標記語(yǔ)言)來(lái)描述頁(yè)面信息 所有網(wǎng)頁(yè)使用 HTTP/HTTPS(超文本傳輸??協(xié)議)來(lái)傳輸 HTML 數據
爬蟲(chóng)設計思路:
首先確定需要爬取的網(wǎng)頁(yè)的URL地址,通過(guò)HTTP/HTTPS協(xié)議獲取對應的HTML頁(yè)面,提取HTML頁(yè)面中的有用數據:
一個(gè)。如果是需要的數據--保存
灣。如果還有其他網(wǎng)址,繼續步驟2 4. Python爬蟲(chóng)的優(yōu)勢?語(yǔ)言的優(yōu)點(diǎn)和缺點(diǎn)
PHP
世界上最好的語(yǔ)言
對于多線(xiàn)程,異步支持不好,并發(fā)處理不夠
爪哇
完善的網(wǎng)絡(luò )爬蟲(chóng)生態(tài)系統
Java語(yǔ)言本身繁瑣,代碼量大,數據重構成本高
C/C++
運營(yíng)效率和性能幾乎是最高的
學(xué)習成本高
Python
語(yǔ)法優(yōu)美,代碼簡(jiǎn)潔,開(kāi)發(fā)效率高,模塊多
5.抓取HTML頁(yè)面的學(xué)習路線(xiàn):解析服務(wù)器對應內容:采集動(dòng)態(tài)HTML、Captcha處理Scrapy框架:分布式策略:爬蟲(chóng)、反爬蟲(chóng)、反反之間的較量爬蟲(chóng):6.爬蟲(chóng)分類(lèi)6.1 通用爬蟲(chóng):
1.定義:搜索引擎爬蟲(chóng)系統
2.目標:爬取互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè),放到本地服務(wù)器上形成備份,對這些網(wǎng)頁(yè)做相關(guān)的處理(提取關(guān)鍵詞,去除廣告),最終為用戶(hù)提供借口拜訪(fǎng)

3.爬取過(guò)程:
a) 首先選擇一部分已有的URL,將這些URL放入爬取隊列
b) 從隊列中取出URL,然后解析NDS得到主機IP,然后到這個(gè)IP對應的服務(wù)器下載HTML頁(yè)面,保存到搜索引擎的本地服務(wù)器,然后把爬取的抓取隊列中的 URL
c) 分析網(wǎng)頁(yè)內容,找出網(wǎng)頁(yè)中的其他URL連接,繼續第二步,直到爬取結束
4.搜索引擎如何獲得一個(gè)新的網(wǎng)站 URL:
主動(dòng)向搜索引擎提交網(wǎng)址:在其他網(wǎng)站中設置網(wǎng)站的外部鏈接:其他網(wǎng)站上方的友好鏈接搜索引擎會(huì )配合DNS服務(wù)商,可以快速< @k10@ >新網(wǎng)站
5.一般爬蟲(chóng)注意事項
萬(wàn)能爬蟲(chóng)不是萬(wàn)物皆可爬,它必須遵守規則:
機器人協(xié)議:該協(xié)議將指定通用爬蟲(chóng)爬取網(wǎng)頁(yè)的權限
我們可以在不同的網(wǎng)頁(yè)上訪(fǎng)問(wèn)機器人權限


6.一般爬蟲(chóng)一般流程:

7.通用爬蟲(chóng)的缺點(diǎn)
只能提供文本相關(guān)的內容(HTML、WORD、PDF)等,不能提供多媒體文件(msic、圖片、視頻)等二進(jìn)制文件。結果是一樣的,不同背景的人聽(tīng)不同的搜索結果是無(wú)法理解的 人的語(yǔ)義檢索側重于爬蟲(chóng)的優(yōu)勢
DNS域名解析成IP:在命令框中輸入ping獲取服務(wù)器的IP

6.2 關(guān)注爬蟲(chóng):
爬蟲(chóng)程序員編寫(xiě)的針對某個(gè)內容的爬蟲(chóng) -> 面向主題的爬蟲(chóng),需要爬蟲(chóng)的爬蟲(chóng)
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(2021-10-29剛學(xué)新浪微博熱搜主題討論量獲取)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 58 次瀏覽 ? 2022-02-05 09:16
2021-10-29
剛學(xué)python爬蟲(chóng),用爬蟲(chóng)爬了新浪微博熱搜,看看效果如何。也是這段時(shí)間學(xué)習python的一個(gè)總結。
一、目的:
抓取2020年1月3日星期五新浪微博熱搜榜,動(dòng)態(tài)展示抓取數據,生成當日微博熱詞云和微博熱搜前20關(guān)鍵詞條形圖。
二、事情:
分析新浪微博熱搜榜,分析網(wǎng)頁(yè)結構,分析網(wǎng)頁(yè),獲取當前熱門(mén)話(huà)題、排名、話(huà)題討論量、當前爬取時(shí)間。由于微博熱搜動(dòng)態(tài)刷新,選擇20-30分鐘抓取數據,時(shí)間范圍為9:30-21:00。將上次采集的數據全部導入實(shí)現數據動(dòng)態(tài)顯示的模塊,并進(jìn)行相關(guān)調整。使用口吃分詞對獲取的數據進(jìn)行分詞,使用WordCloud展示當日熱度搜索熱點(diǎn)詞云
三、相關(guān)實(shí)現步驟
1.網(wǎng)頁(yè)分析
定義一個(gè)請求頭來(lái)模擬瀏覽器并隨機生成一個(gè)請求頭,方法def get_header():
header1 = {
??? "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
}
header2 = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362"
}
header3 = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
header_list = [header1,header2,header3]
index = random.randint(0,1)
return header_list[index]
解析 網(wǎng)站 方法:def get_data(url, headers)
使用權
req = requests.get(url=url, headers=headers)
req.encoding = "utf-8"
通過(guò)lxml解析網(wǎng)頁(yè)
bf = BeautifulSoup(html, "lxml")
通過(guò)觀(guān)察,每個(gè)熱搜都在tr class=""下,所以只需遍歷所有class=""
你可以上每一個(gè)熱搜
div_content = bf.find_all("tr", class_="")
遍歷div_content獲取各個(gè)熱搜的排名、話(huà)題、討論量
for item in div_content:
刪除頂部消息并將變量 t = 1 添加到循環(huán)中
if (t == 1):
??? ????? t = 0
??? ????? continue
tr下有3條td信息,分別代表排名、熱搜話(huà)題和瀏覽量、標簽表達。前兩條信息是我們想要得到的。
獲取當前熱搜排名
num_content = item.select("td")[0].string
熱搜話(huà)題和瀏覽量分別在td-02的a標簽和span標簽下
獲取當前熱門(mén)話(huà)題
content = item.select("td")[1].select("a")[0].string
獲取當前熱搜話(huà)題的討論量
num = item.select("td")[1].select("span")[0].string
獲取當前系統時(shí)間需要在前面import from time import strftime
current_time = strftime("%Y-%m-%d %H:%M")
將當前熱搜排名、當前熱搜話(huà)題、當前熱搜話(huà)題討論量、當前系統時(shí)間放入列表存儲數據
list = [content,num_content,num,current_time]
將整個(gè)列表放入列表中
list_content.append(list)
2.存儲數據
存儲爬取的數據,存儲方式def store_Excel(list):
寫(xiě)入文件,編碼方式為utf_8_sig,生成的csv文件不會(huì )亂碼,不換行的操作為newline=""
with open("微博實(shí)時(shí)熱搜.csv","a",encoding="utf_8_sig",newline="")as file:
csv_writer = csv.writer(file)
遍歷列表,寫(xiě)
????? for item in list:
?? ?? ?csv_writer.writerow(item)
關(guān)閉文件
file.close()
3.生成詞云
想法:
整合一天爬取的所有數據
2、通過(guò)累加的方式遍歷并累加列表,將列表變成長(cháng)字符串
3.通過(guò)口吃分詞和空間分詞來(lái)分割字符串
4.找一張輪廓清晰的圖片打開(kāi),使用numpy獲取輪廓
5、使用WordCloud生成當天微博熱點(diǎn)詞云。
導入生成詞云的庫
rom wordcloud import WordCloud
import Image
import numpy
import jieba
為字符串存儲定義字符串
str = ""
閱讀熱搜熱點(diǎn)表
with open("微博實(shí)時(shí)熱搜test.csv","r",encoding="utf_8_sig",newline="") as file:
??? csv_reader = csv.reader(file)
遍歷列表
for item in csv_reader:
去掉第一個(gè)無(wú)用的信息,在循環(huán)外定義變量t=1
if t == 1:
??? ??? t = 0
??? ??? continue
字符串拼接,熱門(mén)話(huà)題在第一欄
str += item[0]
關(guān)閉文件
file.close()
口吃分詞
jieba_content = jieba.cut(str)
空間連接的join方法
join_content=" ".join(jieba_content)
打開(kāi)圖片
wei_bo = Image.open("logo.jpg")
找到輪廓
wei_bo_image = numpy.array(wei_bo)
制作生成的詞云
word_cloud = WordCloud(font_path="font1.TTF",background_color="white",mask = wei_bo_image).generate(join_content)
word_cloud.to_file("微博熱搜.jpg")
最終詞云展示:
微博logo圖片勾勒出文字云。字體大小代表受歡迎程度。字體越大,受歡迎程度越高。字體越小,受歡迎程度越低。
4.分析數據
想法:
1.將微博熱門(mén)話(huà)題存儲在txt文件中
2.讀取txt文件,使用jieba分詞進(jìn)行分詞,生成關(guān)鍵詞
3. 對 關(guān)鍵詞 執行頻率統計
4.按頻率降序對統計信息進(jìn)行排序關(guān)鍵詞
5. 將排序結果存儲在 csv 文件中以供以后操作
定義詞典
word_dic = {}
打開(kāi)文件,讀取數據
使用 open("1.txt", "r", encoding="utf-8") 作為文件:
txt = file.read()
文件.close()
jieba分詞數據
單詞 = jieba.lcut(txt)
循環(huán)數據
言歸正傳:
如果關(guān)鍵字數量為1,則不計入
如果 len(word) == 1:
繼續
否則頻率增加 1
別的:
word_dic[word] = word_dic.get(word, 0) + 1
將字典數據轉換為元組數據,用zip實(shí)現
word_zip = zip(word_dic.values(), word_dic.keys())
根據值從大到小對元組中的數據進(jìn)行排序
word_sort = list(排序(word_zip, reverse=True))
定義兩個(gè)數據存儲列表
list_1 = ["name", "count_name"]
list_2 = []
列表_2.追加(列表_1)
對于 word_sort 中的項目:
# 詞頻
計數 = 項目 [0]
#關(guān)鍵字
名稱(chēng) = 項目 [1]
list_1 = [名稱(chēng),計數]
列表_2.追加(列表_1)
寫(xiě)入文件
以open("微博熱搜關(guān)鍵詞詞頻統計.csv", "w", encoding="utf_8_sig", newline="")為文件:
csv_writer = csv.writer(文件)
遍歷list_2并寫(xiě)入每一行
對于 list_2 中的 i:
csv_writer.writerow(i)
5.生成繪圖
思路:根據熱搜關(guān)鍵詞的排序文件,提取頻率最高的前20位數據,繪制條形圖
導入繪圖工具包
將熊貓導入為 pd
將 matplotlib.pyplot 導入為 plt
定義繪圖樣式和顏色
plt.style.use('ggplot')
顏色1 = '#6D6D6D'
讀取排序文件
df = pd.read_csv("微博熱搜關(guān)鍵詞詞頻統計.csv",encoding="utf-8")
提取前 20 個(gè) 關(guān)鍵詞 和頻率
name1 = df.name[:20]
count1 = df.count_name[:20]
要繪制條形圖,請使用 range() 使 x 軸保持正確的順序
plt.bar(范圍(20),count1,tick_label = name1)
設置縱坐標范圍
plt.ylim(0,90)
顯示中文字體標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
標題
plt.title('微博熱搜關(guān)鍵詞詞頻統計',color = colors1)
x 軸標題,y 軸標題
plt.title('微博熱搜關(guān)鍵詞詞頻統計',color = colors1)
plt.xlabel('關(guān)鍵詞')
為每個(gè)條添加數字標簽
對于枚舉中的 x,y (list(count1)):
plt.text(x,y+1,'%s'%round(y,90),ha = 'center',color = colors1)
x軸關(guān)鍵字旋轉300度
plt.xticks(旋轉 = 300)
自動(dòng)控制空白邊距以顯示所有 x 軸坐標
plt.tight_layout()
保存圖片
plt.savefig('微博熱搜關(guān)鍵詞詞頻統計top20.png')
顯示圖像
plt.show()
繪圖結果顯示:
這次爬蟲(chóng)抓取了大約20組數據,每組數據對應50個(gè)熱搜榜。爬取時(shí)間為2020年1月1日9:30-21:00,每次爬取時(shí)間間隔為20-30分鐘。抓取這么多組數據的主要目的是為了做數據的動(dòng)態(tài)效果,展示過(guò)去一天微博熱搜的動(dòng)態(tài)變化。
數據動(dòng)態(tài)展示效果圖:
完整數據動(dòng)態(tài)效果視頻請參考微博熱搜數據動(dòng)態(tài)展示.mp4
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章: 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(2021-10-29剛學(xué)新浪微博熱搜主題討論量獲取)
2021-10-29
剛學(xué)python爬蟲(chóng),用爬蟲(chóng)爬了新浪微博熱搜,看看效果如何。也是這段時(shí)間學(xué)習python的一個(gè)總結。
一、目的:
抓取2020年1月3日星期五新浪微博熱搜榜,動(dòng)態(tài)展示抓取數據,生成當日微博熱詞云和微博熱搜前20關(guān)鍵詞條形圖。
二、事情:
分析新浪微博熱搜榜,分析網(wǎng)頁(yè)結構,分析網(wǎng)頁(yè),獲取當前熱門(mén)話(huà)題、排名、話(huà)題討論量、當前爬取時(shí)間。由于微博熱搜動(dòng)態(tài)刷新,選擇20-30分鐘抓取數據,時(shí)間范圍為9:30-21:00。將上次采集的數據全部導入實(shí)現數據動(dòng)態(tài)顯示的模塊,并進(jìn)行相關(guān)調整。使用口吃分詞對獲取的數據進(jìn)行分詞,使用WordCloud展示當日熱度搜索熱點(diǎn)詞云
三、相關(guān)實(shí)現步驟
1.網(wǎng)頁(yè)分析
定義一個(gè)請求頭來(lái)模擬瀏覽器并隨機生成一個(gè)請求頭,方法def get_header():
header1 = {
??? "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
}
header2 = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362"
}
header3 = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
header_list = [header1,header2,header3]
index = random.randint(0,1)
return header_list[index]
解析 網(wǎng)站 方法:def get_data(url, headers)
使用權
req = requests.get(url=url, headers=headers)
req.encoding = "utf-8"
通過(guò)lxml解析網(wǎng)頁(yè)
bf = BeautifulSoup(html, "lxml")
通過(guò)觀(guān)察,每個(gè)熱搜都在tr class=""下,所以只需遍歷所有class=""
你可以上每一個(gè)熱搜
div_content = bf.find_all("tr", class_="")
遍歷div_content獲取各個(gè)熱搜的排名、話(huà)題、討論量
for item in div_content:
刪除頂部消息并將變量 t = 1 添加到循環(huán)中
if (t == 1):
??? ????? t = 0
??? ????? continue
tr下有3條td信息,分別代表排名、熱搜話(huà)題和瀏覽量、標簽表達。前兩條信息是我們想要得到的。
獲取當前熱搜排名
num_content = item.select("td")[0].string
熱搜話(huà)題和瀏覽量分別在td-02的a標簽和span標簽下
獲取當前熱門(mén)話(huà)題
content = item.select("td")[1].select("a")[0].string
獲取當前熱搜話(huà)題的討論量
num = item.select("td")[1].select("span")[0].string
獲取當前系統時(shí)間需要在前面import from time import strftime
current_time = strftime("%Y-%m-%d %H:%M")
將當前熱搜排名、當前熱搜話(huà)題、當前熱搜話(huà)題討論量、當前系統時(shí)間放入列表存儲數據
list = [content,num_content,num,current_time]
將整個(gè)列表放入列表中
list_content.append(list)
2.存儲數據
存儲爬取的數據,存儲方式def store_Excel(list):
寫(xiě)入文件,編碼方式為utf_8_sig,生成的csv文件不會(huì )亂碼,不換行的操作為newline=""
with open("微博實(shí)時(shí)熱搜.csv","a",encoding="utf_8_sig",newline="")as file:
csv_writer = csv.writer(file)
遍歷列表,寫(xiě)
????? for item in list:
?? ?? ?csv_writer.writerow(item)
關(guān)閉文件
file.close()
3.生成詞云
想法:
整合一天爬取的所有數據
2、通過(guò)累加的方式遍歷并累加列表,將列表變成長(cháng)字符串
3.通過(guò)口吃分詞和空間分詞來(lái)分割字符串
4.找一張輪廓清晰的圖片打開(kāi),使用numpy獲取輪廓
5、使用WordCloud生成當天微博熱點(diǎn)詞云。
導入生成詞云的庫
rom wordcloud import WordCloud
import Image
import numpy
import jieba
為字符串存儲定義字符串
str = ""
閱讀熱搜熱點(diǎn)表
with open("微博實(shí)時(shí)熱搜test.csv","r",encoding="utf_8_sig",newline="") as file:
??? csv_reader = csv.reader(file)
遍歷列表
for item in csv_reader:
去掉第一個(gè)無(wú)用的信息,在循環(huán)外定義變量t=1
if t == 1:
??? ??? t = 0
??? ??? continue
字符串拼接,熱門(mén)話(huà)題在第一欄
str += item[0]
關(guān)閉文件
file.close()
口吃分詞
jieba_content = jieba.cut(str)
空間連接的join方法
join_content=" ".join(jieba_content)
打開(kāi)圖片
wei_bo = Image.open("logo.jpg")
找到輪廓
wei_bo_image = numpy.array(wei_bo)
制作生成的詞云
word_cloud = WordCloud(font_path="font1.TTF",background_color="white",mask = wei_bo_image).generate(join_content)
word_cloud.to_file("微博熱搜.jpg")
最終詞云展示:
微博logo圖片勾勒出文字云。字體大小代表受歡迎程度。字體越大,受歡迎程度越高。字體越小,受歡迎程度越低。
4.分析數據
想法:
1.將微博熱門(mén)話(huà)題存儲在txt文件中
2.讀取txt文件,使用jieba分詞進(jìn)行分詞,生成關(guān)鍵詞
3. 對 關(guān)鍵詞 執行頻率統計
4.按頻率降序對統計信息進(jìn)行排序關(guān)鍵詞
5. 將排序結果存儲在 csv 文件中以供以后操作
定義詞典
word_dic = {}
打開(kāi)文件,讀取數據
使用 open("1.txt", "r", encoding="utf-8") 作為文件:
txt = file.read()
文件.close()
jieba分詞數據
單詞 = jieba.lcut(txt)
循環(huán)數據
言歸正傳:
如果關(guān)鍵字數量為1,則不計入
如果 len(word) == 1:
繼續
否則頻率增加 1
別的:
word_dic[word] = word_dic.get(word, 0) + 1
將字典數據轉換為元組數據,用zip實(shí)現
word_zip = zip(word_dic.values(), word_dic.keys())
根據值從大到小對元組中的數據進(jìn)行排序
word_sort = list(排序(word_zip, reverse=True))
定義兩個(gè)數據存儲列表
list_1 = ["name", "count_name"]
list_2 = []
列表_2.追加(列表_1)
對于 word_sort 中的項目:
# 詞頻
計數 = 項目 [0]
#關(guān)鍵字
名稱(chēng) = 項目 [1]
list_1 = [名稱(chēng),計數]
列表_2.追加(列表_1)
寫(xiě)入文件
以open("微博熱搜關(guān)鍵詞詞頻統計.csv", "w", encoding="utf_8_sig", newline="")為文件:
csv_writer = csv.writer(文件)
遍歷list_2并寫(xiě)入每一行
對于 list_2 中的 i:
csv_writer.writerow(i)
5.生成繪圖
思路:根據熱搜關(guān)鍵詞的排序文件,提取頻率最高的前20位數據,繪制條形圖
導入繪圖工具包
將熊貓導入為 pd
將 matplotlib.pyplot 導入為 plt
定義繪圖樣式和顏色
plt.style.use('ggplot')
顏色1 = '#6D6D6D'
讀取排序文件
df = pd.read_csv("微博熱搜關(guān)鍵詞詞頻統計.csv",encoding="utf-8")
提取前 20 個(gè) 關(guān)鍵詞 和頻率
name1 = df.name[:20]
count1 = df.count_name[:20]
要繪制條形圖,請使用 range() 使 x 軸保持正確的順序
plt.bar(范圍(20),count1,tick_label = name1)
設置縱坐標范圍
plt.ylim(0,90)
顯示中文字體標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
標題
plt.title('微博熱搜關(guān)鍵詞詞頻統計',color = colors1)
x 軸標題,y 軸標題
plt.title('微博熱搜關(guān)鍵詞詞頻統計',color = colors1)
plt.xlabel('關(guān)鍵詞')
為每個(gè)條添加數字標簽
對于枚舉中的 x,y (list(count1)):
plt.text(x,y+1,'%s'%round(y,90),ha = 'center',color = colors1)
x軸關(guān)鍵字旋轉300度
plt.xticks(旋轉 = 300)
自動(dòng)控制空白邊距以顯示所有 x 軸坐標
plt.tight_layout()
保存圖片
plt.savefig('微博熱搜關(guān)鍵詞詞頻統計top20.png')
顯示圖像
plt.show()
繪圖結果顯示:
這次爬蟲(chóng)抓取了大約20組數據,每組數據對應50個(gè)熱搜榜。爬取時(shí)間為2020年1月1日9:30-21:00,每次爬取時(shí)間間隔為20-30分鐘。抓取這么多組數據的主要目的是為了做數據的動(dòng)態(tài)效果,展示過(guò)去一天微博熱搜的動(dòng)態(tài)變化。
數據動(dòng)態(tài)展示效果圖:
完整數據動(dòng)態(tài)效果視頻請參考微博熱搜數據動(dòng)態(tài)展示.mp4
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章:
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(網(wǎng)絡(luò )爬蟲(chóng)最基本的思路和處理方法(一)——1.)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 51 次瀏覽 ? 2022-02-05 09:12
1. 科普
一般搜索引擎處理的對象是互聯(lián)網(wǎng)的網(wǎng)頁(yè)。目前,網(wǎng)頁(yè)數量已達數億。因此,搜索引擎面臨的第一個(gè)問(wèn)題就是如何設計一個(gè)高效的下載系統?;ヂ?lián)網(wǎng)頁(yè)面的鏡像。網(wǎng)絡(luò )爬蟲(chóng)負責這個(gè)任務(wù)。
爬取網(wǎng)頁(yè)的過(guò)程其實(shí)和讀者平時(shí)使用IE瀏覽器瀏覽網(wǎng)頁(yè)的方式是一樣的。假設您在瀏覽器的地址欄中輸入此地址。打開(kāi)網(wǎng)頁(yè)的過(guò)程其實(shí)就是瀏覽器作為瀏覽的“客戶(hù)端”,向服務(wù)器端發(fā)出請求,將服務(wù)器端的文件“抓取”到本地,然后解釋并顯示出來(lái)。瀏覽器的作用是解析得到的HTML代碼,然后將原來(lái)的網(wǎng)頁(yè)轉換成我們看到的網(wǎng)站頁(yè)面。
網(wǎng)絡(luò )爬蟲(chóng)最基本的思想是:從一個(gè)頁(yè)面開(kāi)始,分析其中的url,提取出來(lái),然后通過(guò)這些鏈接尋找下一頁(yè)。如此來(lái)回。
2. 通用爬蟲(chóng)框架
@7))。@9) 和 . 重復剛才的故事。
3. 網(wǎng)址
爬蟲(chóng)處理的主要對象是URL。簡(jiǎn)單地說(shuō),url就是輸入的URL(例如:)。在了解 URL 之前先了解 URI。
Web 上可用的每個(gè)資源,例如 HTML 文檔、圖像、視頻剪輯、程序等,都由通用資源標識符 (URI) 定位。
一個(gè)URI通常由三部分組成:
訪(fǎng)問(wèn)資源的命名機制 存儲資源的資源的主機名 資源本身的名稱(chēng),由路徑表示
比如URI:
我們可以這樣解釋?zhuān)?br /> URL 是 URI 的子集。它是Uniform Resource Locator的縮寫(xiě),翻譯為“統一資源定位器”。
通俗的講,URL是描述Internet上信息資源的字符串,主要用于各種WWW客戶(hù)端程序和服務(wù)器程序中。
使用 URL 可以使用統一的格式來(lái)描述各種信息資源,包括文件、服務(wù)器地址和目錄。
URL的格式由三部分組成:
第一部分是協(xié)議(或服務(wù)模式) 第二部分是存儲資源的主機的IP地址(有時(shí)還包括端口號) 第三部分是主機資源的具體地址,如目錄和文件名等
第一部分和第二部分用“://”符號分隔
第二部分和第三部分用“/”符號隔開(kāi)
第 1 部分和第 2 部分缺一不可,第 3 部分有時(shí)可以省略 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(網(wǎng)絡(luò )爬蟲(chóng)最基本的思路和處理方法(一)——1.)
1. 科普
一般搜索引擎處理的對象是互聯(lián)網(wǎng)的網(wǎng)頁(yè)。目前,網(wǎng)頁(yè)數量已達數億。因此,搜索引擎面臨的第一個(gè)問(wèn)題就是如何設計一個(gè)高效的下載系統?;ヂ?lián)網(wǎng)頁(yè)面的鏡像。網(wǎng)絡(luò )爬蟲(chóng)負責這個(gè)任務(wù)。
爬取網(wǎng)頁(yè)的過(guò)程其實(shí)和讀者平時(shí)使用IE瀏覽器瀏覽網(wǎng)頁(yè)的方式是一樣的。假設您在瀏覽器的地址欄中輸入此地址。打開(kāi)網(wǎng)頁(yè)的過(guò)程其實(shí)就是瀏覽器作為瀏覽的“客戶(hù)端”,向服務(wù)器端發(fā)出請求,將服務(wù)器端的文件“抓取”到本地,然后解釋并顯示出來(lái)。瀏覽器的作用是解析得到的HTML代碼,然后將原來(lái)的網(wǎng)頁(yè)轉換成我們看到的網(wǎng)站頁(yè)面。
網(wǎng)絡(luò )爬蟲(chóng)最基本的思想是:從一個(gè)頁(yè)面開(kāi)始,分析其中的url,提取出來(lái),然后通過(guò)這些鏈接尋找下一頁(yè)。如此來(lái)回。
2. 通用爬蟲(chóng)框架
@7))。@9) 和 . 重復剛才的故事。
3. 網(wǎng)址
爬蟲(chóng)處理的主要對象是URL。簡(jiǎn)單地說(shuō),url就是輸入的URL(例如:)。在了解 URL 之前先了解 URI。
Web 上可用的每個(gè)資源,例如 HTML 文檔、圖像、視頻剪輯、程序等,都由通用資源標識符 (URI) 定位。
一個(gè)URI通常由三部分組成:
訪(fǎng)問(wèn)資源的命名機制 存儲資源的資源的主機名 資源本身的名稱(chēng),由路徑表示
比如URI:
我們可以這樣解釋?zhuān)?br /> URL 是 URI 的子集。它是Uniform Resource Locator的縮寫(xiě),翻譯為“統一資源定位器”。
通俗的講,URL是描述Internet上信息資源的字符串,主要用于各種WWW客戶(hù)端程序和服務(wù)器程序中。
使用 URL 可以使用統一的格式來(lái)描述各種信息資源,包括文件、服務(wù)器地址和目錄。
URL的格式由三部分組成:
第一部分是協(xié)議(或服務(wù)模式) 第二部分是存儲資源的主機的IP地址(有時(shí)還包括端口號) 第三部分是主機資源的具體地址,如目錄和文件名等
第一部分和第二部分用“://”符號分隔
第二部分和第三部分用“/”符號隔開(kāi)
第 1 部分和第 2 部分缺一不可,第 3 部分有時(shí)可以省略
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(抓取知乎所有用戶(hù)信息的爬蟲(chóng)代碼邏輯以及分析分析方法)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 66 次瀏覽 ? 2022-02-05 09:09
2021-11-27
今天用遞歸寫(xiě)了一個(gè)爬蟲(chóng),抓取知乎的所有用戶(hù)信息。源代碼放在github上。有興趣的同學(xué)可以下載看看。這里介紹一下代碼邏輯和分頁(yè)分析。首先,看網(wǎng)頁(yè)。,這里我隨機選擇一個(gè)大V作為入口,然后點(diǎn)擊他的關(guān)注列表,如圖
我們都知道 Python 很容易學(xué)習,但我們只是不知道如何學(xué)習它以及在哪里可以找到信息。在這里,python學(xué)習交流QQ群233539995,分享我精心準備的Python學(xué)習資料,0基礎到高級!希望大家在學(xué)習Python的道路上少走彎路!來(lái)吧!
注意我的爬蟲(chóng)全名是非登錄狀態(tài)。這里的fan list和follower list是后臺ajax請求獲取的數據(沒(méi)聽(tīng)說(shuō)過(guò)ajax的不要慌,ajax請求和普通瀏覽器請求沒(méi)什么區別,主要是偷偷發(fā)給服務(wù)器的)當我們?yōu)g覽網(wǎng)頁(yè)的時(shí)候請求是為了節省流量,減少請求次數,不然每次看新數據都會(huì )刷新網(wǎng)頁(yè),服務(wù)器壓力很大,所以我們有這個(gè)東西),然后我們找到粉絲列表和關(guān)注者列表的網(wǎng)址,很簡(jiǎn)單,點(diǎn)擊chrome瀏覽器下的頁(yè)碼開(kāi)關(guān)即可找到,如圖
很容易找到關(guān)注者和粉絲的 URL。讓我們來(lái)看看這些數據。這是粉絲數據的一個(gè)例子。如圖,是一段json
這里找到了粉絲的數據,但這不是用戶(hù)的詳細信息,只是部分數據,但是他提供了一個(gè)token_url,我們可以得到這個(gè)ID訪(fǎng)問(wèn)用戶(hù)的詳細信息,我們來(lái)看看如何提取每個(gè)用戶(hù)的詳細信息。在這里樓主發(fā)現,在看粉絲或者關(guān)注列表的時(shí)候,網(wǎng)頁(yè)會(huì )自動(dòng)觸發(fā)對用戶(hù)詳細信息的請求,如圖
本次獲取用戶(hù)詳細信息查詢(xún)的URL。我們來(lái)看看這個(gè)詳細信息的URL,如圖。
上面介紹了網(wǎng)頁(yè)的基本分析。先說(shuō)一下代碼的思路。本次爬蟲(chóng)使用遞歸,本次使用scrapy進(jìn)行爬取,存儲mogodb數據庫。
首先,我用了一個(gè)大V作為爬蟲(chóng)的第一個(gè)網(wǎng)頁(yè),然后分為三個(gè)步驟。第一步是爬取大V的詳細信息,然后存入數據庫。第二步是爬大V的粉絲。第三步是爬大V的粉絲(其實(shí)就是爬粉絲或者粉絲的token_url)。完成后,利用粉絲和關(guān)注者的爬取數據,構造他們每一個(gè)詳細信息的url,然后挖掘詳細信息存入數據庫。至此,第一步遞歸完成,接下來(lái)爬蟲(chóng)會(huì )從每個(gè)粉絲和粉絲開(kāi)始,分別爬取他們粉絲和粉絲的詳細數據,繼續遞歸。
代碼中還添加了一些自動(dòng)翻頁(yè)功能,有興趣的可以看看。以下是我們項目定義中要捕獲的數據:
import scrapyclass 知乎UserItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() answer_count = scrapy.Field()
#回答數article_count = scrapy.Field()
#Written 文章 number follower_count = scrapy.Field()
#關(guān)注粉絲數_count = scrapy.Field()
#有多少人關(guān)注了educations=scrapy.Field()
#教育背景描述 = scrapy.Field()
#個(gè)人描述位置 = scrapy.Field()
#Location url_token =scrapy.Field()
#知乎給每個(gè)用戶(hù)首??頁(yè)的唯一ID name=scrapy.Field()
#用戶(hù)昵稱(chēng)員工 = scrapy.Field()
#工作信息business=scrapy.Field()
#工作或業(yè)務(wù)信息的集合 user_type =scrapy.Field()
#用戶(hù)類(lèi)型,可以是個(gè)人、群組等。headline =scrapy.Field()
#個(gè)人主頁(yè)標簽 voteup_count = scrapy.Field()
#獲得的點(diǎn)贊數Thanks_count=scrapy.Field()
#感謝次數喜愛(ài)的_count = scrapy.Field()
#采集數量 avatar_url = scrapy.Field()
#頭像網(wǎng)址
代碼總共不到 80 行。運行一分鐘后,它捕獲了知乎 1000多個(gè)用戶(hù)的信息。這是結果圖片。
最近一直在忙別的事情,終于可以天天寫(xiě)爬蟲(chóng)了。不知道大家對這篇文章有沒(méi)有什么問(wèn)題,可以隨時(shí)跟我提。
最后要提的是,爬取一定要偽裝headers,里面有一些東西是服務(wù)器每次都會(huì )檢查的。
我們都知道 Python 很容易學(xué)習,但我們只是不知道如何學(xué)習它以及在哪里可以找到信息。在這里,python學(xué)習交流QQ群233539995,分享我精心準備的Python學(xué)習資料,0基礎到高級!希望大家在學(xué)習Python的道路上少走彎路!來(lái)吧!
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章: 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(抓取知乎所有用戶(hù)信息的爬蟲(chóng)代碼邏輯以及分析分析方法)
2021-11-27
今天用遞歸寫(xiě)了一個(gè)爬蟲(chóng),抓取知乎的所有用戶(hù)信息。源代碼放在github上。有興趣的同學(xué)可以下載看看。這里介紹一下代碼邏輯和分頁(yè)分析。首先,看網(wǎng)頁(yè)。,這里我隨機選擇一個(gè)大V作為入口,然后點(diǎn)擊他的關(guān)注列表,如圖
我們都知道 Python 很容易學(xué)習,但我們只是不知道如何學(xué)習它以及在哪里可以找到信息。在這里,python學(xué)習交流QQ群233539995,分享我精心準備的Python學(xué)習資料,0基礎到高級!希望大家在學(xué)習Python的道路上少走彎路!來(lái)吧!
注意我的爬蟲(chóng)全名是非登錄狀態(tài)。這里的fan list和follower list是后臺ajax請求獲取的數據(沒(méi)聽(tīng)說(shuō)過(guò)ajax的不要慌,ajax請求和普通瀏覽器請求沒(méi)什么區別,主要是偷偷發(fā)給服務(wù)器的)當我們?yōu)g覽網(wǎng)頁(yè)的時(shí)候請求是為了節省流量,減少請求次數,不然每次看新數據都會(huì )刷新網(wǎng)頁(yè),服務(wù)器壓力很大,所以我們有這個(gè)東西),然后我們找到粉絲列表和關(guān)注者列表的網(wǎng)址,很簡(jiǎn)單,點(diǎn)擊chrome瀏覽器下的頁(yè)碼開(kāi)關(guān)即可找到,如圖
很容易找到關(guān)注者和粉絲的 URL。讓我們來(lái)看看這些數據。這是粉絲數據的一個(gè)例子。如圖,是一段json
這里找到了粉絲的數據,但這不是用戶(hù)的詳細信息,只是部分數據,但是他提供了一個(gè)token_url,我們可以得到這個(gè)ID訪(fǎng)問(wèn)用戶(hù)的詳細信息,我們來(lái)看看如何提取每個(gè)用戶(hù)的詳細信息。在這里樓主發(fā)現,在看粉絲或者關(guān)注列表的時(shí)候,網(wǎng)頁(yè)會(huì )自動(dòng)觸發(fā)對用戶(hù)詳細信息的請求,如圖
本次獲取用戶(hù)詳細信息查詢(xún)的URL。我們來(lái)看看這個(gè)詳細信息的URL,如圖。
上面介紹了網(wǎng)頁(yè)的基本分析。先說(shuō)一下代碼的思路。本次爬蟲(chóng)使用遞歸,本次使用scrapy進(jìn)行爬取,存儲mogodb數據庫。
首先,我用了一個(gè)大V作為爬蟲(chóng)的第一個(gè)網(wǎng)頁(yè),然后分為三個(gè)步驟。第一步是爬取大V的詳細信息,然后存入數據庫。第二步是爬大V的粉絲。第三步是爬大V的粉絲(其實(shí)就是爬粉絲或者粉絲的token_url)。完成后,利用粉絲和關(guān)注者的爬取數據,構造他們每一個(gè)詳細信息的url,然后挖掘詳細信息存入數據庫。至此,第一步遞歸完成,接下來(lái)爬蟲(chóng)會(huì )從每個(gè)粉絲和粉絲開(kāi)始,分別爬取他們粉絲和粉絲的詳細數據,繼續遞歸。
代碼中還添加了一些自動(dòng)翻頁(yè)功能,有興趣的可以看看。以下是我們項目定義中要捕獲的數據:
import scrapyclass 知乎UserItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() answer_count = scrapy.Field()
#回答數article_count = scrapy.Field()
#Written 文章 number follower_count = scrapy.Field()
#關(guān)注粉絲數_count = scrapy.Field()
#有多少人關(guān)注了educations=scrapy.Field()
#教育背景描述 = scrapy.Field()
#個(gè)人描述位置 = scrapy.Field()
#Location url_token =scrapy.Field()
#知乎給每個(gè)用戶(hù)首??頁(yè)的唯一ID name=scrapy.Field()
#用戶(hù)昵稱(chēng)員工 = scrapy.Field()
#工作信息business=scrapy.Field()
#工作或業(yè)務(wù)信息的集合 user_type =scrapy.Field()
#用戶(hù)類(lèi)型,可以是個(gè)人、群組等。headline =scrapy.Field()
#個(gè)人主頁(yè)標簽 voteup_count = scrapy.Field()
#獲得的點(diǎn)贊數Thanks_count=scrapy.Field()
#感謝次數喜愛(ài)的_count = scrapy.Field()
#采集數量 avatar_url = scrapy.Field()
#頭像網(wǎng)址
代碼總共不到 80 行。運行一分鐘后,它捕獲了知乎 1000多個(gè)用戶(hù)的信息。這是結果圖片。
最近一直在忙別的事情,終于可以天天寫(xiě)爬蟲(chóng)了。不知道大家對這篇文章有沒(méi)有什么問(wèn)題,可以隨時(shí)跟我提。
最后要提的是,爬取一定要偽裝headers,里面有一些東西是服務(wù)器每次都會(huì )檢查的。
我們都知道 Python 很容易學(xué)習,但我們只是不知道如何學(xué)習它以及在哪里可以找到信息。在這里,python學(xué)習交流QQ群233539995,分享我精心準備的Python學(xué)習資料,0基礎到高級!希望大家在學(xué)習Python的道路上少走彎路!來(lái)吧!
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章:
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(關(guān)于爬蟲(chóng)的知識后,你了解多少?(一) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 59 次瀏覽 ? 2022-02-05 00:04
)
如今,大前端理念已經(jīng)深入人心,需要涉及的知識很多。所以,對于現在的前端來(lái)說(shuō),也是不可抗拒的。在修煉吸星大法時(shí),盡可能多地吸收知識,最終達到物盡其用的效果。
最近也在學(xué)習爬蟲(chóng),因為之前項目中需要用到的地鐵信息數據不是爬蟲(chóng)爬下來(lái)的數據,而是直接復制過(guò)來(lái)的。
雖然這些數據暫時(shí)不會(huì )有太大變化,但感覺(jué)還是有點(diǎn)低。所以在了解了爬蟲(chóng)之后,打算和大家討論交流,然后直接進(jìn)入正題。
首先說(shuō)一下爬蟲(chóng)和Robots協(xié)議是什么
然后介紹爬蟲(chóng)的基本流程
最后根據實(shí)際栗子爬個(gè)豆瓣最近上映的電影來(lái)試試小刀
2、爬蟲(chóng)和機器人協(xié)議
首先看定義:爬蟲(chóng)是自動(dòng)獲取網(wǎng)頁(yè)內容的程序。它是搜索引擎的重要組成部分,因此搜索引擎優(yōu)化主要針對爬蟲(chóng)進(jìn)行優(yōu)化。
下面我們來(lái)看看Robots協(xié)議的介紹。robots.txt 是文本文件,robots.txt 是協(xié)議,而不是命令。
robots.txt 是爬蟲(chóng)要查看的第一個(gè)文件。robots.txt 告訴爬蟲(chóng)可以在服務(wù)器上查看哪些文件。爬蟲(chóng)機器人會(huì )根據文件內容確定訪(fǎng)問(wèn)范圍。
下圖是豆瓣電影頁(yè)面列出的robots協(xié)議的訪(fǎng)問(wèn)范圍。
爬蟲(chóng)和機器人協(xié)議密切相關(guān)。如果您看到不允許抓取的頁(yè)面,請不要抓取它們。萬(wàn)一涉及到用戶(hù)隱私的某些方面,稍后會(huì )被發(fā)現并帶到合法渠道。
因此,業(yè)內每個(gè)人都認可這個(gè) Robots 協(xié)議。不想爬網(wǎng)頁(yè)就別爬了,上網(wǎng)就可以安寧了。
有點(diǎn)跑題了,我們看下面一張圖,簡(jiǎn)單梳理一下上面提到的內容。
其實(shí)有人會(huì )問(wèn),爬行動(dòng)物到底在爬什么?
這是一個(gè)非常有見(jiàn)地的問(wèn)題。說(shuō)白了就是爬蟲(chóng)拿到的那段html代碼,所以這對我們來(lái)說(shuō)并不陌生,只要我們把它轉換成DOM樹(shù)就行了。
所以,現在看上圖的右半部分,是一張對比圖。
左邊的那個(gè)沒(méi)有受限的機器人協(xié)議。從邏輯上講,admin/private和tmp這三個(gè)文件夾是不能被抓到的,但是因為沒(méi)有Robots協(xié)議,人就可以肆無(wú)忌憚的爬了。
從右側看,Robots 協(xié)議是有限的。相反,像谷歌這樣的搜索引擎,也是通過(guò) Robots.txt 文件來(lái)查看哪些是抓不到的,然后去 admin 或者 private 的時(shí)候直接跳過(guò)。去搶吧。
好了,介紹到此為止。凡是不包括真刀真槍的,都只是紙上談兵。
3、爬蟲(chóng)基本流程
其實(shí)對于爬蟲(chóng)的使用來(lái)說(shuō),過(guò)程無(wú)非就是這四個(gè)步驟。
專(zhuān)用數據
數據存儲
啟動(dòng)服務(wù)
渲染數據
專(zhuān)用數據
現在到了激動(dòng)人心的部分,不要停下來(lái),跟著(zhù)我,敲出一頁(yè)爬豆瓣電影,供自己欣賞。
我們先來(lái)看看整體的目錄結構。
既然是抓數據,就得用業(yè)界知名的神器——request
請求工件
那么如何使用request,我們一起聽(tīng)風(fēng)看代碼
// 使用起來(lái)超簡(jiǎn)單let request = require('request');
request('http://www.baidu.com', function (error, response, body) { console.log('error:', error); // 當有錯誤發(fā)生時(shí)打印錯誤日志 console.log('statusCode:', response && response.statusCode); // 打印響應狀態(tài)碼 console.log('body:', body); // 打印百度頁(yè)面的html代碼});
看了上面的代碼,是不是還覺(jué)得不明顯。小伙伴們,html代碼已經(jīng)出現在你們面前了,不要猶豫,只要把它變成熟悉的DOM,就可以為所欲為。
于是,cheerio 出道,大家都稱(chēng)它為 Node 版的 jq。你可以完全按照jq的習慣來(lái)操作DOM。
下面不再走彎路,一起來(lái)寫(xiě)爬蟲(chóng)吧!
閱讀內容
首頁(yè)應該先分析豆瓣電影的頁(yè)面,也就是熱映的電影,我們先來(lái)看看DOM結構。
好了,讀完噻吩后,我們需要的內容也標注出來(lái)了,然后進(jìn)入read.js文件,一步步開(kāi)始舔。
// read.js文件
// request-promise是讓request支持了promise的語(yǔ)法,可以說(shuō)是request的小弟const rp = require('request-promise');// 將抓取頁(yè)面的html代碼轉為DOM,可以稱(chēng)之為是node版的jqconst cheerio = require('cheerio');// 這個(gè)是為了在調試時(shí)查看日志const debug = require('debug')('movie:read');
// 讀取頁(yè)面的方法,重點(diǎn)來(lái)了const read = async (url) => { debug('開(kāi)始讀取最近上映的電影');
const opts = { url, // 目標頁(yè)面 transform: body => { // body為目標頁(yè)面抓取到的html代碼 // 通過(guò)cheerio.load方法可以把html代碼轉換成可以操作的DOM結構 return cheerio.load(body); } };
return rp(opts).then($ => { let result = []; // 結果數組 // 遍歷這些熱映電影的li $('#screening li.ui-slide-item').each((index, item) => { let ele = $(item); let name = ele.data('title'); let score = ele.data('rate') || '暫無(wú)評分'; let href = ele.find('.poster a').attr('href'); let image = ele.find('img').attr('src'); // 影片id可以從影片href中獲取到 let id = href && href.match(/(\d+)/)[1]; // 為了防止豆瓣防盜鏈導致裂圖,換成webp格式加載圖片 image = image && image.replace(/jpg$/, 'webp');
if (!name || !image || !href) { return; }
result.push({ name, score, href, image, id }); debug(`正在讀取電影:${name}`); }); // 返回結果數組 return result; });};// 導出方法module.exports = read;
寫(xiě)完代碼,讓我們回憶一下你做了什么。
4、數據存儲
這里我們使用mysql建一個(gè)數據庫來(lái)存儲數據,不懂的沒(méi)關(guān)系,我先一步一步來(lái)。我們首先安裝 XAMPP 和 Navicat 可視化數據庫管理工具,安裝完成后,按照下面的說(shuō)明進(jìn)行操作。
XAMPP啟動(dòng)mysql
Navicat 連接數據庫并創(chuàng )建表
幾句話(huà)可能不像有圖有真相那么真實(shí)。我們先來(lái)看看圖片。
嗯,看圖的時(shí)代到此結束。我真的很慚愧消耗了大量的流量?,F在讓我們回到編碼階段。
連接到數據庫
首先,我們需要在 src 目錄下創(chuàng )建一個(gè) sql 文件。它需要和我們剛剛創(chuàng )建的數據庫同名,所以我們稱(chēng)之為my_movie.sql(當然目錄結構已經(jīng)創(chuàng )建好了)
然后,回到 db.js 文件,編寫(xiě)連接數據庫的代碼
// db.js
const mysql = require('mysql');const bluebird = require('bluebird');
// 創(chuàng )建連接const connection = mysql.createConnection({ host: 'localhost', // host port: 3306, // 端口號默認3306 database: 'my_movie', // 對應的數據庫 user: 'root', password: ''});
connection.connect(); // 連接數據庫
// bluebird是為了方便支持promise語(yǔ)法化// 然后直接把數據庫的query查詢(xún)語(yǔ)句導出方便之后調用module.exports = bluebird.promisify(connection.query).bind(connection);
上面的代碼已經(jīng)創(chuàng )建了連接Mysql數據庫的操作。接下來(lái),不要放慢速度,將內容直接寫(xiě)入數據庫。
寫(xiě)入數據庫
這時(shí)候我們來(lái)看看write.js這個(gè)文件。是的,顧名思義,就是用來(lái)寫(xiě)數據庫的,直接上代碼
// write.js文件
// 從db.js那里導入query方法const query = require('./db');const debug = require('debug')('movie:write');// 寫(xiě)入數據庫的方法const write = async (movies) => { debug('開(kāi)始寫(xiě)入電影');
// movies即為read.js讀取出來(lái)的結果數組 for (let movie of movies) { // 通過(guò)query方法去查詢(xún)一下是不是已經(jīng)在數據庫里存過(guò)了 let oldMovie = await query('SELECT * FROM movies WHERE id=? LIMIT 1', [movie.id]);
// sql查詢(xún)語(yǔ)句返回的是一個(gè)數組,如果不為空數組的話(huà)就表示有數據存過(guò) // 直接就進(jìn)行更新操作了 if (Array.isArray(oldMovie) && oldMovie.length) { // 更新movies表里的數據 let old = oldMovie[0]; await query('UPDATE movies SET name=?,href=?,image=?,score=? WHERE id=?', [movie.name, movie.href, movie.image, movie.score, old.id]); } else { // 插入內容到movies表 await query('INSERT INTO movies(id,name,href,image,score) VALUES(?,?,?,?,?)', [movie.id, movie.name, movie.href, movie.image, movie.score]); }
debug(`正在寫(xiě)入電影:${movie.name}`); }};
module.exports = write;
上面寫(xiě)的可能有點(diǎn)混亂,畢竟純前端很少寫(xiě)SQL語(yǔ)句。不過(guò)不要害羞,我先把上面的代碼整理好之后再簡(jiǎn)單介紹一下SQL語(yǔ)句部分。
write.js 到底寫(xiě)了什么?
好了,上面也實(shí)現了寫(xiě)入數據庫的方法。接下來(lái),趁熱打鐵,稍微聊聊SQL語(yǔ)句。
SQL語(yǔ)句學(xué)習
? 表示占位符。順便說(shuō)一下,我將簡(jiǎn)要介紹將在 SQL 語(yǔ)句中使用的語(yǔ)法,以及無(wú)處不在的增刪改查。
插入數據
語(yǔ)法: INSERT INTO 表名(列名) VALUES(列名值)栗子: INSERT INTO tags(name,id,url) VALUES('爬蟲(chóng)',10,'https://news.so.com/hotnews')解釋?zhuān)? 向標簽表(tags)里插入一條,姓名,id和訪(fǎng)問(wèn)地址分別為VALUES內對應的值
更新數據
語(yǔ)法: UPDATE 表名 SET 列名=更新值 WHERE 更新條件栗子: UPDATE articles SET title='你好,世界',content='世界沒(méi)你想的那么糟!' WHERE id=1解釋?zhuān)? 更新id為1的文章,標題和內容都進(jìn)行了修改
刪除數據
語(yǔ)法: DELETE FROM 表名 WHERE 刪除條件栗子: DELETE FROM tags WHERE id=11解釋?zhuān)? 從標簽表(tags)里刪除id為11的數據
查詢(xún)
語(yǔ)法: SELECT 列名 FROM 表名 WHERE 查詢(xún)條件 ORDER BY 排序列名栗子: SELECT name,title,content FROM tags WHERE id=8解釋?zhuān)? 查詢(xún)id為8的標簽表里對應信息
至此,我已經(jīng)把所有的讀寫(xiě)方法都寫(xiě)完了,所以大家一定是有點(diǎn)累了。是時(shí)候測試結果了,否則都是廢話(huà)
5、執行讀寫(xiě)操作
現在來(lái)到 index.js 并開(kāi)始檢查它。
// index.js文件
const read = require('./read');const write = require('./write');const url = 'https://movie.douban.com'; // 目標頁(yè)面
(async () => { // 異步抓取目標頁(yè)面 const movies = await read(url); // 寫(xiě)入數據到數據庫 await write(movies); // 完畢后退出程序 process.exit();})();
完了,執行一下看看效果如何,直接上圖
代碼已執行。接下來(lái)回到Navicat,看看數據是否已經(jīng)寫(xiě)入。我們用圖片來(lái)說(shuō)話(huà)。
至此,我們已經(jīng)完成了數據采集和存儲操作,但似乎還缺少什么?
也就是我們需要寫(xiě)一個(gè)頁(yè)面來(lái)展示它,因為爬取和寫(xiě)數據只允許在node環(huán)境下進(jìn)行。所以我們還要創(chuàng )建一個(gè)web服務(wù)來(lái)顯示頁(yè)面,堅持下去很快就OK了,加油。
6、啟動(dòng)服務(wù)
既然我們要創(chuàng )建一個(gè) web 服務(wù),讓我們開(kāi)始編寫(xiě) server.js 的內容
服務(wù)器服務(wù)
// server.js文件
const express = require('express');const path = require('path');const query = require('../src/db');const app = express();
// 設置模板引擎app.set('view engine', 'html');app.set('views', path.join(__dirname, 'views'));app.engine('html', require('ejs').__express);
// 首頁(yè)路由app.get('/', async (req, res) => { // 通過(guò)SQL查詢(xún)語(yǔ)句拿到庫里的movies表數據 const movies = await query('SELECT * FROM movies'); // 渲染首頁(yè)模板并把movies數據傳過(guò)去 res.render('index', { movies });});// 監聽(tīng)localhost:9000端口app.listen(9000);
寫(xiě)完服務(wù)端服務(wù),我們再來(lái)看看 index.html 模板。這是最后一件事。寫(xiě)完,就大功告成了。
7、渲染數據
// index.html
熱映的電影 正在熱映的電影 %=movie.image% <p class="score">評分: </a>
</p>
通過(guò)模板引擎遍歷movies數組,然后渲染
現在,看看最終效果
和你一起來(lái)到這里是緣分。我很高興經(jīng)歷了這么長(cháng)時(shí)間的文章 學(xué)習。每個(gè)人都應該對爬行動(dòng)物的知識有一個(gè)很好的了解。
對了,這里是代碼地址:爬蟲(chóng)研究/電影
為了您的方便,敲敲敲。
感謝閱讀,886。
查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(關(guān)于爬蟲(chóng)的知識后,你了解多少?(一)
)
如今,大前端理念已經(jīng)深入人心,需要涉及的知識很多。所以,對于現在的前端來(lái)說(shuō),也是不可抗拒的。在修煉吸星大法時(shí),盡可能多地吸收知識,最終達到物盡其用的效果。
最近也在學(xué)習爬蟲(chóng),因為之前項目中需要用到的地鐵信息數據不是爬蟲(chóng)爬下來(lái)的數據,而是直接復制過(guò)來(lái)的。
雖然這些數據暫時(shí)不會(huì )有太大變化,但感覺(jué)還是有點(diǎn)低。所以在了解了爬蟲(chóng)之后,打算和大家討論交流,然后直接進(jìn)入正題。
首先說(shuō)一下爬蟲(chóng)和Robots協(xié)議是什么
然后介紹爬蟲(chóng)的基本流程
最后根據實(shí)際栗子爬個(gè)豆瓣最近上映的電影來(lái)試試小刀
2、爬蟲(chóng)和機器人協(xié)議
首先看定義:爬蟲(chóng)是自動(dòng)獲取網(wǎng)頁(yè)內容的程序。它是搜索引擎的重要組成部分,因此搜索引擎優(yōu)化主要針對爬蟲(chóng)進(jìn)行優(yōu)化。
下面我們來(lái)看看Robots協(xié)議的介紹。robots.txt 是文本文件,robots.txt 是協(xié)議,而不是命令。
robots.txt 是爬蟲(chóng)要查看的第一個(gè)文件。robots.txt 告訴爬蟲(chóng)可以在服務(wù)器上查看哪些文件。爬蟲(chóng)機器人會(huì )根據文件內容確定訪(fǎng)問(wèn)范圍。
下圖是豆瓣電影頁(yè)面列出的robots協(xié)議的訪(fǎng)問(wèn)范圍。
爬蟲(chóng)和機器人協(xié)議密切相關(guān)。如果您看到不允許抓取的頁(yè)面,請不要抓取它們。萬(wàn)一涉及到用戶(hù)隱私的某些方面,稍后會(huì )被發(fā)現并帶到合法渠道。
因此,業(yè)內每個(gè)人都認可這個(gè) Robots 協(xié)議。不想爬網(wǎng)頁(yè)就別爬了,上網(wǎng)就可以安寧了。
有點(diǎn)跑題了,我們看下面一張圖,簡(jiǎn)單梳理一下上面提到的內容。
其實(shí)有人會(huì )問(wèn),爬行動(dòng)物到底在爬什么?
這是一個(gè)非常有見(jiàn)地的問(wèn)題。說(shuō)白了就是爬蟲(chóng)拿到的那段html代碼,所以這對我們來(lái)說(shuō)并不陌生,只要我們把它轉換成DOM樹(shù)就行了。
所以,現在看上圖的右半部分,是一張對比圖。
左邊的那個(gè)沒(méi)有受限的機器人協(xié)議。從邏輯上講,admin/private和tmp這三個(gè)文件夾是不能被抓到的,但是因為沒(méi)有Robots協(xié)議,人就可以肆無(wú)忌憚的爬了。
從右側看,Robots 協(xié)議是有限的。相反,像谷歌這樣的搜索引擎,也是通過(guò) Robots.txt 文件來(lái)查看哪些是抓不到的,然后去 admin 或者 private 的時(shí)候直接跳過(guò)。去搶吧。
好了,介紹到此為止。凡是不包括真刀真槍的,都只是紙上談兵。
3、爬蟲(chóng)基本流程
其實(shí)對于爬蟲(chóng)的使用來(lái)說(shuō),過(guò)程無(wú)非就是這四個(gè)步驟。
專(zhuān)用數據
數據存儲
啟動(dòng)服務(wù)
渲染數據
專(zhuān)用數據
現在到了激動(dòng)人心的部分,不要停下來(lái),跟著(zhù)我,敲出一頁(yè)爬豆瓣電影,供自己欣賞。
我們先來(lái)看看整體的目錄結構。
既然是抓數據,就得用業(yè)界知名的神器——request
請求工件
那么如何使用request,我們一起聽(tīng)風(fēng)看代碼
// 使用起來(lái)超簡(jiǎn)單let request = require('request');
request('http://www.baidu.com', function (error, response, body) { console.log('error:', error); // 當有錯誤發(fā)生時(shí)打印錯誤日志 console.log('statusCode:', response && response.statusCode); // 打印響應狀態(tài)碼 console.log('body:', body); // 打印百度頁(yè)面的html代碼});
看了上面的代碼,是不是還覺(jué)得不明顯。小伙伴們,html代碼已經(jīng)出現在你們面前了,不要猶豫,只要把它變成熟悉的DOM,就可以為所欲為。
于是,cheerio 出道,大家都稱(chēng)它為 Node 版的 jq。你可以完全按照jq的習慣來(lái)操作DOM。
下面不再走彎路,一起來(lái)寫(xiě)爬蟲(chóng)吧!
閱讀內容
首頁(yè)應該先分析豆瓣電影的頁(yè)面,也就是熱映的電影,我們先來(lái)看看DOM結構。
好了,讀完噻吩后,我們需要的內容也標注出來(lái)了,然后進(jìn)入read.js文件,一步步開(kāi)始舔。
// read.js文件
// request-promise是讓request支持了promise的語(yǔ)法,可以說(shuō)是request的小弟const rp = require('request-promise');// 將抓取頁(yè)面的html代碼轉為DOM,可以稱(chēng)之為是node版的jqconst cheerio = require('cheerio');// 這個(gè)是為了在調試時(shí)查看日志const debug = require('debug')('movie:read');
// 讀取頁(yè)面的方法,重點(diǎn)來(lái)了const read = async (url) => { debug('開(kāi)始讀取最近上映的電影');
const opts = { url, // 目標頁(yè)面 transform: body => { // body為目標頁(yè)面抓取到的html代碼 // 通過(guò)cheerio.load方法可以把html代碼轉換成可以操作的DOM結構 return cheerio.load(body); } };
return rp(opts).then($ => { let result = []; // 結果數組 // 遍歷這些熱映電影的li $('#screening li.ui-slide-item').each((index, item) => { let ele = $(item); let name = ele.data('title'); let score = ele.data('rate') || '暫無(wú)評分'; let href = ele.find('.poster a').attr('href'); let image = ele.find('img').attr('src'); // 影片id可以從影片href中獲取到 let id = href && href.match(/(\d+)/)[1]; // 為了防止豆瓣防盜鏈導致裂圖,換成webp格式加載圖片 image = image && image.replace(/jpg$/, 'webp');
if (!name || !image || !href) { return; }
result.push({ name, score, href, image, id }); debug(`正在讀取電影:${name}`); }); // 返回結果數組 return result; });};// 導出方法module.exports = read;
寫(xiě)完代碼,讓我們回憶一下你做了什么。
4、數據存儲
這里我們使用mysql建一個(gè)數據庫來(lái)存儲數據,不懂的沒(méi)關(guān)系,我先一步一步來(lái)。我們首先安裝 XAMPP 和 Navicat 可視化數據庫管理工具,安裝完成后,按照下面的說(shuō)明進(jìn)行操作。
XAMPP啟動(dòng)mysql
Navicat 連接數據庫并創(chuàng )建表
幾句話(huà)可能不像有圖有真相那么真實(shí)。我們先來(lái)看看圖片。
嗯,看圖的時(shí)代到此結束。我真的很慚愧消耗了大量的流量?,F在讓我們回到編碼階段。
連接到數據庫
首先,我們需要在 src 目錄下創(chuàng )建一個(gè) sql 文件。它需要和我們剛剛創(chuàng )建的數據庫同名,所以我們稱(chēng)之為my_movie.sql(當然目錄結構已經(jīng)創(chuàng )建好了)
然后,回到 db.js 文件,編寫(xiě)連接數據庫的代碼
// db.js
const mysql = require('mysql');const bluebird = require('bluebird');
// 創(chuàng )建連接const connection = mysql.createConnection({ host: 'localhost', // host port: 3306, // 端口號默認3306 database: 'my_movie', // 對應的數據庫 user: 'root', password: ''});
connection.connect(); // 連接數據庫
// bluebird是為了方便支持promise語(yǔ)法化// 然后直接把數據庫的query查詢(xún)語(yǔ)句導出方便之后調用module.exports = bluebird.promisify(connection.query).bind(connection);
上面的代碼已經(jīng)創(chuàng )建了連接Mysql數據庫的操作。接下來(lái),不要放慢速度,將內容直接寫(xiě)入數據庫。
寫(xiě)入數據庫
這時(shí)候我們來(lái)看看write.js這個(gè)文件。是的,顧名思義,就是用來(lái)寫(xiě)數據庫的,直接上代碼
// write.js文件
// 從db.js那里導入query方法const query = require('./db');const debug = require('debug')('movie:write');// 寫(xiě)入數據庫的方法const write = async (movies) => { debug('開(kāi)始寫(xiě)入電影');
// movies即為read.js讀取出來(lái)的結果數組 for (let movie of movies) { // 通過(guò)query方法去查詢(xún)一下是不是已經(jīng)在數據庫里存過(guò)了 let oldMovie = await query('SELECT * FROM movies WHERE id=? LIMIT 1', [movie.id]);
// sql查詢(xún)語(yǔ)句返回的是一個(gè)數組,如果不為空數組的話(huà)就表示有數據存過(guò) // 直接就進(jìn)行更新操作了 if (Array.isArray(oldMovie) && oldMovie.length) { // 更新movies表里的數據 let old = oldMovie[0]; await query('UPDATE movies SET name=?,href=?,image=?,score=? WHERE id=?', [movie.name, movie.href, movie.image, movie.score, old.id]); } else { // 插入內容到movies表 await query('INSERT INTO movies(id,name,href,image,score) VALUES(?,?,?,?,?)', [movie.id, movie.name, movie.href, movie.image, movie.score]); }
debug(`正在寫(xiě)入電影:${movie.name}`); }};
module.exports = write;
上面寫(xiě)的可能有點(diǎn)混亂,畢竟純前端很少寫(xiě)SQL語(yǔ)句。不過(guò)不要害羞,我先把上面的代碼整理好之后再簡(jiǎn)單介紹一下SQL語(yǔ)句部分。
write.js 到底寫(xiě)了什么?
好了,上面也實(shí)現了寫(xiě)入數據庫的方法。接下來(lái),趁熱打鐵,稍微聊聊SQL語(yǔ)句。
SQL語(yǔ)句學(xué)習
? 表示占位符。順便說(shuō)一下,我將簡(jiǎn)要介紹將在 SQL 語(yǔ)句中使用的語(yǔ)法,以及無(wú)處不在的增刪改查。
插入數據
語(yǔ)法: INSERT INTO 表名(列名) VALUES(列名值)栗子: INSERT INTO tags(name,id,url) VALUES('爬蟲(chóng)',10,'https://news.so.com/hotnews')解釋?zhuān)? 向標簽表(tags)里插入一條,姓名,id和訪(fǎng)問(wèn)地址分別為VALUES內對應的值
更新數據
語(yǔ)法: UPDATE 表名 SET 列名=更新值 WHERE 更新條件栗子: UPDATE articles SET title='你好,世界',content='世界沒(méi)你想的那么糟!' WHERE id=1解釋?zhuān)? 更新id為1的文章,標題和內容都進(jìn)行了修改
刪除數據
語(yǔ)法: DELETE FROM 表名 WHERE 刪除條件栗子: DELETE FROM tags WHERE id=11解釋?zhuān)? 從標簽表(tags)里刪除id為11的數據
查詢(xún)
語(yǔ)法: SELECT 列名 FROM 表名 WHERE 查詢(xún)條件 ORDER BY 排序列名栗子: SELECT name,title,content FROM tags WHERE id=8解釋?zhuān)? 查詢(xún)id為8的標簽表里對應信息
至此,我已經(jīng)把所有的讀寫(xiě)方法都寫(xiě)完了,所以大家一定是有點(diǎn)累了。是時(shí)候測試結果了,否則都是廢話(huà)
5、執行讀寫(xiě)操作
現在來(lái)到 index.js 并開(kāi)始檢查它。
// index.js文件
const read = require('./read');const write = require('./write');const url = 'https://movie.douban.com'; // 目標頁(yè)面
(async () => { // 異步抓取目標頁(yè)面 const movies = await read(url); // 寫(xiě)入數據到數據庫 await write(movies); // 完畢后退出程序 process.exit();})();
完了,執行一下看看效果如何,直接上圖
代碼已執行。接下來(lái)回到Navicat,看看數據是否已經(jīng)寫(xiě)入。我們用圖片來(lái)說(shuō)話(huà)。
至此,我們已經(jīng)完成了數據采集和存儲操作,但似乎還缺少什么?
也就是我們需要寫(xiě)一個(gè)頁(yè)面來(lái)展示它,因為爬取和寫(xiě)數據只允許在node環(huán)境下進(jìn)行。所以我們還要創(chuàng )建一個(gè)web服務(wù)來(lái)顯示頁(yè)面,堅持下去很快就OK了,加油。
6、啟動(dòng)服務(wù)
既然我們要創(chuàng )建一個(gè) web 服務(wù),讓我們開(kāi)始編寫(xiě) server.js 的內容
服務(wù)器服務(wù)
// server.js文件
const express = require('express');const path = require('path');const query = require('../src/db');const app = express();
// 設置模板引擎app.set('view engine', 'html');app.set('views', path.join(__dirname, 'views'));app.engine('html', require('ejs').__express);
// 首頁(yè)路由app.get('/', async (req, res) => { // 通過(guò)SQL查詢(xún)語(yǔ)句拿到庫里的movies表數據 const movies = await query('SELECT * FROM movies'); // 渲染首頁(yè)模板并把movies數據傳過(guò)去 res.render('index', { movies });});// 監聽(tīng)localhost:9000端口app.listen(9000);
寫(xiě)完服務(wù)端服務(wù),我們再來(lái)看看 index.html 模板。這是最后一件事。寫(xiě)完,就大功告成了。
7、渲染數據
// index.html
熱映的電影 正在熱映的電影 %=movie.image% <p class="score">評分: </a>
</p>
通過(guò)模板引擎遍歷movies數組,然后渲染
現在,看看最終效果
和你一起來(lái)到這里是緣分。我很高興經(jīng)歷了這么長(cháng)時(shí)間的文章 學(xué)習。每個(gè)人都應該對爬行動(dòng)物的知識有一個(gè)很好的了解。
對了,這里是代碼地址:爬蟲(chóng)研究/電影
為了您的方便,敲敲敲。
感謝閱讀,886。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件如何用c#實(shí)現網(wǎng)站數據的抓???)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2022-02-04 18:34
優(yōu)采云云端采集網(wǎng)絡(luò )爬蟲(chóng)軟件如何使用c#實(shí)現網(wǎng)站數據抓???如何使用c#實(shí)現網(wǎng)站數據抓???首先需要明確:網(wǎng)站的任何頁(yè)面,無(wú)論是php、jsp、aspx等動(dòng)態(tài)頁(yè)面還是后臺程序生成的靜態(tài)頁(yè)面,都可以在瀏覽器。所以當你想開(kāi)發(fā)一個(gè)data采集程序時(shí),你首先要了解你要采集的網(wǎng)站的首頁(yè)結構(HTML)。一旦您熟悉了 網(wǎng)站 中您想要 采集 數據的 HTML 源文件的內容,程序的其余部分就很容易了。因為C#對網(wǎng)站數據采集的原理是“把你要的頁(yè)面的HTML文件下載到采集,
這樣,整個(gè)采集的工作就會(huì )在一個(gè)段落中完成。先說(shuō)怎么抓取吧:1、抓取通用內容需要三個(gè)類(lèi):WebRequest、WebResponse、StreamReader 需要的命名空間:System.Net、System.IO 核心代碼:WebRequest 創(chuàng )建是靜態(tài)方法,參數是待抓取網(wǎng)頁(yè)的網(wǎng)址;編碼指定編碼。Encoding中有ASCII、UTF32、UTF8等全局編碼,但是沒(méi)有g(shù)b2312的encoding屬性,所以我們使用GetEncoding來(lái)獲取gb2312編碼。優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件2、抓取圖片或其他二進(jìn)制文件(如文件) 需要四個(gè)類(lèi):WebRequest、WebResponse、Stream、FileStream 需要的命名空間:System .Net、System .IO核心代碼:使用Stream讀取3、 抓取網(wǎng)頁(yè)內容POST方法抓取網(wǎng)頁(yè)時(shí),有時(shí)需要通過(guò)Post向服務(wù)器發(fā)送一些數據,在網(wǎng)頁(yè)抓取程序中添加如下代碼,實(shí)現向服務(wù)器發(fā)送用戶(hù)名和密碼:優(yōu)采云Cloud采集Web爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向 抓取網(wǎng)頁(yè)時(shí),成功登錄服務(wù)器應用系統后,應用系統可能會(huì )重定向網(wǎng)頁(yè)通過(guò) Response.Redirect。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。實(shí)現post用戶(hù)名和密碼到服務(wù)器:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向抓取網(wǎng)頁(yè)時(shí),登錄成功后在服務(wù)器應用系統中,應用系統可以通過(guò)Response.Redirect重定向網(wǎng)頁(yè)。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。實(shí)現post用戶(hù)名和密碼到服務(wù)器:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向抓取網(wǎng)頁(yè)時(shí),登錄成功后在服務(wù)器應用系統中,應用系統可以通過(guò)Response.Redirect重定向網(wǎng)頁(yè)。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。
5、ASP.NET爬取網(wǎng)頁(yè)內容-維護登錄狀態(tài)使用Post數據成功登錄服務(wù)器應用系統后,需要登錄的頁(yè)面就可以獲取到了,那么我們可能需要維護登錄多個(gè)請求之間的狀態(tài)。優(yōu)采云云采集Web爬蟲(chóng)軟件首先,我們需要使用HttpWebRequest,而不是WebRequest。與WebRequest相比,改代碼為: 注意:HttpWebRequest.Create返回的類(lèi)型還是WebRequest,所以需要進(jìn)行轉換。二、使用CookieContainer。這樣,requests和request2之間就使用了同一個(gè)Session。如果請求已登錄,則 request2 也處于已登錄狀態(tài)。最后,如何在不同頁(yè)面之間使用同一個(gè)CookieContainer。要在不同頁(yè)面之間使用相同的 CookieContainer,只將 CookieContainer 添加到 Session。優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以是用戶(hù)登錄時(shí)需要分析瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 @采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以需要分析瀏覽器的方向用戶(hù)登錄。服務(wù)器發(fā)送的 POST 請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 @采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以需要分析瀏覽器的方向用戶(hù)登錄。服務(wù)器發(fā)送的 POST 請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 需要登錄,因為需要登錄的是網(wǎng)站,所以需要分析用戶(hù)登錄時(shí)瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 需要登錄,因為需要登錄的是網(wǎng)站,所以需要分析用戶(hù)登錄時(shí)瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集
1、簡(jiǎn)單易用,任何人都可以使用:無(wú)需技術(shù)背景,只需了解互聯(lián)網(wǎng)采集。全程可視化流程,點(diǎn)擊鼠標完成操作,2分鐘快速上手。2、功能強大,任何網(wǎng)站都可以使用:點(diǎn)擊、登錄、翻頁(yè)、識別驗證碼、瀑布流、Ajax腳本異步加載數據網(wǎng)頁(yè),都可以通過(guò)簡(jiǎn)單的設置進(jìn)行采集。3、在采集 中,也可以關(guān)閉。配置好采集任務(wù)后,可以關(guān)機,側邊執行任務(wù)。龐大的采集集群24*7不間斷運行,不用擔心IP被封或者網(wǎng)絡(luò )中斷。4、功能免費+增值服務(wù),可以按需選擇。免費版具有滿(mǎn)足用戶(hù)基本采集需求的所有功能。同時(shí),設置一些增值服務(wù)(如私有制),以滿(mǎn)足高端付費企業(yè)用戶(hù)的需求。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件如何用c#實(shí)現網(wǎng)站數據的抓???)
優(yōu)采云云端采集網(wǎng)絡(luò )爬蟲(chóng)軟件如何使用c#實(shí)現網(wǎng)站數據抓???如何使用c#實(shí)現網(wǎng)站數據抓???首先需要明確:網(wǎng)站的任何頁(yè)面,無(wú)論是php、jsp、aspx等動(dòng)態(tài)頁(yè)面還是后臺程序生成的靜態(tài)頁(yè)面,都可以在瀏覽器。所以當你想開(kāi)發(fā)一個(gè)data采集程序時(shí),你首先要了解你要采集的網(wǎng)站的首頁(yè)結構(HTML)。一旦您熟悉了 網(wǎng)站 中您想要 采集 數據的 HTML 源文件的內容,程序的其余部分就很容易了。因為C#對網(wǎng)站數據采集的原理是“把你要的頁(yè)面的HTML文件下載到采集,
這樣,整個(gè)采集的工作就會(huì )在一個(gè)段落中完成。先說(shuō)怎么抓取吧:1、抓取通用內容需要三個(gè)類(lèi):WebRequest、WebResponse、StreamReader 需要的命名空間:System.Net、System.IO 核心代碼:WebRequest 創(chuàng )建是靜態(tài)方法,參數是待抓取網(wǎng)頁(yè)的網(wǎng)址;編碼指定編碼。Encoding中有ASCII、UTF32、UTF8等全局編碼,但是沒(méi)有g(shù)b2312的encoding屬性,所以我們使用GetEncoding來(lái)獲取gb2312編碼。優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件2、抓取圖片或其他二進(jìn)制文件(如文件) 需要四個(gè)類(lèi):WebRequest、WebResponse、Stream、FileStream 需要的命名空間:System .Net、System .IO核心代碼:使用Stream讀取3、 抓取網(wǎng)頁(yè)內容POST方法抓取網(wǎng)頁(yè)時(shí),有時(shí)需要通過(guò)Post向服務(wù)器發(fā)送一些數據,在網(wǎng)頁(yè)抓取程序中添加如下代碼,實(shí)現向服務(wù)器發(fā)送用戶(hù)名和密碼:優(yōu)采云Cloud采集Web爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向 抓取網(wǎng)頁(yè)時(shí),成功登錄服務(wù)器應用系統后,應用系統可能會(huì )重定向網(wǎng)頁(yè)通過(guò) Response.Redirect。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。實(shí)現post用戶(hù)名和密碼到服務(wù)器:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向抓取網(wǎng)頁(yè)時(shí),登錄成功后在服務(wù)器應用系統中,應用系統可以通過(guò)Response.Redirect重定向網(wǎng)頁(yè)。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。實(shí)現post用戶(hù)名和密碼到服務(wù)器:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向抓取網(wǎng)頁(yè)時(shí),登錄成功后在服務(wù)器應用系統中,應用系統可以通過(guò)Response.Redirect重定向網(wǎng)頁(yè)。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。
5、ASP.NET爬取網(wǎng)頁(yè)內容-維護登錄狀態(tài)使用Post數據成功登錄服務(wù)器應用系統后,需要登錄的頁(yè)面就可以獲取到了,那么我們可能需要維護登錄多個(gè)請求之間的狀態(tài)。優(yōu)采云云采集Web爬蟲(chóng)軟件首先,我們需要使用HttpWebRequest,而不是WebRequest。與WebRequest相比,改代碼為: 注意:HttpWebRequest.Create返回的類(lèi)型還是WebRequest,所以需要進(jìn)行轉換。二、使用CookieContainer。這樣,requests和request2之間就使用了同一個(gè)Session。如果請求已登錄,則 request2 也處于已登錄狀態(tài)。最后,如何在不同頁(yè)面之間使用同一個(gè)CookieContainer。要在不同頁(yè)面之間使用相同的 CookieContainer,只將 CookieContainer 添加到 Session。優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以是用戶(hù)登錄時(shí)需要分析瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 @采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以需要分析瀏覽器的方向用戶(hù)登錄。服務(wù)器發(fā)送的 POST 請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 @采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以需要分析瀏覽器的方向用戶(hù)登錄。服務(wù)器發(fā)送的 POST 請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 需要登錄,因為需要登錄的是網(wǎng)站,所以需要分析用戶(hù)登錄時(shí)瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 需要登錄,因為需要登錄的是網(wǎng)站,所以需要分析用戶(hù)登錄時(shí)瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集
1、簡(jiǎn)單易用,任何人都可以使用:無(wú)需技術(shù)背景,只需了解互聯(lián)網(wǎng)采集。全程可視化流程,點(diǎn)擊鼠標完成操作,2分鐘快速上手。2、功能強大,任何網(wǎng)站都可以使用:點(diǎn)擊、登錄、翻頁(yè)、識別驗證碼、瀑布流、Ajax腳本異步加載數據網(wǎng)頁(yè),都可以通過(guò)簡(jiǎn)單的設置進(jìn)行采集。3、在采集 中,也可以關(guān)閉。配置好采集任務(wù)后,可以關(guān)機,側邊執行任務(wù)。龐大的采集集群24*7不間斷運行,不用擔心IP被封或者網(wǎng)絡(luò )中斷。4、功能免費+增值服務(wù),可以按需選擇。免費版具有滿(mǎn)足用戶(hù)基本采集需求的所有功能。同時(shí),設置一些增值服務(wù)(如私有制),以滿(mǎn)足高端付費企業(yè)用戶(hù)的需求。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(爬蟲(chóng)普通爬蟲(chóng):抓取數據的過(guò)程的分類(lèi))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 49 次瀏覽 ? 2022-02-04 12:22
爬蟲(chóng)概述 什么是爬蟲(chóng)?
編寫(xiě)程序,讓它模擬瀏覽器上網(wǎng),然后上網(wǎng)抓取數據的過(guò)程
爬行動(dòng)物的分類(lèi)
1.普通爬行動(dòng)物:
抓取整個(gè)頁(yè)面的源內容
2.關(guān)注爬蟲(chóng):
獲取頁(yè)面的部分內容
3.增量爬蟲(chóng):
它可以檢測到 網(wǎng)站 中的數據更新。在 網(wǎng)站 中獲取最新更新的數據。
防爬機制: 防爬策略:
爬蟲(chóng)利用相應的策略和技術(shù)手段破解門(mén)戶(hù)網(wǎng)站的反爬蟲(chóng)手段,從而爬取對應的數據。
爬行動(dòng)物的合法性:
爬蟲(chóng)本身不受法律禁止(中立)
爬取數據違法風(fēng)險的表現:
1.爬蟲(chóng)干擾了訪(fǎng)問(wèn)者網(wǎng)站的正常運行。
2.爬蟲(chóng)爬取某些類(lèi)型的受法律保護的數據或信息。
如何規避違法風(fēng)險:
1.嚴格遵守網(wǎng)站設置的robots協(xié)議
2.在避免爬蟲(chóng)措施的同時(shí),需要優(yōu)化自己的代碼,避免干擾被訪(fǎng)問(wèn)網(wǎng)站的正常運行
3.在使用和傳播捕獲的信息時(shí),應對捕獲的內容進(jìn)行審核。如發(fā)現屬于用戶(hù)的個(gè)人信息、隱私或其他商業(yè)秘密,應及時(shí)刪除并停止使用
UA反爬機制是什么,如何破解?如何獲取動(dòng)態(tài)加載頁(yè)面的數據:
如何獲取動(dòng)態(tài)加載頁(yè)面的數據:<br /> 通過(guò)抓包工具全局搜索找到動(dòng)態(tài)加載數據對應的數據包,數據包中提取該請求的url,
一.Anaxonda安裝1.雙擊Anaconda3-5.0.0-Windows-x86_64.exe文件
2.下一個(gè)
1.打開(kāi)cmd窗口,輸入jupyter notebook命令,
如果沒(méi)有找不到命令并且沒(méi)有報錯,則安裝成功!
2.在開(kāi)始菜單中顯示
3.啟動(dòng) ① 默認端口啟動(dòng)
在終端中輸入以下命令:
jupyter notebook
執行命令后,終端會(huì )顯示一系列notebook服務(wù)器信息,瀏覽器會(huì )自動(dòng)啟動(dòng)Jupyter Notebook。
啟動(dòng)過(guò)程中,終端顯示如下:
$ jupyter notebook
[I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine
[I 08:58:24.417 NotebookApp] 0 active kernels
[I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
默認情況下,瀏覽器地址欄會(huì )顯示::8888。其中,“l(fā)ocalhost”是指本機,“8888”是端口號。
網(wǎng)址
如果同時(shí)啟動(dòng)多個(gè) Jupyter Notebook,由于默認端口“8888”被占用,地址欄中的數字將從“8888”開(kāi)始,每次啟動(dòng)另一個(gè) Jupyter Notebook 時(shí)數字會(huì )增加 1,例如如“8889”、“8890”、“……
?、?啟動(dòng)指定端口
如果要自定義啟動(dòng) Jupyter Notebook 的端口號,可以在終端輸入以下命令:
jupyter notebook --port
在,”
"為自定義端口號,直接以數字的形式寫(xiě)在命令中,數字兩邊不帶尖括號""。例如:jupyter notebook --port 9999,即啟動(dòng)Jupyter Notebook端口號為“9999”的服務(wù)器。
?、?不打開(kāi)瀏覽器啟動(dòng)服務(wù)器
如果您只想啟動(dòng) Jupyter Notebook 服務(wù)器但不想立即進(jìn)入主頁(yè),則無(wú)需立即啟動(dòng)瀏覽器。在終端輸入:
jupyter notebook --no-browser
此時(shí)終端會(huì )顯示激活服務(wù)器的信息,激活服務(wù)器后會(huì )顯示打開(kāi)瀏覽器頁(yè)面的鏈接。當您需要啟動(dòng)瀏覽器頁(yè)面時(shí),只需復制鏈接,將其粘貼到瀏覽器的地址欄中,然后按 Enter 鍵即可轉到您的 Jupyter Notebook 頁(yè)面。
示例圖中,由于我在完成以上內容的同時(shí)同時(shí)啟動(dòng)了多個(gè)Jupyter Notebooks,顯示我的“8888”端口號被占用,最后“8889”分配給了我。
2. 快捷方式 向上插入單元格:a 向下插入單元格:b 刪除單元格:x 將代碼切換為 markdown:m 將 markdown 切換為代碼:y 運行單元格:shift+enter 查看幫助文檔:shift+ Tab 自動(dòng)提示:標簽
3. 魔法指令
運行外部python源文件:%run xxx.py 計算一條語(yǔ)句的運行時(shí)間:%time statement 計算一條語(yǔ)句的平均運行時(shí)間:%timeit statement 測試多行代碼的平均運行時(shí)間:
%%時(shí)間
聲明1
聲明2
聲明3 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(爬蟲(chóng)普通爬蟲(chóng):抓取數據的過(guò)程的分類(lèi))
爬蟲(chóng)概述 什么是爬蟲(chóng)?
編寫(xiě)程序,讓它模擬瀏覽器上網(wǎng),然后上網(wǎng)抓取數據的過(guò)程
爬行動(dòng)物的分類(lèi)
1.普通爬行動(dòng)物:
抓取整個(gè)頁(yè)面的源內容
2.關(guān)注爬蟲(chóng):
獲取頁(yè)面的部分內容
3.增量爬蟲(chóng):
它可以檢測到 網(wǎng)站 中的數據更新。在 網(wǎng)站 中獲取最新更新的數據。
防爬機制: 防爬策略:
爬蟲(chóng)利用相應的策略和技術(shù)手段破解門(mén)戶(hù)網(wǎng)站的反爬蟲(chóng)手段,從而爬取對應的數據。
爬行動(dòng)物的合法性:
爬蟲(chóng)本身不受法律禁止(中立)
爬取數據違法風(fēng)險的表現:
1.爬蟲(chóng)干擾了訪(fǎng)問(wèn)者網(wǎng)站的正常運行。
2.爬蟲(chóng)爬取某些類(lèi)型的受法律保護的數據或信息。
如何規避違法風(fēng)險:
1.嚴格遵守網(wǎng)站設置的robots協(xié)議
2.在避免爬蟲(chóng)措施的同時(shí),需要優(yōu)化自己的代碼,避免干擾被訪(fǎng)問(wèn)網(wǎng)站的正常運行
3.在使用和傳播捕獲的信息時(shí),應對捕獲的內容進(jìn)行審核。如發(fā)現屬于用戶(hù)的個(gè)人信息、隱私或其他商業(yè)秘密,應及時(shí)刪除并停止使用
UA反爬機制是什么,如何破解?如何獲取動(dòng)態(tài)加載頁(yè)面的數據:
如何獲取動(dòng)態(tài)加載頁(yè)面的數據:<br /> 通過(guò)抓包工具全局搜索找到動(dòng)態(tài)加載數據對應的數據包,數據包中提取該請求的url,
一.Anaxonda安裝1.雙擊Anaconda3-5.0.0-Windows-x86_64.exe文件

2.下一個(gè)






1.打開(kāi)cmd窗口,輸入jupyter notebook命令,
如果沒(méi)有找不到命令并且沒(méi)有報錯,則安裝成功!
2.在開(kāi)始菜單中顯示

3.啟動(dòng) ① 默認端口啟動(dòng)
在終端中輸入以下命令:
jupyter notebook
執行命令后,終端會(huì )顯示一系列notebook服務(wù)器信息,瀏覽器會(huì )自動(dòng)啟動(dòng)Jupyter Notebook。
啟動(dòng)過(guò)程中,終端顯示如下:
$ jupyter notebook
[I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine
[I 08:58:24.417 NotebookApp] 0 active kernels
[I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
默認情況下,瀏覽器地址欄會(huì )顯示::8888。其中,“l(fā)ocalhost”是指本機,“8888”是端口號。
網(wǎng)址
如果同時(shí)啟動(dòng)多個(gè) Jupyter Notebook,由于默認端口“8888”被占用,地址欄中的數字將從“8888”開(kāi)始,每次啟動(dòng)另一個(gè) Jupyter Notebook 時(shí)數字會(huì )增加 1,例如如“8889”、“8890”、“……
?、?啟動(dòng)指定端口
如果要自定義啟動(dòng) Jupyter Notebook 的端口號,可以在終端輸入以下命令:
jupyter notebook --port
在,”
"為自定義端口號,直接以數字的形式寫(xiě)在命令中,數字兩邊不帶尖括號""。例如:jupyter notebook --port 9999,即啟動(dòng)Jupyter Notebook端口號為“9999”的服務(wù)器。
?、?不打開(kāi)瀏覽器啟動(dòng)服務(wù)器
如果您只想啟動(dòng) Jupyter Notebook 服務(wù)器但不想立即進(jìn)入主頁(yè),則無(wú)需立即啟動(dòng)瀏覽器。在終端輸入:
jupyter notebook --no-browser
此時(shí)終端會(huì )顯示激活服務(wù)器的信息,激活服務(wù)器后會(huì )顯示打開(kāi)瀏覽器頁(yè)面的鏈接。當您需要啟動(dòng)瀏覽器頁(yè)面時(shí),只需復制鏈接,將其粘貼到瀏覽器的地址欄中,然后按 Enter 鍵即可轉到您的 Jupyter Notebook 頁(yè)面。
示例圖中,由于我在完成以上內容的同時(shí)同時(shí)啟動(dòng)了多個(gè)Jupyter Notebooks,顯示我的“8888”端口號被占用,最后“8889”分配給了我。
2. 快捷方式 向上插入單元格:a 向下插入單元格:b 刪除單元格:x 將代碼切換為 markdown:m 將 markdown 切換為代碼:y 運行單元格:shift+enter 查看幫助文檔:shift+ Tab 自動(dòng)提示:標簽
3. 魔法指令
運行外部python源文件:%run xxx.py 計算一條語(yǔ)句的運行時(shí)間:%time statement 計算一條語(yǔ)句的平均運行時(shí)間:%timeit statement 測試多行代碼的平均運行時(shí)間:
%%時(shí)間
聲明1
聲明2
聲明3
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(種子網(wǎng)站存儲7萬(wàn)多條記錄()時(shí)間送達!)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 68 次瀏覽 ? 2022-02-04 12:16
關(guān)鍵時(shí)刻,第一時(shí)間發(fā)貨!
節前的一次誤操作,清空了mysql中的記錄表和電影表。顯然,我沒(méi)有做任何mysql備份。于是,我干脆清空了所有表數據,一夜之間又回到了解放前……
在之前的版本中,記錄表存儲了7萬(wàn)多條記錄,爬取了4萬(wàn)多條記錄,但是可以明顯的發(fā)現,爬取的數據越多,卡機越多。又報錯了,是關(guān)于JDBC的,又一次機器卡住了。
經(jīng)過(guò)仔細考慮,之前版本的爬蟲(chóng)程序和數據庫的讀寫(xiě)次數過(guò)于頻繁,存在以下問(wèn)題:
3.存儲電影詳情頁(yè)記錄和短評數據全部解析后立即存入數據庫。
顯然,上面的方法一看就效率低下,所以今天下午修改了相關(guān)代碼,部分實(shí)現批量插入,盡可能減少與數據庫的交互,從而降低時(shí)間和空間成本。
既然出現了問(wèn)題,我們再來(lái)看看這個(gè)版本,最后發(fā)現問(wèn)題的原因是種子URL沒(méi)有存儲在mysql的記錄表中??,所以是在DoubanCrawler類(lèi)中。
執行 stmt.executeUpdate(sql) > 0 返回值 0,所以爬取為 0 的記錄不會(huì )從數據庫中讀取,最后會(huì )在 while 循環(huán)中爬取種子 網(wǎng)站。
解決方案:由于種子網(wǎng)站沒(méi)有存儲在記錄中,那么對種子網(wǎng)站進(jìn)行特殊處理,將if的判斷條件改為if(stmt.executeUpdate(sql)>0 || frontPage.equals(url)),這樣對于種子網(wǎng)站,即使沒(méi)有成功的更新操作,仍然可以進(jìn)入讀取爬取到0的數據庫的操作。
對于第一個(gè)問(wèn)題,使用批量插入操作
具體實(shí)現如下:
1. 通過(guò)正則匹配,找到符合條件的鏈接,加入nextLinkList集合
2.遍歷后,將數據存入數據庫
3. 在批處理操作中,使用了 addBatch() 方法和 executeBatch() 方法。注意需要添加 conn.setAutoCommit(false); mit() 表示手動(dòng)提交。
第二題,一次查詢(xún)多條記錄
實(shí)現思路:一次只改一條記錄,一次查詢(xún)10條記錄,將這10條記錄存入list集合中,將原來(lái)的String類(lèi)型url改為list類(lèi)型urlList并傳入 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(種子網(wǎng)站存儲7萬(wàn)多條記錄()時(shí)間送達!)
關(guān)鍵時(shí)刻,第一時(shí)間發(fā)貨!
節前的一次誤操作,清空了mysql中的記錄表和電影表。顯然,我沒(méi)有做任何mysql備份。于是,我干脆清空了所有表數據,一夜之間又回到了解放前……
在之前的版本中,記錄表存儲了7萬(wàn)多條記錄,爬取了4萬(wàn)多條記錄,但是可以明顯的發(fā)現,爬取的數據越多,卡機越多。又報錯了,是關(guān)于JDBC的,又一次機器卡住了。
經(jīng)過(guò)仔細考慮,之前版本的爬蟲(chóng)程序和數據庫的讀寫(xiě)次數過(guò)于頻繁,存在以下問(wèn)題:
3.存儲電影詳情頁(yè)記錄和短評數據全部解析后立即存入數據庫。
顯然,上面的方法一看就效率低下,所以今天下午修改了相關(guān)代碼,部分實(shí)現批量插入,盡可能減少與數據庫的交互,從而降低時(shí)間和空間成本。
既然出現了問(wèn)題,我們再來(lái)看看這個(gè)版本,最后發(fā)現問(wèn)題的原因是種子URL沒(méi)有存儲在mysql的記錄表中??,所以是在DoubanCrawler類(lèi)中。

執行 stmt.executeUpdate(sql) > 0 返回值 0,所以爬取為 0 的記錄不會(huì )從數據庫中讀取,最后會(huì )在 while 循環(huán)中爬取種子 網(wǎng)站。
解決方案:由于種子網(wǎng)站沒(méi)有存儲在記錄中,那么對種子網(wǎng)站進(jìn)行特殊處理,將if的判斷條件改為if(stmt.executeUpdate(sql)>0 || frontPage.equals(url)),這樣對于種子網(wǎng)站,即使沒(méi)有成功的更新操作,仍然可以進(jìn)入讀取爬取到0的數據庫的操作。
對于第一個(gè)問(wèn)題,使用批量插入操作
具體實(shí)現如下:



1. 通過(guò)正則匹配,找到符合條件的鏈接,加入nextLinkList集合
2.遍歷后,將數據存入數據庫
3. 在批處理操作中,使用了 addBatch() 方法和 executeBatch() 方法。注意需要添加 conn.setAutoCommit(false); mit() 表示手動(dòng)提交。
第二題,一次查詢(xún)多條記錄
實(shí)現思路:一次只改一條記錄,一次查詢(xún)10條記錄,將這10條記錄存入list集合中,將原來(lái)的String類(lèi)型url改為list類(lèi)型urlList并傳入
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據( 如何替代人工從網(wǎng)頁(yè)中找到數據并復制粘貼到excel中)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 57 次瀏覽 ? 2022-02-03 20:02
如何替代人工從網(wǎng)頁(yè)中找到數據并復制粘貼到excel中)
為什么要學(xué)習網(wǎng)絡(luò )爬蟲(chóng)
它可以代替人工從網(wǎng)頁(yè)中查找數據并將其復制粘貼到excel中。這種重復性的工作,不僅浪費時(shí)間,而且一不留神,容易出錯,解決了這些無(wú)法自動(dòng)化、無(wú)法實(shí)時(shí)獲取的公共數據的應用價(jià)值,我們可以借助KYC框架來(lái)了解,了解你的公司(了解您的公司),了解您的競爭對手(了解您的競爭對手),了解您的客戶(hù)(了解您的客戶(hù))。這是通過(guò)理解和執行對公共數據的簡(jiǎn)單描述性分析可以帶來(lái)的價(jià)值。進(jìn)一步,通過(guò)機器學(xué)習和統計算法分析,可以幫助企業(yè)做4Ps(產(chǎn)品)、價(jià)格(價(jià)格)、渠道(地點(diǎn))促銷(xiāo)(promotion))
網(wǎng)絡(luò )爬蟲(chóng)的基本協(xié)議
robots協(xié)議
python爬蟲(chóng)的流程
主要可以分為三個(gè)部分:1.獲取網(wǎng)頁(yè);2.解析網(wǎng)頁(yè)(提取數據);3.存儲數據;
1.獲取網(wǎng)頁(yè)就是向URL發(fā)送請求,會(huì )返回整個(gè)網(wǎng)頁(yè)的數據
2.解析一個(gè)網(wǎng)頁(yè)就是從整個(gè)網(wǎng)頁(yè)的數據中提取出想要的數據
3.存數據就是存數據
三道工序的技術(shù)實(shí)現
1.獲取網(wǎng)頁(yè)
獲取網(wǎng)頁(yè)的基本技術(shù):request、urllib和selenium(模擬瀏覽器)
獲取網(wǎng)頁(yè)先進(jìn)技術(shù):多進(jìn)程多線(xiàn)程爬取、登錄爬取、破IP封禁、服務(wù)器爬取
2.解析網(wǎng)頁(yè)
解析網(wǎng)頁(yè)的基本技術(shù):re正則表達式、beautifulsoup和lxml
網(wǎng)頁(yè)解析高級技術(shù):解決中文亂碼
3.存儲的數據
數據存儲的基本技術(shù):存txt文件和存csv文件
存儲數據的先進(jìn)技術(shù):存儲在MySQL數據庫中和存儲在mongodb數據庫中 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(
如何替代人工從網(wǎng)頁(yè)中找到數據并復制粘貼到excel中)
為什么要學(xué)習網(wǎng)絡(luò )爬蟲(chóng)
它可以代替人工從網(wǎng)頁(yè)中查找數據并將其復制粘貼到excel中。這種重復性的工作,不僅浪費時(shí)間,而且一不留神,容易出錯,解決了這些無(wú)法自動(dòng)化、無(wú)法實(shí)時(shí)獲取的公共數據的應用價(jià)值,我們可以借助KYC框架來(lái)了解,了解你的公司(了解您的公司),了解您的競爭對手(了解您的競爭對手),了解您的客戶(hù)(了解您的客戶(hù))。這是通過(guò)理解和執行對公共數據的簡(jiǎn)單描述性分析可以帶來(lái)的價(jià)值。進(jìn)一步,通過(guò)機器學(xué)習和統計算法分析,可以幫助企業(yè)做4Ps(產(chǎn)品)、價(jià)格(價(jià)格)、渠道(地點(diǎn))促銷(xiāo)(promotion))
網(wǎng)絡(luò )爬蟲(chóng)的基本協(xié)議
robots協(xié)議
python爬蟲(chóng)的流程
主要可以分為三個(gè)部分:1.獲取網(wǎng)頁(yè);2.解析網(wǎng)頁(yè)(提取數據);3.存儲數據;
1.獲取網(wǎng)頁(yè)就是向URL發(fā)送請求,會(huì )返回整個(gè)網(wǎng)頁(yè)的數據
2.解析一個(gè)網(wǎng)頁(yè)就是從整個(gè)網(wǎng)頁(yè)的數據中提取出想要的數據
3.存數據就是存數據
三道工序的技術(shù)實(shí)現
1.獲取網(wǎng)頁(yè)
獲取網(wǎng)頁(yè)的基本技術(shù):request、urllib和selenium(模擬瀏覽器)
獲取網(wǎng)頁(yè)先進(jìn)技術(shù):多進(jìn)程多線(xiàn)程爬取、登錄爬取、破IP封禁、服務(wù)器爬取
2.解析網(wǎng)頁(yè)
解析網(wǎng)頁(yè)的基本技術(shù):re正則表達式、beautifulsoup和lxml
網(wǎng)頁(yè)解析高級技術(shù):解決中文亂碼
3.存儲的數據
數據存儲的基本技術(shù):存txt文件和存csv文件
存儲數據的先進(jìn)技術(shù):存儲在MySQL數據庫中和存儲在mongodb數據庫中
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(最簡(jiǎn)單的過(guò)程可以用如下代碼表示:importurllib2request=urllib2.Request())
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 64 次瀏覽 ? 2022-02-01 14:30
概念
爬蟲(chóng)是網(wǎng)頁(yè)的采集。
通常,在獲取的網(wǎng)頁(yè)中存在到其他網(wǎng)頁(yè)的路徑,稱(chēng)為超鏈接。然后,通過(guò)這樣的路徑可以獲取更多的其他網(wǎng)頁(yè),就像蜘蛛在網(wǎng)上爬行一樣,所以俗稱(chēng)爬蟲(chóng)。
爬蟲(chóng)的工作原理類(lèi)似于瀏覽器瀏覽網(wǎng)頁(yè)。它是一種請求/返回模式,即客戶(hù)端向服務(wù)器發(fā)出請求訪(fǎng)問(wèn)某個(gè)頁(yè)面(請求),服務(wù)器返回客戶(hù)端請求的內容(響應)。URL是代表互聯(lián)網(wǎng)上每個(gè)文件的唯一標志,也就是我們所說(shuō)的網(wǎng)址??蛻?hù)端通過(guò) URL 向特定網(wǎng)頁(yè)發(fā)送請求。最簡(jiǎn)單的過(guò)程可以用以下代碼表示:
import urllib2request = urllib2.Request("")#構造請求請求 response = urllib2.urlopen(request)#發(fā)送請求并得到響應打印 response.read()#使用read()來(lái)獲取返回的內容并打印出Http協(xié)議的POST和GET
對于簡(jiǎn)單的靜態(tài)網(wǎng)頁(yè),這樣就足夠了,可以順利獲取html文本。
但對于這個(gè)日新月異的互聯(lián)網(wǎng)來(lái)說(shuō),這東西根本就不夠用。首先要考慮的是動(dòng)態(tài)網(wǎng)頁(yè),它需要我們動(dòng)態(tài)地向它傳遞參數。例如,在登錄時(shí),我們需要提交用戶(hù)名和密碼等表單信息,以便我們獲取更多信息。這需要我們在構造請求時(shí)向服務(wù)器傳遞更多信息。
說(shuō)到傳遞參數,就不得不說(shuō)一下HTTP協(xié)議與服務(wù)器交互的方式了。HTTP協(xié)議有六種請求方法,分別是get、head、put、delete、post、options,其中最基本的四種是GET、POST和PUT、DELET。我們知道 URL 地址是用來(lái)描述網(wǎng)絡(luò )上的資源的。HTTP中的GET、POST、PUT、DELETE對應了查詢(xún)、修改、添加、刪除這四種操作。對于爬蟲(chóng)中的數據傳輸,使用 POST 和 GET。我們來(lái)看看GET和POST的區別:
1.GET提交的數據會(huì )放在URL后面,URL和傳輸數據用?分隔,參數用&連接
2.GET方法提交的數據大小是有限制的(因為瀏覽器對URL的長(cháng)度有限制),而POST方法提交的數據沒(méi)有限制。
3.GET方法需要使用Request.QueryString獲取變量的值,POST方法使用Request.Form獲取變量的值。
4.GET方式提交數據會(huì )帶來(lái)安全問(wèn)題。例如,通過(guò) GET 方法提交數據時(shí),用戶(hù)名和密碼會(huì )出現在 URL 上。如果頁(yè)面可以被緩存或者其他人可以訪(fǎng)問(wèn)機器,則可以從訪(fǎng)問(wèn)歷史記錄中獲取用戶(hù)的賬號和密碼。下面介紹兩種提交方法。
POST方法導入urllib2值 ={“username”:“”,“password”:“XXXX”}data = urllib.urlencode(values)url=":///my/mycsdn"request = urllib2.@ >請求(url,data)response = urllib2.urlopen(request)print response.read()
可以看出,該方法首先將要提交的信息構造成一個(gè)數據,然后連同URL一起構造請求對象。
GET方法 import urllib2 import urllibval??ues ={"username":"","password":"XXXX"}data = urllib.urlencode(values)url = ""geturl = url +"?"+ datarequest = urllib2. Request(geturl)response = urllib2.urlopen(request)print response.read()
可以看到GET方式是直接在URL后面加參數
設置標題
即便如此,還是有一些網(wǎng)站不被允許訪(fǎng)問(wèn),會(huì )出現識別問(wèn)題。這時(shí)候,為了真正的偽裝成瀏覽器,我們還需要在構造請求的時(shí)候設置一些Headers屬性。打開(kāi)瀏覽器查看網(wǎng)頁(yè)標題,可以看到如下內容:
我們可以根據自己的需要選擇某些屬性來(lái)構造請求,比如下面使用了user-agent和referer。
headers ={'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Referer':''}request = urllib2.Request (網(wǎng)址,標題=標題)
User-agent全稱(chēng)為用戶(hù)代理,是向網(wǎng)站提供所用瀏覽器的類(lèi)型和版本、操作系統、瀏覽器內核等信息的標志,是偽裝成瀏覽器。真正的瀏覽器提供這個(gè)屬性是為了方便網(wǎng)站為用戶(hù)提供更好的展示和體驗。Referer 顯示當前頁(yè)面來(lái)自哪個(gè)頁(yè)面??梢杂脕?lái)防止防盜鏈。服務(wù)器將識別 headers 中的 referer 是否是它自己。如果沒(méi)有,某些服務(wù)器將不會(huì )響應。
有了以上的基礎知識,就可以開(kāi)始了解和實(shí)現真正的爬蟲(chóng)了。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(最簡(jiǎn)單的過(guò)程可以用如下代碼表示:importurllib2request=urllib2.Request())
概念
爬蟲(chóng)是網(wǎng)頁(yè)的采集。
通常,在獲取的網(wǎng)頁(yè)中存在到其他網(wǎng)頁(yè)的路徑,稱(chēng)為超鏈接。然后,通過(guò)這樣的路徑可以獲取更多的其他網(wǎng)頁(yè),就像蜘蛛在網(wǎng)上爬行一樣,所以俗稱(chēng)爬蟲(chóng)。
爬蟲(chóng)的工作原理類(lèi)似于瀏覽器瀏覽網(wǎng)頁(yè)。它是一種請求/返回模式,即客戶(hù)端向服務(wù)器發(fā)出請求訪(fǎng)問(wèn)某個(gè)頁(yè)面(請求),服務(wù)器返回客戶(hù)端請求的內容(響應)。URL是代表互聯(lián)網(wǎng)上每個(gè)文件的唯一標志,也就是我們所說(shuō)的網(wǎng)址??蛻?hù)端通過(guò) URL 向特定網(wǎng)頁(yè)發(fā)送請求。最簡(jiǎn)單的過(guò)程可以用以下代碼表示:
import urllib2request = urllib2.Request("")#構造請求請求 response = urllib2.urlopen(request)#發(fā)送請求并得到響應打印 response.read()#使用read()來(lái)獲取返回的內容并打印出Http協(xié)議的POST和GET
對于簡(jiǎn)單的靜態(tài)網(wǎng)頁(yè),這樣就足夠了,可以順利獲取html文本。
但對于這個(gè)日新月異的互聯(lián)網(wǎng)來(lái)說(shuō),這東西根本就不夠用。首先要考慮的是動(dòng)態(tài)網(wǎng)頁(yè),它需要我們動(dòng)態(tài)地向它傳遞參數。例如,在登錄時(shí),我們需要提交用戶(hù)名和密碼等表單信息,以便我們獲取更多信息。這需要我們在構造請求時(shí)向服務(wù)器傳遞更多信息。
說(shuō)到傳遞參數,就不得不說(shuō)一下HTTP協(xié)議與服務(wù)器交互的方式了。HTTP協(xié)議有六種請求方法,分別是get、head、put、delete、post、options,其中最基本的四種是GET、POST和PUT、DELET。我們知道 URL 地址是用來(lái)描述網(wǎng)絡(luò )上的資源的。HTTP中的GET、POST、PUT、DELETE對應了查詢(xún)、修改、添加、刪除這四種操作。對于爬蟲(chóng)中的數據傳輸,使用 POST 和 GET。我們來(lái)看看GET和POST的區別:
1.GET提交的數據會(huì )放在URL后面,URL和傳輸數據用?分隔,參數用&連接
2.GET方法提交的數據大小是有限制的(因為瀏覽器對URL的長(cháng)度有限制),而POST方法提交的數據沒(méi)有限制。
3.GET方法需要使用Request.QueryString獲取變量的值,POST方法使用Request.Form獲取變量的值。
4.GET方式提交數據會(huì )帶來(lái)安全問(wèn)題。例如,通過(guò) GET 方法提交數據時(shí),用戶(hù)名和密碼會(huì )出現在 URL 上。如果頁(yè)面可以被緩存或者其他人可以訪(fǎng)問(wèn)機器,則可以從訪(fǎng)問(wèn)歷史記錄中獲取用戶(hù)的賬號和密碼。下面介紹兩種提交方法。
POST方法導入urllib2值 ={“username”:“”,“password”:“XXXX”}data = urllib.urlencode(values)url=":///my/mycsdn"request = urllib2.@ >請求(url,data)response = urllib2.urlopen(request)print response.read()
可以看出,該方法首先將要提交的信息構造成一個(gè)數據,然后連同URL一起構造請求對象。
GET方法 import urllib2 import urllibval??ues ={"username":"","password":"XXXX"}data = urllib.urlencode(values)url = ""geturl = url +"?"+ datarequest = urllib2. Request(geturl)response = urllib2.urlopen(request)print response.read()
可以看到GET方式是直接在URL后面加參數
設置標題
即便如此,還是有一些網(wǎng)站不被允許訪(fǎng)問(wèn),會(huì )出現識別問(wèn)題。這時(shí)候,為了真正的偽裝成瀏覽器,我們還需要在構造請求的時(shí)候設置一些Headers屬性。打開(kāi)瀏覽器查看網(wǎng)頁(yè)標題,可以看到如下內容:
我們可以根據自己的需要選擇某些屬性來(lái)構造請求,比如下面使用了user-agent和referer。
headers ={'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Referer':''}request = urllib2.Request (網(wǎng)址,標題=標題)
User-agent全稱(chēng)為用戶(hù)代理,是向網(wǎng)站提供所用瀏覽器的類(lèi)型和版本、操作系統、瀏覽器內核等信息的標志,是偽裝成瀏覽器。真正的瀏覽器提供這個(gè)屬性是為了方便網(wǎng)站為用戶(hù)提供更好的展示和體驗。Referer 顯示當前頁(yè)面來(lái)自哪個(gè)頁(yè)面??梢杂脕?lái)防止防盜鏈。服務(wù)器將識別 headers 中的 referer 是否是它自己。如果沒(méi)有,某些服務(wù)器將不會(huì )響應。
有了以上的基礎知識,就可以開(kāi)始了解和實(shí)現真正的爬蟲(chóng)了。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(主流爬蟲(chóng)框架簡(jiǎn)介-1.地址 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2022-02-01 12:27
)
一、前言
目前市面上的爬蟲(chóng)框架比較多,有不同語(yǔ)言、不同類(lèi)型的爬蟲(chóng)框架。然而,在開(kāi)展預研時(shí),很難選擇哪一項
框架是許多開(kāi)發(fā)人員特別頭疼的問(wèn)題。
本文主要總結了市面上主流開(kāi)發(fā)語(yǔ)言中的主流爬蟲(chóng)框架,以及爬蟲(chóng)框架的優(yōu)缺點(diǎn);希望對大家選擇合適的爬蟲(chóng)框架有所幫助。
二、主流語(yǔ)言爬蟲(chóng)框架列表 常用爬蟲(chóng)框架列表 JAVA PYTHON PHP C# C/C++
阿帕奇納奇2
刮擦
php蜘蛛
點(diǎn)網(wǎng)蜘蛛
開(kāi)源搜索引擎
網(wǎng)絡(luò )魔術(shù)
克勞利
豆包
網(wǎng)絡(luò )爬蟲(chóng)
蛛網(wǎng)
赫里特里克斯
波西亞
PHP抓取
智能蜘蛛
阿普頓
網(wǎng)絡(luò )采集器
PySpider
php硒
阿博特
袋熊
爬蟲(chóng)4j
抓
網(wǎng)絡(luò )
蜘蛛
蜘蛛俠
可樂(lè )
銳角
拉爾賓
SeimiCrawler
蟒蛇硒
HtmlAgilityPack
湯
查詢(xún)
java硒
htmlunit
三、主流爬蟲(chóng)框架介紹1.Java爬蟲(chóng)框架Apache Nutch2
地址:
Nutch 是一個(gè)搜索引擎的開(kāi)源 Java 實(shí)現。它提供了我們運行自己的搜索引擎所需的所有工具。包括全文搜索和網(wǎng)絡(luò )爬蟲(chóng)。
Nutch 致力于讓每個(gè)人都能輕松、廉價(jià)地配置世界級的網(wǎng)絡(luò )搜索引擎。為了實(shí)現這一雄心勃勃的目標,Nutch 必須能夠:
* 每月獲取數十億網(wǎng)頁(yè)
* 維護這些頁(yè)面的索引
* 每秒數以千計的索引文件搜索
簡(jiǎn)而言之,Nutch 支持分發(fā)。您可以通過(guò)配置網(wǎng)站地址、規則和采集的深度(通用爬蟲(chóng)或全網(wǎng)爬蟲(chóng))對網(wǎng)站執行采集,并提供完整的-文本搜索功能,可以對來(lái)自采集的海量數據進(jìn)行全文搜索;如果要完成站點(diǎn)所有內容的采集,而不關(guān)心采集和解析準確性(不是特定頁(yè)面來(lái)滿(mǎn)足特定字段內容采集的需要) ,建議您使用Apache Nutch。如果要為站點(diǎn)的指定內容版塊指定字段采集,建議使用垂直爬蟲(chóng)更加靈活。
webmgaic(推薦)
地址:
WebMagic 是一個(gè)簡(jiǎn)單靈活的 Java 爬蟲(chóng)框架?;赪ebMagic,您可以快速開(kāi)發(fā)一個(gè)高效且易于維護的爬蟲(chóng)。
特征:
快速入門(mén)的簡(jiǎn)單 API
模塊化結構,易于擴展
提供多線(xiàn)程和分布式支持
赫里特里克斯
地址:
Heritrix是java開(kāi)發(fā)的開(kāi)源網(wǎng)絡(luò )爬蟲(chóng),用戶(hù)可以使用它從互聯(lián)網(wǎng)上爬取想要的資源。它最好的地方在于其良好的擴展性,方便用戶(hù)實(shí)現自己的爬取邏輯。
網(wǎng)絡(luò )采集器
地址:
WebCollector是一個(gè)無(wú)需配置,方便二次開(kāi)發(fā)的JAVA爬蟲(chóng)框架(內核)。它提供了精簡(jiǎn)的API,只需少量代碼即可實(shí)現強大的爬蟲(chóng)。WebCollector-Hadoop 是支持分布式爬取的 WebCollector 的 Hadoop 版本。
爬蟲(chóng)4j
地址::
crawler4j 是一個(gè)基于 Java 的輕量級獨立開(kāi)源爬蟲(chóng)框架,最大的特點(diǎn)之一就是簡(jiǎn)單。此外,它還支持多線(xiàn)程,支持代理,并且可以過(guò)濾重復的URL
基本上,從將jar加載到項目中,只需修改示例代碼即可簡(jiǎn)單實(shí)現爬蟲(chóng)的所有功能,所有這些動(dòng)作不超過(guò)半小時(shí)。
蜘蛛俠
地址:
Spiderman 是一個(gè) Java 開(kāi)源 Web 數據提取工具。它能夠采集指定的網(wǎng)頁(yè)并從這些頁(yè)面中提取有用的數據。Spiderman主要使用XPath、正則表達式、表達式引擎等技術(shù)來(lái)實(shí)現數據提取。
SeimiCrawler
地址:
一個(gè)敏捷、獨立部署的分布式Java爬蟲(chóng)框架
SeimiCrawler 是一個(gè)強大、高效、敏捷的框架,支持分布式爬蟲(chóng)開(kāi)發(fā)。希望能夠最大程度的降低新手開(kāi)發(fā)高可用性能好的爬蟲(chóng)系統的門(mén)檻,提高爬蟲(chóng)系統開(kāi)發(fā)的開(kāi)發(fā)效率。在 SeimiCrawler 的世界里,大部分人只關(guān)心編寫(xiě)爬蟲(chóng)的業(yè)務(wù)邏輯,剩下的交給 Seimi 來(lái)處理。在設計思路上,SeimiCrawler 很大程度上受到了 Python 的爬蟲(chóng)框架 Scrapy 的啟發(fā),同時(shí)融合了 Java 語(yǔ)言本身的特點(diǎn)和 Spring 的特點(diǎn),希望在國內使用更高效的 XPath 來(lái)更方便、更廣泛地解析 HTML,所以SeimiCrawler默認的HTML解析器是JsoupXpath,
湯
地址:
jsoup 是一個(gè) Java HTML 解析器,可以直接解析一個(gè) URL 地址和 HTML 文本內容。它提供了一個(gè)非常省力的 API,用于通過(guò) DOM、CSS 和類(lèi)似 jQuery 的操作方法獲取和操作數據。
2.Python爬蟲(chóng)框架scrapy(推薦)
地址:
Scrapy,一個(gè)用 Python 開(kāi)發(fā)的快速、高級的屏幕抓取和網(wǎng)頁(yè)抓取框架,用于抓取網(wǎng)站并從頁(yè)面中提取結構化數據。Scrapy 用途廣泛,可用于數據挖掘、監控和自動(dòng)化測試。
Scrapy 的吸引力在于它是一個(gè)任何人都可以根據自己的需要輕松修改的框架。還提供了各類(lèi)爬蟲(chóng)的基類(lèi),如BaseSpider、站點(diǎn)地圖爬蟲(chóng)等。最新版本提供了對web2.0爬蟲(chóng)的支持。
報廢意味著(zhù)碎片化。這個(gè) Python 爬蟲(chóng)框架叫做 Scrapy。
克勞利
地址:
高速爬取網(wǎng)站對應的內容,支持關(guān)系型和非關(guān)系型數據庫,數據可以導出為JSON、XML等。
波西亞
地址:
Portia 是一個(gè)用 Python 編寫(xiě)的開(kāi)源工具,無(wú)需任何編程知識即可直觀(guān)地抓取 網(wǎng)站 數據。無(wú)需下載或安裝任何東西,因為 Portia 在您的網(wǎng)絡(luò )瀏覽器中運行。
Portia 是一個(gè)由 scrapyhub 開(kāi)源的可視化爬蟲(chóng)規則編寫(xiě)工具。Portia 提供了一個(gè)可視化的網(wǎng)頁(yè),只需在頁(yè)面上簡(jiǎn)單的點(diǎn)擊并標記相應的待提取數據,無(wú)需任何編程知識即可完成爬蟲(chóng)規則的開(kāi)發(fā)。這些規則也可以在 Scrapy 中用于抓取頁(yè)面。
PySpider
地址:
PySpider:一個(gè)強大的網(wǎng)絡(luò )爬蟲(chóng)系統,由一個(gè)中國人編寫(xiě),具有強大的WebUI。用 Python 語(yǔ)言編寫(xiě),分布式架構,支持多種數據庫后端,強大的 WebUI 支持腳本編輯器、任務(wù)監視器、項目管理器和結果查看器。
抓
地址:
網(wǎng)絡(luò )爬蟲(chóng)框架(基于 pycurl/multicur)。
可樂(lè )
地址:
一個(gè)分布式爬蟲(chóng)框架。項目整體設計有點(diǎn)差,模塊間耦合度高,但值得借鑒。
3.PHP爬蟲(chóng)框架phpspider
地址:
phpspider 是一個(gè)爬蟲(chóng)開(kāi)發(fā)框架。使用該框架,無(wú)需了解爬蟲(chóng)底層技術(shù)實(shí)現,爬蟲(chóng)被網(wǎng)站屏蔽,有的網(wǎng)站需要登錄或驗證碼識別才能爬取等。幾行PHP代碼,可以創(chuàng )建自己的爬蟲(chóng),使用框架封裝的多進(jìn)程Worker類(lèi)庫,代碼更簡(jiǎn)潔,執行效率更高更快。
豆包
地址:
Beanbun是一個(gè)用PHP編寫(xiě)的多進(jìn)程網(wǎng)絡(luò )爬蟲(chóng)框架,具有良好的開(kāi)放性和高擴展性。
支持守護進(jìn)程和普通模式(守護進(jìn)程模式只支持Linux服務(wù)器)
默認情況下,Guzzle 用于爬行
分散式
支持內存、Redis等多種隊列方式
支持自定義URI過(guò)濾
支持廣度優(yōu)先和深度優(yōu)先兩種爬取方式
遵循 PSR-4 標準
爬取網(wǎng)頁(yè)分為多個(gè)步驟,每個(gè)步驟都支持自定義動(dòng)作(如添加代理、修改user-agent等)
一種靈活的擴展機制,可以輕松為框架創(chuàng )建插件:自定義隊列、自定義爬取方法……
PHP抓取
地址:
PHPCrawl 是一個(gè) PHP 開(kāi)源網(wǎng)絡(luò )檢索蜘蛛(爬蟲(chóng))類(lèi)庫。PHPCrawl 爬蟲(chóng)“Spider”的網(wǎng)站,提供有關(guān)網(wǎng)頁(yè)、鏈接、文件等的所有信息。
PHPCrawl povides 可以選擇性地指定爬蟲(chóng)的行為,例如采集的 URL、內容類(lèi)型、過(guò)濾器、cookie 處理等。
4.c#爬蟲(chóng)框架DotnetSpider
地址:
DotnetSpider是中國人開(kāi)源的一款跨平臺、高性能、輕量級的爬蟲(chóng)軟件,C#開(kāi)發(fā)。它是目前.Net開(kāi)源爬蟲(chóng)最好的爬蟲(chóng)之一。
網(wǎng)絡(luò )爬蟲(chóng)
地址:
NWebCrawler 是一個(gè)開(kāi)源的 C# 網(wǎng)絡(luò )爬蟲(chóng)更多 NWebCrawler
智能蜘蛛
地址:
SmartSpider爬蟲(chóng)引擎內核版本,全新的設計理念,真正的極簡(jiǎn)版。
阿博特
地址:
Abot 是一個(gè)開(kāi)源的 .net 爬蟲(chóng),它快速、易于使用和擴展。
網(wǎng)絡(luò )
地址:
這個(gè)俄羅斯天才寫(xiě)的開(kāi)源工具,為什么說(shuō)他厲害,因為他又實(shí)現了所有Http協(xié)議的底層,這有什么好處呢?只要你寫(xiě)一個(gè)爬蟲(chóng),就會(huì )遇到一個(gè)讓人抓狂的問(wèn)題,就是明知道你的Http請求頭和瀏覽器一模一樣,為什么不能得到你想要的數據。這時(shí)候如果使用HttpWebRequest,只能調試到GetRespone,無(wú)法調試底層字節流。所以,一定要有更深層次的底層組件,方便自己調試。
銳角
地址:
HTML 分析工具 AngleSharp HTML 分析工具簡(jiǎn)介 AngleSharp 簡(jiǎn)介 AngleSharp 是一個(gè)基于.NET (C#) 開(kāi)發(fā)的專(zhuān)門(mén)用于解析xHTML 源代碼的DLL 組件。
HtmlAgilityPack
地址:
HtmlAgilityPack 是一個(gè)用于 .NET 的 HTML 解析庫。支持使用 XPath 解析 HTML。命名空間:HtmlAgilityPack
查詢(xún)
地址:
CsQuery銳利的html代碼分析庫,用c#像jq處理html
5.C/C++爬蟲(chóng)框架開(kāi)源搜索引擎
地址:
基于 C/C++ 的網(wǎng)絡(luò )爬蟲(chóng)和搜索引擎。
蛛網(wǎng)
地址:
一個(gè)非常靈活、易于擴展的網(wǎng)絡(luò )爬蟲(chóng),可用作單點(diǎn)部署。
阿普頓
地址:
一組易于使用的爬蟲(chóng)框架,支持 CSS 選擇器。
袋熊
地址:
基于 Ruby 支持 DSL 的自然網(wǎng)絡(luò )爬蟲(chóng),可以輕松提取網(wǎng)頁(yè)正文數據。
蜘蛛
地址:
全站數據采集,支持無(wú)限網(wǎng)站鏈接地址采集。
拉爾賓
地址:
larbin 是一個(gè)開(kāi)源的網(wǎng)絡(luò )爬蟲(chóng)/網(wǎng)絡(luò )蜘蛛,由法國年輕的 Sébastien Ailleret 獨立開(kāi)發(fā),用 C++ 語(yǔ)言實(shí)現。larbin 的目的是能夠跟蹤頁(yè)面的 URL 進(jìn)行擴展爬取,最終為搜索引擎提供廣泛的數據源。larbin只是一個(gè)爬蟲(chóng),也就是說(shuō)larbin只爬網(wǎng)頁(yè),怎么解析是用戶(hù)自己做的。此外,larbin 沒(méi)有提供如何存儲到數據庫和建立索引。
larbin最初的設計也是本著(zhù)設計簡(jiǎn)單但可配置性高的原則,所以我們可以看到一個(gè)簡(jiǎn)單的larbin爬蟲(chóng)每天可以抓取500萬(wàn)個(gè)網(wǎng)頁(yè),效率很高。
使用larbin,我們可以輕松獲取/確定單個(gè)網(wǎng)站的所有鏈接,甚至可以鏡像一個(gè)網(wǎng)站;我們也可以用它來(lái)創(chuàng )建一個(gè)url列表組,例如所有網(wǎng)頁(yè)的url retrive后,xml鏈接獲取?;蛘?mp3,或者自定義 larbin,可以作為搜索引擎的信息來(lái)源。
四.總結
爬蟲(chóng)框架很多,有興趣可以自己寫(xiě)一些。我們不需要掌握每一個(gè)主流爬蟲(chóng)框架,只需要根據自己的語(yǔ)言編寫(xiě)能力,深入掌握一個(gè)爬蟲(chóng)框架即可。大多數爬蟲(chóng)框架的實(shí)現方式大致相同。
如果你是 python 開(kāi)發(fā)者,我推薦你學(xué)習流行的 scrapy,如果你是 java 開(kāi)發(fā)者,我推薦你學(xué)習 webmagic。
查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(主流爬蟲(chóng)框架簡(jiǎn)介-1.地址
)
一、前言
目前市面上的爬蟲(chóng)框架比較多,有不同語(yǔ)言、不同類(lèi)型的爬蟲(chóng)框架。然而,在開(kāi)展預研時(shí),很難選擇哪一項
框架是許多開(kāi)發(fā)人員特別頭疼的問(wèn)題。
本文主要總結了市面上主流開(kāi)發(fā)語(yǔ)言中的主流爬蟲(chóng)框架,以及爬蟲(chóng)框架的優(yōu)缺點(diǎn);希望對大家選擇合適的爬蟲(chóng)框架有所幫助。
二、主流語(yǔ)言爬蟲(chóng)框架列表 常用爬蟲(chóng)框架列表 JAVA PYTHON PHP C# C/C++
阿帕奇納奇2
刮擦
php蜘蛛
點(diǎn)網(wǎng)蜘蛛
開(kāi)源搜索引擎
網(wǎng)絡(luò )魔術(shù)
克勞利
豆包
網(wǎng)絡(luò )爬蟲(chóng)
蛛網(wǎng)
赫里特里克斯
波西亞
PHP抓取
智能蜘蛛
阿普頓
網(wǎng)絡(luò )采集器
PySpider
php硒
阿博特
袋熊
爬蟲(chóng)4j
抓
網(wǎng)絡(luò )
蜘蛛
蜘蛛俠
可樂(lè )
銳角
拉爾賓
SeimiCrawler
蟒蛇硒
HtmlAgilityPack
湯
查詢(xún)
java硒
htmlunit
三、主流爬蟲(chóng)框架介紹1.Java爬蟲(chóng)框架Apache Nutch2
地址:
Nutch 是一個(gè)搜索引擎的開(kāi)源 Java 實(shí)現。它提供了我們運行自己的搜索引擎所需的所有工具。包括全文搜索和網(wǎng)絡(luò )爬蟲(chóng)。
Nutch 致力于讓每個(gè)人都能輕松、廉價(jià)地配置世界級的網(wǎng)絡(luò )搜索引擎。為了實(shí)現這一雄心勃勃的目標,Nutch 必須能夠:
* 每月獲取數十億網(wǎng)頁(yè)
* 維護這些頁(yè)面的索引
* 每秒數以千計的索引文件搜索
簡(jiǎn)而言之,Nutch 支持分發(fā)。您可以通過(guò)配置網(wǎng)站地址、規則和采集的深度(通用爬蟲(chóng)或全網(wǎng)爬蟲(chóng))對網(wǎng)站執行采集,并提供完整的-文本搜索功能,可以對來(lái)自采集的海量數據進(jìn)行全文搜索;如果要完成站點(diǎn)所有內容的采集,而不關(guān)心采集和解析準確性(不是特定頁(yè)面來(lái)滿(mǎn)足特定字段內容采集的需要) ,建議您使用Apache Nutch。如果要為站點(diǎn)的指定內容版塊指定字段采集,建議使用垂直爬蟲(chóng)更加靈活。
webmgaic(推薦)
地址:
WebMagic 是一個(gè)簡(jiǎn)單靈活的 Java 爬蟲(chóng)框架?;赪ebMagic,您可以快速開(kāi)發(fā)一個(gè)高效且易于維護的爬蟲(chóng)。
特征:
快速入門(mén)的簡(jiǎn)單 API
模塊化結構,易于擴展
提供多線(xiàn)程和分布式支持
赫里特里克斯
地址:
Heritrix是java開(kāi)發(fā)的開(kāi)源網(wǎng)絡(luò )爬蟲(chóng),用戶(hù)可以使用它從互聯(lián)網(wǎng)上爬取想要的資源。它最好的地方在于其良好的擴展性,方便用戶(hù)實(shí)現自己的爬取邏輯。
網(wǎng)絡(luò )采集器
地址:
WebCollector是一個(gè)無(wú)需配置,方便二次開(kāi)發(fā)的JAVA爬蟲(chóng)框架(內核)。它提供了精簡(jiǎn)的API,只需少量代碼即可實(shí)現強大的爬蟲(chóng)。WebCollector-Hadoop 是支持分布式爬取的 WebCollector 的 Hadoop 版本。
爬蟲(chóng)4j
地址::
crawler4j 是一個(gè)基于 Java 的輕量級獨立開(kāi)源爬蟲(chóng)框架,最大的特點(diǎn)之一就是簡(jiǎn)單。此外,它還支持多線(xiàn)程,支持代理,并且可以過(guò)濾重復的URL
基本上,從將jar加載到項目中,只需修改示例代碼即可簡(jiǎn)單實(shí)現爬蟲(chóng)的所有功能,所有這些動(dòng)作不超過(guò)半小時(shí)。
蜘蛛俠
地址:
Spiderman 是一個(gè) Java 開(kāi)源 Web 數據提取工具。它能夠采集指定的網(wǎng)頁(yè)并從這些頁(yè)面中提取有用的數據。Spiderman主要使用XPath、正則表達式、表達式引擎等技術(shù)來(lái)實(shí)現數據提取。
SeimiCrawler
地址:
一個(gè)敏捷、獨立部署的分布式Java爬蟲(chóng)框架
SeimiCrawler 是一個(gè)強大、高效、敏捷的框架,支持分布式爬蟲(chóng)開(kāi)發(fā)。希望能夠最大程度的降低新手開(kāi)發(fā)高可用性能好的爬蟲(chóng)系統的門(mén)檻,提高爬蟲(chóng)系統開(kāi)發(fā)的開(kāi)發(fā)效率。在 SeimiCrawler 的世界里,大部分人只關(guān)心編寫(xiě)爬蟲(chóng)的業(yè)務(wù)邏輯,剩下的交給 Seimi 來(lái)處理。在設計思路上,SeimiCrawler 很大程度上受到了 Python 的爬蟲(chóng)框架 Scrapy 的啟發(fā),同時(shí)融合了 Java 語(yǔ)言本身的特點(diǎn)和 Spring 的特點(diǎn),希望在國內使用更高效的 XPath 來(lái)更方便、更廣泛地解析 HTML,所以SeimiCrawler默認的HTML解析器是JsoupXpath,
湯
地址:
jsoup 是一個(gè) Java HTML 解析器,可以直接解析一個(gè) URL 地址和 HTML 文本內容。它提供了一個(gè)非常省力的 API,用于通過(guò) DOM、CSS 和類(lèi)似 jQuery 的操作方法獲取和操作數據。
2.Python爬蟲(chóng)框架scrapy(推薦)
地址:
Scrapy,一個(gè)用 Python 開(kāi)發(fā)的快速、高級的屏幕抓取和網(wǎng)頁(yè)抓取框架,用于抓取網(wǎng)站并從頁(yè)面中提取結構化數據。Scrapy 用途廣泛,可用于數據挖掘、監控和自動(dòng)化測試。
Scrapy 的吸引力在于它是一個(gè)任何人都可以根據自己的需要輕松修改的框架。還提供了各類(lèi)爬蟲(chóng)的基類(lèi),如BaseSpider、站點(diǎn)地圖爬蟲(chóng)等。最新版本提供了對web2.0爬蟲(chóng)的支持。
報廢意味著(zhù)碎片化。這個(gè) Python 爬蟲(chóng)框架叫做 Scrapy。
克勞利
地址:
高速爬取網(wǎng)站對應的內容,支持關(guān)系型和非關(guān)系型數據庫,數據可以導出為JSON、XML等。
波西亞
地址:
Portia 是一個(gè)用 Python 編寫(xiě)的開(kāi)源工具,無(wú)需任何編程知識即可直觀(guān)地抓取 網(wǎng)站 數據。無(wú)需下載或安裝任何東西,因為 Portia 在您的網(wǎng)絡(luò )瀏覽器中運行。
Portia 是一個(gè)由 scrapyhub 開(kāi)源的可視化爬蟲(chóng)規則編寫(xiě)工具。Portia 提供了一個(gè)可視化的網(wǎng)頁(yè),只需在頁(yè)面上簡(jiǎn)單的點(diǎn)擊并標記相應的待提取數據,無(wú)需任何編程知識即可完成爬蟲(chóng)規則的開(kāi)發(fā)。這些規則也可以在 Scrapy 中用于抓取頁(yè)面。
PySpider
地址:
PySpider:一個(gè)強大的網(wǎng)絡(luò )爬蟲(chóng)系統,由一個(gè)中國人編寫(xiě),具有強大的WebUI。用 Python 語(yǔ)言編寫(xiě),分布式架構,支持多種數據庫后端,強大的 WebUI 支持腳本編輯器、任務(wù)監視器、項目管理器和結果查看器。
抓
地址:
網(wǎng)絡(luò )爬蟲(chóng)框架(基于 pycurl/multicur)。
可樂(lè )
地址:
一個(gè)分布式爬蟲(chóng)框架。項目整體設計有點(diǎn)差,模塊間耦合度高,但值得借鑒。
3.PHP爬蟲(chóng)框架phpspider
地址:
phpspider 是一個(gè)爬蟲(chóng)開(kāi)發(fā)框架。使用該框架,無(wú)需了解爬蟲(chóng)底層技術(shù)實(shí)現,爬蟲(chóng)被網(wǎng)站屏蔽,有的網(wǎng)站需要登錄或驗證碼識別才能爬取等。幾行PHP代碼,可以創(chuàng )建自己的爬蟲(chóng),使用框架封裝的多進(jìn)程Worker類(lèi)庫,代碼更簡(jiǎn)潔,執行效率更高更快。
豆包
地址:
Beanbun是一個(gè)用PHP編寫(xiě)的多進(jìn)程網(wǎng)絡(luò )爬蟲(chóng)框架,具有良好的開(kāi)放性和高擴展性。
支持守護進(jìn)程和普通模式(守護進(jìn)程模式只支持Linux服務(wù)器)
默認情況下,Guzzle 用于爬行
分散式
支持內存、Redis等多種隊列方式
支持自定義URI過(guò)濾
支持廣度優(yōu)先和深度優(yōu)先兩種爬取方式
遵循 PSR-4 標準
爬取網(wǎng)頁(yè)分為多個(gè)步驟,每個(gè)步驟都支持自定義動(dòng)作(如添加代理、修改user-agent等)
一種靈活的擴展機制,可以輕松為框架創(chuàng )建插件:自定義隊列、自定義爬取方法……
PHP抓取
地址:
PHPCrawl 是一個(gè) PHP 開(kāi)源網(wǎng)絡(luò )檢索蜘蛛(爬蟲(chóng))類(lèi)庫。PHPCrawl 爬蟲(chóng)“Spider”的網(wǎng)站,提供有關(guān)網(wǎng)頁(yè)、鏈接、文件等的所有信息。
PHPCrawl povides 可以選擇性地指定爬蟲(chóng)的行為,例如采集的 URL、內容類(lèi)型、過(guò)濾器、cookie 處理等。
4.c#爬蟲(chóng)框架DotnetSpider
地址:
DotnetSpider是中國人開(kāi)源的一款跨平臺、高性能、輕量級的爬蟲(chóng)軟件,C#開(kāi)發(fā)。它是目前.Net開(kāi)源爬蟲(chóng)最好的爬蟲(chóng)之一。
網(wǎng)絡(luò )爬蟲(chóng)
地址:
NWebCrawler 是一個(gè)開(kāi)源的 C# 網(wǎng)絡(luò )爬蟲(chóng)更多 NWebCrawler
智能蜘蛛
地址:
SmartSpider爬蟲(chóng)引擎內核版本,全新的設計理念,真正的極簡(jiǎn)版。
阿博特
地址:
Abot 是一個(gè)開(kāi)源的 .net 爬蟲(chóng),它快速、易于使用和擴展。
網(wǎng)絡(luò )
地址:
這個(gè)俄羅斯天才寫(xiě)的開(kāi)源工具,為什么說(shuō)他厲害,因為他又實(shí)現了所有Http協(xié)議的底層,這有什么好處呢?只要你寫(xiě)一個(gè)爬蟲(chóng),就會(huì )遇到一個(gè)讓人抓狂的問(wèn)題,就是明知道你的Http請求頭和瀏覽器一模一樣,為什么不能得到你想要的數據。這時(shí)候如果使用HttpWebRequest,只能調試到GetRespone,無(wú)法調試底層字節流。所以,一定要有更深層次的底層組件,方便自己調試。
銳角
地址:
HTML 分析工具 AngleSharp HTML 分析工具簡(jiǎn)介 AngleSharp 簡(jiǎn)介 AngleSharp 是一個(gè)基于.NET (C#) 開(kāi)發(fā)的專(zhuān)門(mén)用于解析xHTML 源代碼的DLL 組件。
HtmlAgilityPack
地址:
HtmlAgilityPack 是一個(gè)用于 .NET 的 HTML 解析庫。支持使用 XPath 解析 HTML。命名空間:HtmlAgilityPack
查詢(xún)
地址:
CsQuery銳利的html代碼分析庫,用c#像jq處理html
5.C/C++爬蟲(chóng)框架開(kāi)源搜索引擎
地址:
基于 C/C++ 的網(wǎng)絡(luò )爬蟲(chóng)和搜索引擎。
蛛網(wǎng)
地址:
一個(gè)非常靈活、易于擴展的網(wǎng)絡(luò )爬蟲(chóng),可用作單點(diǎn)部署。
阿普頓
地址:
一組易于使用的爬蟲(chóng)框架,支持 CSS 選擇器。
袋熊
地址:
基于 Ruby 支持 DSL 的自然網(wǎng)絡(luò )爬蟲(chóng),可以輕松提取網(wǎng)頁(yè)正文數據。
蜘蛛
地址:
全站數據采集,支持無(wú)限網(wǎng)站鏈接地址采集。
拉爾賓
地址:
larbin 是一個(gè)開(kāi)源的網(wǎng)絡(luò )爬蟲(chóng)/網(wǎng)絡(luò )蜘蛛,由法國年輕的 Sébastien Ailleret 獨立開(kāi)發(fā),用 C++ 語(yǔ)言實(shí)現。larbin 的目的是能夠跟蹤頁(yè)面的 URL 進(jìn)行擴展爬取,最終為搜索引擎提供廣泛的數據源。larbin只是一個(gè)爬蟲(chóng),也就是說(shuō)larbin只爬網(wǎng)頁(yè),怎么解析是用戶(hù)自己做的。此外,larbin 沒(méi)有提供如何存儲到數據庫和建立索引。
larbin最初的設計也是本著(zhù)設計簡(jiǎn)單但可配置性高的原則,所以我們可以看到一個(gè)簡(jiǎn)單的larbin爬蟲(chóng)每天可以抓取500萬(wàn)個(gè)網(wǎng)頁(yè),效率很高。
使用larbin,我們可以輕松獲取/確定單個(gè)網(wǎng)站的所有鏈接,甚至可以鏡像一個(gè)網(wǎng)站;我們也可以用它來(lái)創(chuàng )建一個(gè)url列表組,例如所有網(wǎng)頁(yè)的url retrive后,xml鏈接獲取?;蛘?mp3,或者自定義 larbin,可以作為搜索引擎的信息來(lái)源。
四.總結
爬蟲(chóng)框架很多,有興趣可以自己寫(xiě)一些。我們不需要掌握每一個(gè)主流爬蟲(chóng)框架,只需要根據自己的語(yǔ)言編寫(xiě)能力,深入掌握一個(gè)爬蟲(chóng)框架即可。大多數爬蟲(chóng)框架的實(shí)現方式大致相同。
如果你是 python 開(kāi)發(fā)者,我推薦你學(xué)習流行的 scrapy,如果你是 java 開(kāi)發(fā)者,我推薦你學(xué)習 webmagic。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,要么就是做網(wǎng)站后端的)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 62 次瀏覽 ? 2022-02-01 01:04
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,要么就是做網(wǎng)站后端的。所以你要懂爬蟲(chóng)??傮w算下來(lái)如果是不考慮網(wǎng)站架構的話(huà)。去304080找人測試/調試半小時(shí)足夠。
python講課視頻推薦量目前比較多的.我就不推薦老師了,不過(guò)推薦個(gè)平臺,網(wǎng)易云課堂的翁愷老師.
爬蟲(chóng)上黑客門(mén)泉,最近又有了神兵連.可以看看。
說(shuō)實(shí)話(huà),大部分mooc都有python入門(mén)課程,你去找找看。如果是想深入做爬蟲(chóng),學(xué)習爬蟲(chóng)知識和技術(shù)很久的話(huà),
python雖然前景廣闊,但目前真的沒(méi)必要非得去找視頻,python的書(shū)籍資料,以及一些比賽可以去參加啊,
只是要會(huì )寫(xiě)請求就行,點(diǎn)擊寫(xiě)個(gè)request沒(méi)問(wèn)題,搞些簡(jiǎn)單的測試自己寫(xiě)cookie來(lái)改隨機數字也可以,但是要想寫(xiě)的好必須要做一些性能優(yōu)化。如果不做性能優(yōu)化,我們的框架flask啥的就是放不下腳本的。python基礎只要認識字母表就行,你只會(huì )寫(xiě)基礎請求,別人咋用你就照葫蘆畫(huà)瓢。python入門(mén)的時(shí)候不要怕難,python要是真牛逼了,十幾萬(wàn)都不愁,畢竟最近這幾年python很火。
本科實(shí)驗室老師做得是類(lèi)似的情況,如果題主真要開(kāi)始這一行就往下看,直接了當的寫(xiě)請求,getposturl然后簡(jiǎn)單的測試,然后就是一堆的人肉命令服務(wù)器來(lái)接受請求。抓了之后再看看數據庫去record整理分析。目前水平有限,不敢隨便給意見(jiàn),但是看到很多黑是其實(shí)是遇到瓶頸后想死皮賴(lài)臉尋求希望,估計題主是一時(shí)沒(méi)有反應過(guò)來(lái)怎么去提高。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,要么就是做網(wǎng)站后端的)
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,要么就是做網(wǎng)站后端的。所以你要懂爬蟲(chóng)??傮w算下來(lái)如果是不考慮網(wǎng)站架構的話(huà)。去304080找人測試/調試半小時(shí)足夠。
python講課視頻推薦量目前比較多的.我就不推薦老師了,不過(guò)推薦個(gè)平臺,網(wǎng)易云課堂的翁愷老師.
爬蟲(chóng)上黑客門(mén)泉,最近又有了神兵連.可以看看。
說(shuō)實(shí)話(huà),大部分mooc都有python入門(mén)課程,你去找找看。如果是想深入做爬蟲(chóng),學(xué)習爬蟲(chóng)知識和技術(shù)很久的話(huà),
python雖然前景廣闊,但目前真的沒(méi)必要非得去找視頻,python的書(shū)籍資料,以及一些比賽可以去參加啊,
只是要會(huì )寫(xiě)請求就行,點(diǎn)擊寫(xiě)個(gè)request沒(méi)問(wèn)題,搞些簡(jiǎn)單的測試自己寫(xiě)cookie來(lái)改隨機數字也可以,但是要想寫(xiě)的好必須要做一些性能優(yōu)化。如果不做性能優(yōu)化,我們的框架flask啥的就是放不下腳本的。python基礎只要認識字母表就行,你只會(huì )寫(xiě)基礎請求,別人咋用你就照葫蘆畫(huà)瓢。python入門(mén)的時(shí)候不要怕難,python要是真牛逼了,十幾萬(wàn)都不愁,畢竟最近這幾年python很火。
本科實(shí)驗室老師做得是類(lèi)似的情況,如果題主真要開(kāi)始這一行就往下看,直接了當的寫(xiě)請求,getposturl然后簡(jiǎn)單的測試,然后就是一堆的人肉命令服務(wù)器來(lái)接受請求。抓了之后再看看數據庫去record整理分析。目前水平有限,不敢隨便給意見(jiàn),但是看到很多黑是其實(shí)是遇到瓶頸后想死皮賴(lài)臉尋求希望,估計題主是一時(shí)沒(méi)有反應過(guò)來(lái)怎么去提高。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(a爬蟲(chóng)語(yǔ)言選擇方案-上海怡健醫學(xué)())
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 51 次瀏覽 ? 2022-01-29 04:03
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據并處理得到pandas數據整理存入數據庫a)針對不同的站點(diǎn)抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據;b)有些網(wǎng)站提供了python爬蟲(chóng)接口,例如,新浪博客類(lèi),這種網(wǎng)站并沒(méi)有提供python爬蟲(chóng)接口,所以需要采用“xpath”來(lái)解析數據。
a爬蟲(chóng)語(yǔ)言選擇方案:cpicker爬蟲(chóng)scrapy爬蟲(chóng)d)java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:douban頁(yè)面解析:在openresty虛擬機上搭建python爬蟲(chóng)示例數據庫有:jdbc、sqlite、mysql-redis四種方式數據庫(數據格式):數據庫選擇:本次頁(yè)面數據處理為pandas數據庫存儲:douban.pymysql.postgresql數據庫:mysql、sqlite、sqlite3圖片網(wǎng)站:b.針對不同站點(diǎn)抓取抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據。
a)針對不同的站點(diǎn)抓取抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據;b)有些網(wǎng)站提供了python爬蟲(chóng)接口,例如,新浪博客類(lèi),這種網(wǎng)站并沒(méi)有提供python爬蟲(chóng)接口,所以需要采用“xpath”來(lái)解析數據。a爬蟲(chóng)語(yǔ)言選擇方案:cpicker爬蟲(chóng)scrapy爬蟲(chóng)d)java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:方案:java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(a爬蟲(chóng)語(yǔ)言選擇方案-上海怡健醫學(xué)())
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據并處理得到pandas數據整理存入數據庫a)針對不同的站點(diǎn)抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據;b)有些網(wǎng)站提供了python爬蟲(chóng)接口,例如,新浪博客類(lèi),這種網(wǎng)站并沒(méi)有提供python爬蟲(chóng)接口,所以需要采用“xpath”來(lái)解析數據。
a爬蟲(chóng)語(yǔ)言選擇方案:cpicker爬蟲(chóng)scrapy爬蟲(chóng)d)java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:douban頁(yè)面解析:在openresty虛擬機上搭建python爬蟲(chóng)示例數據庫有:jdbc、sqlite、mysql-redis四種方式數據庫(數據格式):數據庫選擇:本次頁(yè)面數據處理為pandas數據庫存儲:douban.pymysql.postgresql數據庫:mysql、sqlite、sqlite3圖片網(wǎng)站:b.針對不同站點(diǎn)抓取抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據。
a)針對不同的站點(diǎn)抓取抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據;b)有些網(wǎng)站提供了python爬蟲(chóng)接口,例如,新浪博客類(lèi),這種網(wǎng)站并沒(méi)有提供python爬蟲(chóng)接口,所以需要采用“xpath”來(lái)解析數據。a爬蟲(chóng)語(yǔ)言選擇方案:cpicker爬蟲(chóng)scrapy爬蟲(chóng)d)java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:方案:java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(如何用c語(yǔ)言去抓取網(wǎng)頁(yè)數據?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 59 次瀏覽 ? 2022-01-26 22:01
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,一般是無(wú)序列表,有序列表就是典型的有順序的,有序列表可以說(shuō)是無(wú)序的了,就是從a開(kāi)始,全部都是編號為1的數據。通過(guò)c語(yǔ)言寫(xiě)網(wǎng)頁(yè)爬蟲(chóng)的同學(xué),可能也見(jiàn)過(guò)這樣的有序網(wǎng)頁(yè)的html格式。常用的抓取python網(wǎng)頁(yè)爬蟲(chóng),最常用的方法之一,就是用mongoose實(shí)現。我個(gè)人在學(xué)習的時(shí)候,研究的是如何用c語(yǔ)言去抓取文本數據,這里說(shuō)的文本數據,是特指網(wǎng)頁(yè)中自帶的數據,主要是intel歷史ip之類(lèi)的數據。
我們平時(shí)爬取網(wǎng)頁(yè)文本數據,爬取新聞數據,其實(shí)都是從網(wǎng)頁(yè)的excel表中查詢(xún)的。那么如何用c語(yǔ)言去抓取html表格數據呢?其實(shí)也很簡(jiǎn)單,只要簡(jiǎn)單的帶個(gè)簡(jiǎn)單循環(huán)的循環(huán)就可以了。首先我們要知道,html格式包含了什么,簡(jiǎn)單來(lái)說(shuō)就是在互聯(lián)網(wǎng)上,只要html中出現一個(gè)特定的網(wǎng)址,就可以在瀏覽器上訪(fǎng)問(wèn)到對應的網(wǎng)頁(yè)數據。
一般的,在瀏覽器瀏覽的時(shí)候,經(jīng)常會(huì )碰到這樣的網(wǎng)址,即/#/doctype/none-transform/plain/text/html/xhtml/1.0///get.html。這樣的網(wǎng)址,就代表了對應的網(wǎng)頁(yè)文本,網(wǎng)頁(yè)里面的頁(yè)面鏈接,可以在瀏覽器里面查到。因此,我們用c語(yǔ)言去抓取這樣的網(wǎng)址,就會(huì )獲得對應的頁(yè)面鏈接。
雖然大家會(huì )發(fā)現,html的網(wǎng)址還可以自定義內容,但是,這種情況實(shí)在是不常見(jiàn),我們也不一定能夠自定義。所以,我們可以說(shuō),在一定條件下,能獲取到網(wǎng)頁(yè)數據的網(wǎng)址,就可以獲取對應的頁(yè)面數據。經(jīng)過(guò)實(shí)踐,我發(fā)現非常有限,很難有可以自定義頁(yè)面的網(wǎng)址,這是無(wú)法獲取自定義的頁(yè)面數據的原因。所以我們下面來(lái)說(shuō)明,能自定義的頁(yè)面網(wǎng)址,可以在哪些有關(guān)html的框架中找到。
在我正式的寫(xiě)開(kāi)發(fā)的時(shí)候,我使用python來(lái)做項目。為了自己寫(xiě)好代碼,需要編寫(xiě)各種的基礎代碼,一方面是測試不同的包可以實(shí)現同樣的功能,但另一方面,就是不斷給自己編寫(xiě)各種的命令行,來(lái)讓自己的python理解起來(lái)更加高效,本文就是為了后者而寫(xiě)的。在編寫(xiě)一些命令行上的命令的時(shí)候,可能會(huì )感覺(jué)特別不爽,因為它們經(jīng)常會(huì )讓你碰到一些很痛苦的東西。
比如說(shuō)命令行中有一個(gè)清除內存的命令,我經(jīng)常要寫(xiě)自己不需要的shell語(yǔ)句,寫(xiě)各種的set然后賦值,我對于這些命令肯定有一些抵觸。但如果把它對應在python中,我直接將對應的命令寫(xiě)進(jìn)tab鍵里,就可以在python中直接寫(xiě)內存了。有時(shí),需要寫(xiě)一些命令行注釋?zhuān)倚枰獙?xiě)上多個(gè)tab鍵,后面加上一個(gè)大括號,來(lái)表示,我在這里沒(méi)有做,就可以被注釋掉。另外,我還經(jīng)常為了避免python代碼遇到一些復雜的shell語(yǔ)句,需要多寫(xiě)一個(gè)tab鍵來(lái)啟動(dòng)其它的。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(如何用c語(yǔ)言去抓取網(wǎng)頁(yè)數據?(圖))
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,一般是無(wú)序列表,有序列表就是典型的有順序的,有序列表可以說(shuō)是無(wú)序的了,就是從a開(kāi)始,全部都是編號為1的數據。通過(guò)c語(yǔ)言寫(xiě)網(wǎng)頁(yè)爬蟲(chóng)的同學(xué),可能也見(jiàn)過(guò)這樣的有序網(wǎng)頁(yè)的html格式。常用的抓取python網(wǎng)頁(yè)爬蟲(chóng),最常用的方法之一,就是用mongoose實(shí)現。我個(gè)人在學(xué)習的時(shí)候,研究的是如何用c語(yǔ)言去抓取文本數據,這里說(shuō)的文本數據,是特指網(wǎng)頁(yè)中自帶的數據,主要是intel歷史ip之類(lèi)的數據。
我們平時(shí)爬取網(wǎng)頁(yè)文本數據,爬取新聞數據,其實(shí)都是從網(wǎng)頁(yè)的excel表中查詢(xún)的。那么如何用c語(yǔ)言去抓取html表格數據呢?其實(shí)也很簡(jiǎn)單,只要簡(jiǎn)單的帶個(gè)簡(jiǎn)單循環(huán)的循環(huán)就可以了。首先我們要知道,html格式包含了什么,簡(jiǎn)單來(lái)說(shuō)就是在互聯(lián)網(wǎng)上,只要html中出現一個(gè)特定的網(wǎng)址,就可以在瀏覽器上訪(fǎng)問(wèn)到對應的網(wǎng)頁(yè)數據。
一般的,在瀏覽器瀏覽的時(shí)候,經(jīng)常會(huì )碰到這樣的網(wǎng)址,即/#/doctype/none-transform/plain/text/html/xhtml/1.0///get.html。這樣的網(wǎng)址,就代表了對應的網(wǎng)頁(yè)文本,網(wǎng)頁(yè)里面的頁(yè)面鏈接,可以在瀏覽器里面查到。因此,我們用c語(yǔ)言去抓取這樣的網(wǎng)址,就會(huì )獲得對應的頁(yè)面鏈接。
雖然大家會(huì )發(fā)現,html的網(wǎng)址還可以自定義內容,但是,這種情況實(shí)在是不常見(jiàn),我們也不一定能夠自定義。所以,我們可以說(shuō),在一定條件下,能獲取到網(wǎng)頁(yè)數據的網(wǎng)址,就可以獲取對應的頁(yè)面數據。經(jīng)過(guò)實(shí)踐,我發(fā)現非常有限,很難有可以自定義頁(yè)面的網(wǎng)址,這是無(wú)法獲取自定義的頁(yè)面數據的原因。所以我們下面來(lái)說(shuō)明,能自定義的頁(yè)面網(wǎng)址,可以在哪些有關(guān)html的框架中找到。
在我正式的寫(xiě)開(kāi)發(fā)的時(shí)候,我使用python來(lái)做項目。為了自己寫(xiě)好代碼,需要編寫(xiě)各種的基礎代碼,一方面是測試不同的包可以實(shí)現同樣的功能,但另一方面,就是不斷給自己編寫(xiě)各種的命令行,來(lái)讓自己的python理解起來(lái)更加高效,本文就是為了后者而寫(xiě)的。在編寫(xiě)一些命令行上的命令的時(shí)候,可能會(huì )感覺(jué)特別不爽,因為它們經(jīng)常會(huì )讓你碰到一些很痛苦的東西。
比如說(shuō)命令行中有一個(gè)清除內存的命令,我經(jīng)常要寫(xiě)自己不需要的shell語(yǔ)句,寫(xiě)各種的set然后賦值,我對于這些命令肯定有一些抵觸。但如果把它對應在python中,我直接將對應的命令寫(xiě)進(jìn)tab鍵里,就可以在python中直接寫(xiě)內存了。有時(shí),需要寫(xiě)一些命令行注釋?zhuān)倚枰獙?xiě)上多個(gè)tab鍵,后面加上一個(gè)大括號,來(lái)表示,我在這里沒(méi)有做,就可以被注釋掉。另外,我還經(jīng)常為了避免python代碼遇到一些復雜的shell語(yǔ)句,需要多寫(xiě)一個(gè)tab鍵來(lái)啟動(dòng)其它的。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(跳出細節信息,只有極少數是自己關(guān)心的(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-01-26 11:02
使用的包主要有:
Requests 具有良好的樹(shù)狀分析特性,可以省去正則表達式帶來(lái)的麻煩。打算學(xué)習urllib,熟悉爬蟲(chóng)的一般特性。如果加載成功,則說(shuō)明對應的包已經(jīng)安裝完畢。
C-程序管理
運行—>配置,設置.py文件的存放路徑:
三、頁(yè)面爬?。ㄒ韵禄趐ython2.7,3.5類(lèi)似)
跳出細節,先想想爬取需要哪些操作:
第一步:爬取頁(yè)面信息
打開(kāi)一個(gè)網(wǎng)頁(yè)的過(guò)程可以簡(jiǎn)化為:HTTP是用戶(hù)發(fā)出的請求—>對方返回協(xié)議—>頁(yè)面被解析顯示。
對于景觀(guān) 網(wǎng)站,使用基本的 python 爬取代碼:
import urllib2
def download(url):
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
url = 'http://www.onlytease.com/'
page = download(url)
print page
關(guān)于解碼信息,打開(kāi)網(wǎng)頁(yè)按F12,可以在頭部下拉列表中看到編碼方式,解碼與之對應。
至此,已經(jīng)實(shí)現了基礎網(wǎng)頁(yè)的爬取功能。然而,只有少數整頁(yè)關(guān)注自己?;A框架的搭建只剩下一個(gè)問(wèn)題:如何爬取你想要的內容。
第二步:定位目標信息
打開(kāi)任意網(wǎng)頁(yè)(以chrome為例),選擇感興趣的內容,右鍵:勾選(或快捷鍵:Crtl + shift + I),即可查看對應詳情:
例如選擇一張圖片:
查看電腦User-agent的方式有很多種,可以直接登錄網(wǎng)站。
這是人類(lèi)觀(guān)察的一種方式。如果要自動(dòng)定位目標信息,可以使用正則表達式、beautifulsoup等工具。請參閱此 文章 以了解常見(jiàn)的正則表達式。
第三步:編寫(xiě)目標內容
拋開(kāi)前兩步,以圖片為例,大家可以在網(wǎng)上搜索python網(wǎng)頁(yè)圖片下載??淳唧w操作,文本/壓縮文件等。
url = 'http://pics.sc.chinaz.com/files/pic/pic9/201705/bpic1322.jpg'
f = open('1.jpg',"wb") #命名并打開(kāi)文件
req = urllib2.urlopen(url)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
這樣,網(wǎng)上的圖片進(jìn)入本地:
爬取小圖:
代碼:
import urllib2
import re
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
#Step2:獲取目標信息鏈接,我要的是jpg的鏈接
url = 'http://sc.chinaz.com/tupian/fengjingtupian.html'
page = download(url)
imglist = re.findall('src2="(.*?)"',page) #re.findall() 方法讀取html 中包含 imgre(正則表達式)的 數據
#Step3:文件保存至本地
i = 1
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
req = urllib2.urlopen(imgname)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
在包里:
為什么是src2而不是src,把下載的文本復制到txt文件,搜索.jpg,
我看到是src2,但是網(wǎng)頁(yè)是src:
以上爬取的是一頁(yè)圖片。如果你想得到總數怎么辦?您可以通過(guò)正則表達式匹配和計算總頁(yè)數??纯此?br /> 打開(kāi)網(wǎng)站,一共找到2217頁(yè):
除了第一頁(yè)有點(diǎn)不同:
其他人跟隨等等:
好的,現在進(jìn)一步改進(jìn)代碼:
import urllib2
import re
import numpy as np
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
urllen = 2217
tag = np.arange(1,urllen+1)
base = 'http://sc.chinaz.com/tupian/'
i = 1
for j in tag:
if j==1:
url = base+'index.html'
else:
url = base+'index_'+str(j)+'.html'
page = download(url)
imglist = re.findall('src2="(.*?)"',page) #re.findall() 方法讀取html的.jpg鏈接
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
req = urllib2.urlopen(imgname)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
f.close()
已成功下載:
有一個(gè)問(wèn)題:
未設置超時(shí)參數。結果,當網(wǎng)絡(luò )環(huán)境不好的時(shí)候,經(jīng)常會(huì )出現read()方法沒(méi)有響應的問(wèn)題。程序卡在 read() 方法中。為 urlopen 添加超時(shí)是可以的。設置 timeout 后超時(shí)后,會(huì )在讀取超時(shí)時(shí)拋出 socket.timeout 異常。如果希望程序穩定,需要在urlopen中加入異常處理,出現異常時(shí)重試。
修改這句話(huà):
html = urllib2.urlopen(request,timeout=2).read()
問(wèn)題解決了。
但是還有其他錯誤:
參考下圖,添加異常處理,問(wèn)題解決。
四、渲染動(dòng)態(tài)網(wǎng)頁(yè)抓取
python工具包可以在這里下載。安裝selenium工具包,安裝好,在python2中單獨下載:cssselect,顧名思義,css+select就是第一個(gè)css樣式選擇。
這里只記錄應用,偷懶:使用selenium+phantomjs的爬取方式。
phantomjs簡(jiǎn)介:
PhantomJS 是一個(gè)基于 WebKit 的服務(wù)器端 JavaScript API。它完全支持沒(méi)有瀏覽器支持的 Web,并且速度很快并且原生支持各種 Web 標準:DOM 操作、CSS 選擇器、JSON、Canvas 和 SVG。PhantomJS 可用于頁(yè)面自動(dòng)化、網(wǎng)絡(luò )監控、網(wǎng)頁(yè)截圖和 UI 測試。
很多網(wǎng)頁(yè)不會(huì )一次加載全部?jì)热?,如果每次都刷新?yè)面也不理想,所以借助動(dòng)態(tài)加載,可以看到只有這部分內容加載到了哪里。Phantomjs可以在不打開(kāi)瀏覽器的情況下獲取加載后的網(wǎng)頁(yè)內容,這樣可以通過(guò)urllib2.請求操作讀取網(wǎng)頁(yè)的全部?jì)热?,而不是?dòng)態(tài)加載的內容.
注意兩點(diǎn):
1-phantomjs的\bin需要在環(huán)境變量PATH中添加絕對路徑;
2-在代碼中:在路徑前添加 r
browser = webdriver.PhantomJS(executable_path=r"C:\Users\Nobleding\Anaconda3\Lib\site-packages\phantomjs-2.1.1-windows\bin\phantomjs.exe")
#coding=utf-8
from selenium import webdriver
import re
import urllib2
browser = webdriver.PhantomJS(executable_path=r"C:\Users\Nobleding\Anaconda3\Lib\site-packages\phantomjs-2.1.1-windows\bin\phantomjs.exe")
browser.implicitly_wait(50)
#browser.get("https://www.baidu.com/")
urllink = "網(wǎng)址名稱(chēng)"
browser.get(urllink)
page = browser.execute_script("return document.documentElement.outerHTML")
imglist = re.findall('src=(.*?).jpg', page) #re.findall() 方法讀取html的.jpg鏈接
i=1
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
try:
imglink = imgname+'.jpg'
n = len(imglink)
req = urllib2.urlopen(imglink[1:n],timeout = 3)
except urllib2.URLError, e:
print 'error:', e.reason
continue
except socket.error as e:
continue
except socket.timeout as e:
continue
except urllib2.HTTPError:
continue
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
f.close()
基于urllib2/urllib3/urllib,經(jīng)常報超時(shí)錯誤。直接使用requests更直接,不再報超時(shí)錯誤:
<p># -*- coding: utf-8 -*-
"""
Created on Sun May 07 09:48:39 2017
@author: Nobleding
"""
import requests
import re
import socket
import numpy as np
import urllib
from socket import timeout
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
# request = requests.Request(url,headers = headers)
try:
htmll = requests.get(url,headers=header)
html = htmll.text
# except requests.URLError:
# print ('error:')
# html = None
except socket.error as e:
html = None
except socket.timeout as e:
html = None
except urllib.request.HTTPError:
html = None
return html
urlmain =網(wǎng)址
pagemain = download(urlmain)
#pagemain = pagemain.decode('utf-8')
imglistmain = re.findall(' 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(跳出細節信息,只有極少數是自己關(guān)心的(組圖))
使用的包主要有:
Requests 具有良好的樹(shù)狀分析特性,可以省去正則表達式帶來(lái)的麻煩。打算學(xué)習urllib,熟悉爬蟲(chóng)的一般特性。如果加載成功,則說(shuō)明對應的包已經(jīng)安裝完畢。

C-程序管理
運行—>配置,設置.py文件的存放路徑:

三、頁(yè)面爬?。ㄒ韵禄趐ython2.7,3.5類(lèi)似)
跳出細節,先想想爬取需要哪些操作:
第一步:爬取頁(yè)面信息
打開(kāi)一個(gè)網(wǎng)頁(yè)的過(guò)程可以簡(jiǎn)化為:HTTP是用戶(hù)發(fā)出的請求—>對方返回協(xié)議—>頁(yè)面被解析顯示。
對于景觀(guān) 網(wǎng)站,使用基本的 python 爬取代碼:
import urllib2
def download(url):
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
url = 'http://www.onlytease.com/'
page = download(url)
print page
關(guān)于解碼信息,打開(kāi)網(wǎng)頁(yè)按F12,可以在頭部下拉列表中看到編碼方式,解碼與之對應。

至此,已經(jīng)實(shí)現了基礎網(wǎng)頁(yè)的爬取功能。然而,只有少數整頁(yè)關(guān)注自己?;A框架的搭建只剩下一個(gè)問(wèn)題:如何爬取你想要的內容。
第二步:定位目標信息
打開(kāi)任意網(wǎng)頁(yè)(以chrome為例),選擇感興趣的內容,右鍵:勾選(或快捷鍵:Crtl + shift + I),即可查看對應詳情:
例如選擇一張圖片:

查看電腦User-agent的方式有很多種,可以直接登錄網(wǎng)站。
這是人類(lèi)觀(guān)察的一種方式。如果要自動(dòng)定位目標信息,可以使用正則表達式、beautifulsoup等工具。請參閱此 文章 以了解常見(jiàn)的正則表達式。
第三步:編寫(xiě)目標內容
拋開(kāi)前兩步,以圖片為例,大家可以在網(wǎng)上搜索python網(wǎng)頁(yè)圖片下載??淳唧w操作,文本/壓縮文件等。
url = 'http://pics.sc.chinaz.com/files/pic/pic9/201705/bpic1322.jpg'
f = open('1.jpg',"wb") #命名并打開(kāi)文件
req = urllib2.urlopen(url)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
這樣,網(wǎng)上的圖片進(jìn)入本地:

爬取小圖:

代碼:
import urllib2
import re
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
#Step2:獲取目標信息鏈接,我要的是jpg的鏈接
url = 'http://sc.chinaz.com/tupian/fengjingtupian.html'
page = download(url)
imglist = re.findall('src2="(.*?)"',page) #re.findall() 方法讀取html 中包含 imgre(正則表達式)的 數據
#Step3:文件保存至本地
i = 1
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
req = urllib2.urlopen(imgname)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
在包里:

為什么是src2而不是src,把下載的文本復制到txt文件,搜索.jpg,

我看到是src2,但是網(wǎng)頁(yè)是src:

以上爬取的是一頁(yè)圖片。如果你想得到總數怎么辦?您可以通過(guò)正則表達式匹配和計算總頁(yè)數??纯此?br /> 打開(kāi)網(wǎng)站,一共找到2217頁(yè):

除了第一頁(yè)有點(diǎn)不同:

其他人跟隨等等:

好的,現在進(jìn)一步改進(jìn)代碼:
import urllib2
import re
import numpy as np
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
urllen = 2217
tag = np.arange(1,urllen+1)
base = 'http://sc.chinaz.com/tupian/'
i = 1
for j in tag:
if j==1:
url = base+'index.html'
else:
url = base+'index_'+str(j)+'.html'
page = download(url)
imglist = re.findall('src2="(.*?)"',page) #re.findall() 方法讀取html的.jpg鏈接
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
req = urllib2.urlopen(imgname)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
f.close()
已成功下載:

有一個(gè)問(wèn)題:
未設置超時(shí)參數。結果,當網(wǎng)絡(luò )環(huán)境不好的時(shí)候,經(jīng)常會(huì )出現read()方法沒(méi)有響應的問(wèn)題。程序卡在 read() 方法中。為 urlopen 添加超時(shí)是可以的。設置 timeout 后超時(shí)后,會(huì )在讀取超時(shí)時(shí)拋出 socket.timeout 異常。如果希望程序穩定,需要在urlopen中加入異常處理,出現異常時(shí)重試。
修改這句話(huà):
html = urllib2.urlopen(request,timeout=2).read()
問(wèn)題解決了。
但是還有其他錯誤:

參考下圖,添加異常處理,問(wèn)題解決。
四、渲染動(dòng)態(tài)網(wǎng)頁(yè)抓取
python工具包可以在這里下載。安裝selenium工具包,安裝好,在python2中單獨下載:cssselect,顧名思義,css+select就是第一個(gè)css樣式選擇。
這里只記錄應用,偷懶:使用selenium+phantomjs的爬取方式。
phantomjs簡(jiǎn)介:
PhantomJS 是一個(gè)基于 WebKit 的服務(wù)器端 JavaScript API。它完全支持沒(méi)有瀏覽器支持的 Web,并且速度很快并且原生支持各種 Web 標準:DOM 操作、CSS 選擇器、JSON、Canvas 和 SVG。PhantomJS 可用于頁(yè)面自動(dòng)化、網(wǎng)絡(luò )監控、網(wǎng)頁(yè)截圖和 UI 測試。
很多網(wǎng)頁(yè)不會(huì )一次加載全部?jì)热?,如果每次都刷新?yè)面也不理想,所以借助動(dòng)態(tài)加載,可以看到只有這部分內容加載到了哪里。Phantomjs可以在不打開(kāi)瀏覽器的情況下獲取加載后的網(wǎng)頁(yè)內容,這樣可以通過(guò)urllib2.請求操作讀取網(wǎng)頁(yè)的全部?jì)热?,而不是?dòng)態(tài)加載的內容.
注意兩點(diǎn):
1-phantomjs的\bin需要在環(huán)境變量PATH中添加絕對路徑;
2-在代碼中:在路徑前添加 r
browser = webdriver.PhantomJS(executable_path=r"C:\Users\Nobleding\Anaconda3\Lib\site-packages\phantomjs-2.1.1-windows\bin\phantomjs.exe")
#coding=utf-8
from selenium import webdriver
import re
import urllib2
browser = webdriver.PhantomJS(executable_path=r"C:\Users\Nobleding\Anaconda3\Lib\site-packages\phantomjs-2.1.1-windows\bin\phantomjs.exe")
browser.implicitly_wait(50)
#browser.get("https://www.baidu.com/")
urllink = "網(wǎng)址名稱(chēng)"
browser.get(urllink)
page = browser.execute_script("return document.documentElement.outerHTML")
imglist = re.findall('src=(.*?).jpg', page) #re.findall() 方法讀取html的.jpg鏈接
i=1
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
try:
imglink = imgname+'.jpg'
n = len(imglink)
req = urllib2.urlopen(imglink[1:n],timeout = 3)
except urllib2.URLError, e:
print 'error:', e.reason
continue
except socket.error as e:
continue
except socket.timeout as e:
continue
except urllib2.HTTPError:
continue
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
f.close()
基于urllib2/urllib3/urllib,經(jīng)常報超時(shí)錯誤。直接使用requests更直接,不再報超時(shí)錯誤:
<p># -*- coding: utf-8 -*-
"""
Created on Sun May 07 09:48:39 2017
@author: Nobleding
"""
import requests
import re
import socket
import numpy as np
import urllib
from socket import timeout
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
# request = requests.Request(url,headers = headers)
try:
htmll = requests.get(url,headers=header)
html = htmll.text
# except requests.URLError:
# print ('error:')
# html = None
except socket.error as e:
html = None
except socket.timeout as e:
html = None
except urllib.request.HTTPError:
html = None
return html
urlmain =網(wǎng)址
pagemain = download(urlmain)
#pagemain = pagemain.decode('utf-8')
imglistmain = re.findall('
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(爬蟲(chóng)在數據分析領(lǐng)域的應用,如何幫助我們提升數據分析質(zhì)量)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 115 次瀏覽 ? 2022-01-25 10:10
在當今信息化和數字化的時(shí)代,人們離不開(kāi)網(wǎng)絡(luò )搜索,但想想看,在搜索過(guò)程中,你真的可以得到相關(guān)信息,因為有人在幫你過(guò)濾相關(guān)內容,呈現在你面前。
就像在餐館里一樣,你點(diǎn)了土豆然后得到它們,因為有人幫你在土豆、蘿卜、西紅柿等中找到它們,然后有人把它們帶到你的餐桌上。在網(wǎng)上,這兩個(gè)動(dòng)作是一個(gè)叫爬蟲(chóng)的同學(xué)為你實(shí)現的。
也就是說(shuō),沒(méi)有爬蟲(chóng),就沒(méi)有今天的檢索,就無(wú)法準確查找信息和高效獲取數據。今天DataHunter就來(lái)談?wù)勁老x(chóng)在數據分析領(lǐng)域的應用,以及它如何幫助我們提高數據分析的質(zhì)量。
一、數據時(shí)代,爬蟲(chóng)的本質(zhì)是提高效率
網(wǎng)絡(luò )爬蟲(chóng),又稱(chēng)網(wǎng)絡(luò )機器人,可以代替人自動(dòng)瀏覽網(wǎng)絡(luò )信息,采集和組織數據。
它是一個(gè)程序,其基本原理是向網(wǎng)站/網(wǎng)絡(luò )發(fā)起請求,獲取資源后分析提取有用數據。從技術(shù)上講,就是通過(guò)程序模擬瀏覽器請求站點(diǎn)的行為,將站點(diǎn)返回的HTML代碼/JSON數據/二進(jìn)制數據(圖片、視頻)爬取到本地,然后提取您需要的數據并將其存儲以供使用。
每個(gè)程序都有自己的規則,網(wǎng)絡(luò )爬蟲(chóng)也不例外。它穿梭于世界各地的各種網(wǎng)站之間,根據人們強加的規則將采集信息。我們稱(chēng)這些規則為網(wǎng)絡(luò )爬蟲(chóng)算法。規則是人定的,是人根據自己的目的和需要設計的。因此,根據用戶(hù)的目的,爬蟲(chóng)可以有不同的功能。但所有爬蟲(chóng)的本質(zhì)是方便人們在海量的互聯(lián)網(wǎng)信息中找到并下載自己想要的信息類(lèi)型,從而提高信息獲取效率。
二、爬蟲(chóng)的應用:搜索并幫助企業(yè)做強業(yè)務(wù)
1.搜索引擎:爬取網(wǎng)站為網(wǎng)絡(luò )用戶(hù)提供便利
在互聯(lián)網(wǎng)的早期,能夠提供全球范圍內信息的網(wǎng)站并不多,用戶(hù)也不多。Internet 只是文件傳輸協(xié)議 (FTP) 站點(diǎn)的集合,用戶(hù)可以導航這些站點(diǎn)以查找特定的共享文件,并查找和組合 Internet 上可用的分布式數據,創(chuàng )建了一個(gè)稱(chēng)為網(wǎng)絡(luò )爬蟲(chóng)的自動(dòng)化程序 /Robot,它可以爬取網(wǎng)絡(luò )上的所有網(wǎng)頁(yè),然后將所有頁(yè)面的內容復制到數據庫中進(jìn)行索引。這也是最早的搜索引擎。
如今,隨著(zhù)互聯(lián)網(wǎng)的飛速發(fā)展,我們可以在任何搜索引擎中看到來(lái)自世界各地各種網(wǎng)站的信息。百度搜索引擎的爬蟲(chóng)叫百度蜘蛛,360的爬蟲(chóng)叫360Spider,搜狗的爬蟲(chóng)叫搜狗蜘蛛,必應的爬蟲(chóng)叫Bingbot。搜索引擎離不開(kāi)爬蟲(chóng)。
比如百度蜘蛛每天都會(huì )抓取大量的互聯(lián)網(wǎng)信息,抓取優(yōu)質(zhì)信息和收錄。當用戶(hù)在百度搜索引擎上搜索對應的關(guān)鍵詞時(shí),百度會(huì )對關(guān)鍵詞進(jìn)行分析處理,從收錄的網(wǎng)頁(yè)中找出相關(guān)網(wǎng)頁(yè),按照一定的排名規則和結果展示給用戶(hù),工作原理如圖?,F在,我們可以大膽地說(shuō),你每天都在免費享受爬蟲(chóng)的好處。
2.企業(yè):監控輿情,高效獲取有價(jià)值信息
我們說(shuō)過(guò)爬蟲(chóng)的本質(zhì)是提高效率,而爬蟲(chóng)的規則是由人決定的;那么企業(yè)就可以根據自己的業(yè)務(wù)需求設計爬蟲(chóng),第一時(shí)間獲取網(wǎng)絡(luò )上的相關(guān)信息,進(jìn)行清理整合。
做大數據時(shí)代的數據分析,首先要有數據源,網(wǎng)絡(luò )爬蟲(chóng)可以讓我們獲取更多的數據源,同時(shí)根據我們的目的進(jìn)行采集,從而去除很多的無(wú)關(guān)數據。
例如,在進(jìn)行大數據分析或數據挖掘時(shí),可以從一些提供數據統計的網(wǎng)站s,或者從某些文檔或內部資料中獲取數據源。但是,這些獲取數據的方式有時(shí)很難滿(mǎn)足我們的數據需求。此時(shí),我們可以利用爬蟲(chóng)技術(shù)從互聯(lián)網(wǎng)上自動(dòng)獲取更多我們感興趣的數據內容,從而進(jìn)行更深入的數據分析,獲取更多有價(jià)值的信息。
此外,網(wǎng)絡(luò )爬蟲(chóng)還可用于財務(wù)分析,對財務(wù)數據進(jìn)行采集進(jìn)行投資分析;可應用于輿情監測分析、精準客戶(hù)精準營(yíng)銷(xiāo)等各個(gè)領(lǐng)域。
三、企業(yè)常用的4種網(wǎng)絡(luò )爬蟲(chóng)
網(wǎng)絡(luò )爬蟲(chóng)根據實(shí)現的技術(shù)和結構可以分為一般網(wǎng)絡(luò )爬蟲(chóng)、聚焦網(wǎng)絡(luò )爬蟲(chóng)、增量網(wǎng)絡(luò )爬蟲(chóng)和深度網(wǎng)絡(luò )爬蟲(chóng)。但由于網(wǎng)絡(luò )環(huán)境復雜,實(shí)際的網(wǎng)絡(luò )爬蟲(chóng)通常是這幾種爬蟲(chóng)的組合。
1.萬(wàn)能網(wǎng)絡(luò )爬蟲(chóng)
通用網(wǎng)絡(luò )爬蟲(chóng)也稱(chēng)為全網(wǎng)絡(luò )爬蟲(chóng)。顧名思義,要爬取的目標資源在整個(gè)互聯(lián)網(wǎng)上,要爬取的目標數據是巨大的,爬取的范圍也很大。正是因為爬取的數據是海量數據,所以對于這種爬蟲(chóng)來(lái)說(shuō),對爬取的性能要求是非常高的。這種網(wǎng)絡(luò )爬蟲(chóng)主要用于大型搜索引擎,具有很高的應用價(jià)值。
一般的網(wǎng)絡(luò )爬蟲(chóng)主要由初始URL采集、URL隊列、頁(yè)面爬取模塊、頁(yè)面分析模塊、頁(yè)面數據庫、鏈接過(guò)濾模塊等組成。一般網(wǎng)絡(luò )爬蟲(chóng)在爬取時(shí)會(huì )采用一定的爬取策略,主要包括深度優(yōu)先爬取策略和廣度優(yōu)先爬取策略。具體細節將在后面介紹。
2.專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng)
聚焦網(wǎng)絡(luò )爬蟲(chóng),也稱(chēng)為主題網(wǎng)絡(luò )爬蟲(chóng),是根據預先定義的主題有選擇地爬取網(wǎng)頁(yè)的爬蟲(chóng)。聚焦網(wǎng)絡(luò )爬蟲(chóng)主要用于爬取特定信息,主要為特定類(lèi)型的人提供服務(wù)。
聚焦網(wǎng)絡(luò )爬蟲(chóng)也是由初始URL集合、URL隊列、頁(yè)面爬取模塊、頁(yè)面分析模塊、頁(yè)面數據庫、鏈接過(guò)濾模塊、內容評價(jià)模塊、鏈接評價(jià)模塊等組成。內容評估模塊和鏈接評估模塊可以根據鏈接和內容的重要性確定優(yōu)先訪(fǎng)問(wèn)哪些頁(yè)面。專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng)的爬取策略主要有四種,如圖:
由于專(zhuān)注的網(wǎng)絡(luò )爬蟲(chóng)可以有目的地根據相應的主題進(jìn)行爬取,在實(shí)際應用過(guò)程中可以節省大量的服務(wù)器資源和寬帶資源,因此具有很強的實(shí)用性。這里我們以網(wǎng)絡(luò )爬蟲(chóng)為例來(lái)了解爬蟲(chóng)運行的工作原理和過(guò)程。
如圖所示,焦點(diǎn)網(wǎng)絡(luò )爬蟲(chóng)有一個(gè)控制中心,負責管理和監控整個(gè)爬蟲(chóng)系統,包括控制用戶(hù)交互、初始化爬蟲(chóng)、確定主題、協(xié)調各個(gè)模塊之間的工作以及控制整個(gè)爬蟲(chóng)系統。爬行過(guò)程。等等:
(1)控制中心將初始URL集合傳遞給URL隊列,頁(yè)面爬取模塊會(huì )從URL隊列中讀取第一批URL列表;
(2)根據這些URL地址,從網(wǎng)上爬取對應的頁(yè)面;爬取后,將爬取的內容發(fā)送到頁(yè)面數據庫進(jìn)行存儲;
(3)在爬取過(guò)程中,會(huì )爬取一些新的URL,此時(shí)需要使用鏈接過(guò)濾模塊,根據指定的主題過(guò)濾掉不相關(guān)的鏈接,然后使用鏈接評價(jià)模塊進(jìn)行根據主題剩余的URL鏈接?;蛘邇热菰u估模塊進(jìn)行優(yōu)先排序,完成后將新的URL地址傳遞給URL隊列,供頁(yè)面爬取模塊使用;
?。?)在頁(yè)面庫中爬取并存入頁(yè)面后,需要使用頁(yè)面分析模塊根據主題對爬取的頁(yè)面進(jìn)行分析處理,并根據處理結果建立索引庫。當用戶(hù)檢索到相應的信息,就可以從索引數據庫中進(jìn)行相應的檢索,得到相應的結果。
3.增量網(wǎng)絡(luò )爬蟲(chóng)
這里的“incremental”對應于增量更新,意思是在更新過(guò)程中只更新變化的地方,不變的地方不更新。
增量網(wǎng)絡(luò )爬蟲(chóng),在爬取網(wǎng)頁(yè)時(shí),只爬取內容發(fā)生變化的網(wǎng)頁(yè)或新生成的網(wǎng)頁(yè),不會(huì )爬取內容未發(fā)生變化的網(wǎng)頁(yè)。增量網(wǎng)絡(luò )爬蟲(chóng)可以在一定程度上保證爬取的頁(yè)面盡可能的新。
4.深網(wǎng)爬蟲(chóng)
在互聯(lián)網(wǎng)中,網(wǎng)頁(yè)根據存在的程度可以分為表層頁(yè)面和深層頁(yè)面。表面頁(yè)面是指無(wú)需提交表單,使用靜態(tài)鏈接即可到達的靜態(tài)頁(yè)面;而深頁(yè)是提交某個(gè)關(guān)鍵詞后才能獲得的頁(yè)面。在 Internet 中,深層頁(yè)面的數量通常遠大于表面頁(yè)面的數量。
深網(wǎng)爬蟲(chóng)可以爬取互聯(lián)網(wǎng)中的深層頁(yè)面,而要爬取深層頁(yè)面,就需要想辦法自動(dòng)填寫(xiě)相應的表格。深網(wǎng)爬蟲(chóng)主要由 URL 列表、LVS 列表(LVS 指標簽/值集合,即填充表單的數據源)、爬取控制器、解析器、LVS 控制器、表單分析器、表單處理器、響應分析器和其他部分。
四、網(wǎng)絡(luò )爬蟲(chóng)的爬取策略
前面我們說(shuō)過(guò),網(wǎng)絡(luò )爬蟲(chóng)算法是基于人對采集信息施加的規則,由于網(wǎng)絡(luò )環(huán)境復雜,算法也多種多樣,也就是爬取策略。這里主要介紹爬取的順序和頻率。
1.爬取順序
網(wǎng)絡(luò )爬蟲(chóng)在爬取過(guò)程中,可能會(huì )出現在爬取的URL列表中的多個(gè)URL地址,因此爬蟲(chóng)會(huì )依次對這些URL地址進(jìn)行爬取。
與一般的網(wǎng)絡(luò )爬蟲(chóng)相比,爬取的順序并不那么重要。但專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng),爬取的順序與服務(wù)器資源和寬帶資源有關(guān),所以非常重要,一般由爬取策略決定。爬取策略主要包括深度優(yōu)先爬取策略、廣度優(yōu)先爬取策略、大站點(diǎn)優(yōu)先策略、反鏈策略等爬取策略。
如圖,假設有一個(gè)網(wǎng)站,ABCDEFG為站點(diǎn)下的網(wǎng)頁(yè),網(wǎng)頁(yè)的層次結構如圖所示。如果此時(shí)網(wǎng)頁(yè)ABCDEFG都在爬取隊列中,那么根據不同的爬取策略,爬取的順序是不同的。
深度優(yōu)先爬取策略:A→D→E→B→C→F→G
廣度優(yōu)先爬取策略:A→B→C→D→E→F→G
除了以上兩種爬取策略外,還可以使用大站點(diǎn)爬取策略??梢愿鶕鄳W(wǎng)頁(yè)所屬的站點(diǎn)進(jìn)行分類(lèi)。如果某個(gè)網(wǎng)站有大量的網(wǎng)頁(yè),則稱(chēng)為大站點(diǎn)。按照這個(gè)策略,網(wǎng)站擁有的網(wǎng)頁(yè)越多,則越大,優(yōu)先抓取該網(wǎng)頁(yè)在大站點(diǎn)中的URL地址。
此外,還有反向鏈接策略。一個(gè)網(wǎng)頁(yè)的反向鏈接數是指該網(wǎng)頁(yè)被其他網(wǎng)頁(yè)指向的次數。這個(gè)次數代表了該網(wǎng)頁(yè)在一定程度上被其他網(wǎng)頁(yè)推薦的次數。因此,如果按照反向鏈接策略進(jìn)行爬取,那么哪個(gè)網(wǎng)頁(yè)的反向鏈接多,就會(huì )先爬到哪個(gè)頁(yè)面。
但是,在實(shí)際情況中,如果一個(gè)網(wǎng)頁(yè)的優(yōu)先級只是簡(jiǎn)單地由反向鏈接策略來(lái)決定的話(huà),就可能會(huì )出現很多作弊的情況。因此,采用反向鏈接策略需要考慮可靠反向鏈接的數量。除了以上的爬取策略,實(shí)踐中還有很多其他的爬取策略,比如OPIC策略、Partial PageRank策略等等。
2.爬取頻率
網(wǎng)站 網(wǎng)頁(yè)經(jīng)常更新。作為爬蟲(chóng),網(wǎng)站的更新頻率越接近爬蟲(chóng)訪(fǎng)問(wèn)網(wǎng)站的頻率,效果越好。當然,在爬蟲(chóng)服務(wù)器資源有限的情況下,爬蟲(chóng)還需要根據相應的策略,讓不同的網(wǎng)頁(yè)有不同的更新優(yōu)先級。優(yōu)先級高的網(wǎng)頁(yè)會(huì )更新得更快,爬取響應也會(huì )更快。常見(jiàn)的網(wǎng)頁(yè)更新策略有以下三種:
(1)用戶(hù)體驗策略:大部分用戶(hù)使用搜索引擎查詢(xún)某個(gè)關(guān)鍵詞時(shí),只會(huì )關(guān)注排名靠前的網(wǎng)頁(yè)。因此,當爬蟲(chóng)服務(wù)器資源有限時(shí),爬蟲(chóng)會(huì )優(yōu)先更新排名靠前的頁(yè)面。
(2)歷史數據策略:是指根據某個(gè)網(wǎng)頁(yè)的歷史更新數據,通過(guò)泊松過(guò)程建模等手段,預測該網(wǎng)頁(yè)下次更新時(shí)間,從而確定下一次更新時(shí)間的能力。 time 抓取網(wǎng)頁(yè)所用的時(shí)間。
(3)聚類(lèi)分析策略:網(wǎng)頁(yè)可能有不同的內容,但一般來(lái)說(shuō),屬性相似的網(wǎng)頁(yè)更新頻率相似,所以可以對大量的網(wǎng)頁(yè)進(jìn)行聚類(lèi)。爬取的頻率根據設置同類(lèi)型網(wǎng)頁(yè)的平均更新值。
五、網(wǎng)絡(luò )爬蟲(chóng)的實(shí)現技術(shù)
對于實(shí)現技術(shù),本文不展開(kāi),只為有興趣的同學(xué)提供幾種常用語(yǔ)言:Python、Java、PHP、Node.JS、C++、Go語(yǔ)言(另外還有很多開(kāi)發(fā)語(yǔ)言用于網(wǎng)絡(luò )爬蟲(chóng))。
Python:爬蟲(chóng)框架非常豐富,多線(xiàn)程處理能力強,而且易學(xué),代碼簡(jiǎn)潔,優(yōu)點(diǎn)很多。
Java:適合開(kāi)發(fā)大型爬蟲(chóng)項目。
PHP:后端處理能力很強,代碼很簡(jiǎn)潔,模塊豐富,但是并發(fā)能力比較弱。
Node.JS:支持高并發(fā)和多線(xiàn)程。
C++:運行速度快,適合開(kāi)發(fā)大型爬蟲(chóng)項目,成本高。
Go語(yǔ)言:同樣的高并發(fā)能力很強。
六、總結
說(shuō)到爬蟲(chóng),很多人認為它們是網(wǎng)絡(luò )世界中不可能存在的灰色地帶。恭喜你,看完這篇文章,你比很多人都知道。
因為爬蟲(chóng)分為良性爬蟲(chóng)和惡意爬蟲(chóng),比如搜索引擎爬蟲(chóng)。Goodwill爬蟲(chóng)嚴格遵守Robots協(xié)議規范爬取網(wǎng)頁(yè)數據(如URL),它的存在可以增加網(wǎng)站的曝光度,給網(wǎng)站帶來(lái)流量;
惡意爬蟲(chóng),無(wú)視Robots協(xié)議,肆意爬取網(wǎng)站中一些深度不情愿的數據,包括個(gè)人隱私或商業(yè)機密等重要信息。而惡意爬蟲(chóng)的用戶(hù)想要多次大量地從網(wǎng)站獲取信息,所以通常會(huì )在目標網(wǎng)站上投放大量爬蟲(chóng)。如果大量爬蟲(chóng)同時(shí)訪(fǎng)問(wèn)網(wǎng)站,很容易導致網(wǎng)站服務(wù)器超載或崩潰,導致網(wǎng)站算子丟失。
據統計,2017年我國42.2%的互聯(lián)網(wǎng)流量是由網(wǎng)絡(luò )機器人創(chuàng )造的,其中惡意機器(主要是惡意爬蟲(chóng))占21.80%。我們應該合法合理地使用網(wǎng)絡(luò )爬蟲(chóng),這樣才能用科技為企業(yè)帶來(lái)長(cháng)遠發(fā)展,用科學(xué)為社會(huì )創(chuàng )造更高的價(jià)值。
關(guān)于數據獵人
DataHunter是一家專(zhuān)業(yè)的數據分析和商業(yè)智能服務(wù)商,注冊于2014年,團隊核心成員來(lái)自IBM、Oracle、SAP等知名企業(yè),深耕大數據分析領(lǐng)域和擁有十余年豐富的企業(yè)服務(wù)經(jīng)驗。
DataHunter的核心產(chǎn)品Data Analytics智能數據分析平臺和數據大屏設計配置工具Data MAX在行業(yè)中形成了自己的獨特優(yōu)勢,在各行業(yè)積累了眾多標桿客戶(hù)和成功案例.
自成立以來(lái),DataHunter一直致力于為客戶(hù)提供實(shí)時(shí)、高效、智能的數據分析與展示解決方案,幫助企業(yè)查看和分析數據,改善業(yè)務(wù),成為最值得信賴(lài)的數據業(yè)務(wù)公司。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(爬蟲(chóng)在數據分析領(lǐng)域的應用,如何幫助我們提升數據分析質(zhì)量)
在當今信息化和數字化的時(shí)代,人們離不開(kāi)網(wǎng)絡(luò )搜索,但想想看,在搜索過(guò)程中,你真的可以得到相關(guān)信息,因為有人在幫你過(guò)濾相關(guān)內容,呈現在你面前。

就像在餐館里一樣,你點(diǎn)了土豆然后得到它們,因為有人幫你在土豆、蘿卜、西紅柿等中找到它們,然后有人把它們帶到你的餐桌上。在網(wǎng)上,這兩個(gè)動(dòng)作是一個(gè)叫爬蟲(chóng)的同學(xué)為你實(shí)現的。
也就是說(shuō),沒(méi)有爬蟲(chóng),就沒(méi)有今天的檢索,就無(wú)法準確查找信息和高效獲取數據。今天DataHunter就來(lái)談?wù)勁老x(chóng)在數據分析領(lǐng)域的應用,以及它如何幫助我們提高數據分析的質(zhì)量。
一、數據時(shí)代,爬蟲(chóng)的本質(zhì)是提高效率
網(wǎng)絡(luò )爬蟲(chóng),又稱(chēng)網(wǎng)絡(luò )機器人,可以代替人自動(dòng)瀏覽網(wǎng)絡(luò )信息,采集和組織數據。
它是一個(gè)程序,其基本原理是向網(wǎng)站/網(wǎng)絡(luò )發(fā)起請求,獲取資源后分析提取有用數據。從技術(shù)上講,就是通過(guò)程序模擬瀏覽器請求站點(diǎn)的行為,將站點(diǎn)返回的HTML代碼/JSON數據/二進(jìn)制數據(圖片、視頻)爬取到本地,然后提取您需要的數據并將其存儲以供使用。

每個(gè)程序都有自己的規則,網(wǎng)絡(luò )爬蟲(chóng)也不例外。它穿梭于世界各地的各種網(wǎng)站之間,根據人們強加的規則將采集信息。我們稱(chēng)這些規則為網(wǎng)絡(luò )爬蟲(chóng)算法。規則是人定的,是人根據自己的目的和需要設計的。因此,根據用戶(hù)的目的,爬蟲(chóng)可以有不同的功能。但所有爬蟲(chóng)的本質(zhì)是方便人們在海量的互聯(lián)網(wǎng)信息中找到并下載自己想要的信息類(lèi)型,從而提高信息獲取效率。
二、爬蟲(chóng)的應用:搜索并幫助企業(yè)做強業(yè)務(wù)
1.搜索引擎:爬取網(wǎng)站為網(wǎng)絡(luò )用戶(hù)提供便利
在互聯(lián)網(wǎng)的早期,能夠提供全球范圍內信息的網(wǎng)站并不多,用戶(hù)也不多。Internet 只是文件傳輸協(xié)議 (FTP) 站點(diǎn)的集合,用戶(hù)可以導航這些站點(diǎn)以查找特定的共享文件,并查找和組合 Internet 上可用的分布式數據,創(chuàng )建了一個(gè)稱(chēng)為網(wǎng)絡(luò )爬蟲(chóng)的自動(dòng)化程序 /Robot,它可以爬取網(wǎng)絡(luò )上的所有網(wǎng)頁(yè),然后將所有頁(yè)面的內容復制到數據庫中進(jìn)行索引。這也是最早的搜索引擎。

如今,隨著(zhù)互聯(lián)網(wǎng)的飛速發(fā)展,我們可以在任何搜索引擎中看到來(lái)自世界各地各種網(wǎng)站的信息。百度搜索引擎的爬蟲(chóng)叫百度蜘蛛,360的爬蟲(chóng)叫360Spider,搜狗的爬蟲(chóng)叫搜狗蜘蛛,必應的爬蟲(chóng)叫Bingbot。搜索引擎離不開(kāi)爬蟲(chóng)。
比如百度蜘蛛每天都會(huì )抓取大量的互聯(lián)網(wǎng)信息,抓取優(yōu)質(zhì)信息和收錄。當用戶(hù)在百度搜索引擎上搜索對應的關(guān)鍵詞時(shí),百度會(huì )對關(guān)鍵詞進(jìn)行分析處理,從收錄的網(wǎng)頁(yè)中找出相關(guān)網(wǎng)頁(yè),按照一定的排名規則和結果展示給用戶(hù),工作原理如圖?,F在,我們可以大膽地說(shuō),你每天都在免費享受爬蟲(chóng)的好處。

2.企業(yè):監控輿情,高效獲取有價(jià)值信息
我們說(shuō)過(guò)爬蟲(chóng)的本質(zhì)是提高效率,而爬蟲(chóng)的規則是由人決定的;那么企業(yè)就可以根據自己的業(yè)務(wù)需求設計爬蟲(chóng),第一時(shí)間獲取網(wǎng)絡(luò )上的相關(guān)信息,進(jìn)行清理整合。
做大數據時(shí)代的數據分析,首先要有數據源,網(wǎng)絡(luò )爬蟲(chóng)可以讓我們獲取更多的數據源,同時(shí)根據我們的目的進(jìn)行采集,從而去除很多的無(wú)關(guān)數據。

例如,在進(jìn)行大數據分析或數據挖掘時(shí),可以從一些提供數據統計的網(wǎng)站s,或者從某些文檔或內部資料中獲取數據源。但是,這些獲取數據的方式有時(shí)很難滿(mǎn)足我們的數據需求。此時(shí),我們可以利用爬蟲(chóng)技術(shù)從互聯(lián)網(wǎng)上自動(dòng)獲取更多我們感興趣的數據內容,從而進(jìn)行更深入的數據分析,獲取更多有價(jià)值的信息。
此外,網(wǎng)絡(luò )爬蟲(chóng)還可用于財務(wù)分析,對財務(wù)數據進(jìn)行采集進(jìn)行投資分析;可應用于輿情監測分析、精準客戶(hù)精準營(yíng)銷(xiāo)等各個(gè)領(lǐng)域。
三、企業(yè)常用的4種網(wǎng)絡(luò )爬蟲(chóng)
網(wǎng)絡(luò )爬蟲(chóng)根據實(shí)現的技術(shù)和結構可以分為一般網(wǎng)絡(luò )爬蟲(chóng)、聚焦網(wǎng)絡(luò )爬蟲(chóng)、增量網(wǎng)絡(luò )爬蟲(chóng)和深度網(wǎng)絡(luò )爬蟲(chóng)。但由于網(wǎng)絡(luò )環(huán)境復雜,實(shí)際的網(wǎng)絡(luò )爬蟲(chóng)通常是這幾種爬蟲(chóng)的組合。
1.萬(wàn)能網(wǎng)絡(luò )爬蟲(chóng)
通用網(wǎng)絡(luò )爬蟲(chóng)也稱(chēng)為全網(wǎng)絡(luò )爬蟲(chóng)。顧名思義,要爬取的目標資源在整個(gè)互聯(lián)網(wǎng)上,要爬取的目標數據是巨大的,爬取的范圍也很大。正是因為爬取的數據是海量數據,所以對于這種爬蟲(chóng)來(lái)說(shuō),對爬取的性能要求是非常高的。這種網(wǎng)絡(luò )爬蟲(chóng)主要用于大型搜索引擎,具有很高的應用價(jià)值。

一般的網(wǎng)絡(luò )爬蟲(chóng)主要由初始URL采集、URL隊列、頁(yè)面爬取模塊、頁(yè)面分析模塊、頁(yè)面數據庫、鏈接過(guò)濾模塊等組成。一般網(wǎng)絡(luò )爬蟲(chóng)在爬取時(shí)會(huì )采用一定的爬取策略,主要包括深度優(yōu)先爬取策略和廣度優(yōu)先爬取策略。具體細節將在后面介紹。
2.專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng)
聚焦網(wǎng)絡(luò )爬蟲(chóng),也稱(chēng)為主題網(wǎng)絡(luò )爬蟲(chóng),是根據預先定義的主題有選擇地爬取網(wǎng)頁(yè)的爬蟲(chóng)。聚焦網(wǎng)絡(luò )爬蟲(chóng)主要用于爬取特定信息,主要為特定類(lèi)型的人提供服務(wù)。
聚焦網(wǎng)絡(luò )爬蟲(chóng)也是由初始URL集合、URL隊列、頁(yè)面爬取模塊、頁(yè)面分析模塊、頁(yè)面數據庫、鏈接過(guò)濾模塊、內容評價(jià)模塊、鏈接評價(jià)模塊等組成。內容評估模塊和鏈接評估模塊可以根據鏈接和內容的重要性確定優(yōu)先訪(fǎng)問(wèn)哪些頁(yè)面。專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng)的爬取策略主要有四種,如圖:

由于專(zhuān)注的網(wǎng)絡(luò )爬蟲(chóng)可以有目的地根據相應的主題進(jìn)行爬取,在實(shí)際應用過(guò)程中可以節省大量的服務(wù)器資源和寬帶資源,因此具有很強的實(shí)用性。這里我們以網(wǎng)絡(luò )爬蟲(chóng)為例來(lái)了解爬蟲(chóng)運行的工作原理和過(guò)程。

如圖所示,焦點(diǎn)網(wǎng)絡(luò )爬蟲(chóng)有一個(gè)控制中心,負責管理和監控整個(gè)爬蟲(chóng)系統,包括控制用戶(hù)交互、初始化爬蟲(chóng)、確定主題、協(xié)調各個(gè)模塊之間的工作以及控制整個(gè)爬蟲(chóng)系統。爬行過(guò)程。等等:
(1)控制中心將初始URL集合傳遞給URL隊列,頁(yè)面爬取模塊會(huì )從URL隊列中讀取第一批URL列表;
(2)根據這些URL地址,從網(wǎng)上爬取對應的頁(yè)面;爬取后,將爬取的內容發(fā)送到頁(yè)面數據庫進(jìn)行存儲;
(3)在爬取過(guò)程中,會(huì )爬取一些新的URL,此時(shí)需要使用鏈接過(guò)濾模塊,根據指定的主題過(guò)濾掉不相關(guān)的鏈接,然后使用鏈接評價(jià)模塊進(jìn)行根據主題剩余的URL鏈接?;蛘邇热菰u估模塊進(jìn)行優(yōu)先排序,完成后將新的URL地址傳遞給URL隊列,供頁(yè)面爬取模塊使用;
?。?)在頁(yè)面庫中爬取并存入頁(yè)面后,需要使用頁(yè)面分析模塊根據主題對爬取的頁(yè)面進(jìn)行分析處理,并根據處理結果建立索引庫。當用戶(hù)檢索到相應的信息,就可以從索引數據庫中進(jìn)行相應的檢索,得到相應的結果。
3.增量網(wǎng)絡(luò )爬蟲(chóng)
這里的“incremental”對應于增量更新,意思是在更新過(guò)程中只更新變化的地方,不變的地方不更新。
增量網(wǎng)絡(luò )爬蟲(chóng),在爬取網(wǎng)頁(yè)時(shí),只爬取內容發(fā)生變化的網(wǎng)頁(yè)或新生成的網(wǎng)頁(yè),不會(huì )爬取內容未發(fā)生變化的網(wǎng)頁(yè)。增量網(wǎng)絡(luò )爬蟲(chóng)可以在一定程度上保證爬取的頁(yè)面盡可能的新。
4.深網(wǎng)爬蟲(chóng)
在互聯(lián)網(wǎng)中,網(wǎng)頁(yè)根據存在的程度可以分為表層頁(yè)面和深層頁(yè)面。表面頁(yè)面是指無(wú)需提交表單,使用靜態(tài)鏈接即可到達的靜態(tài)頁(yè)面;而深頁(yè)是提交某個(gè)關(guān)鍵詞后才能獲得的頁(yè)面。在 Internet 中,深層頁(yè)面的數量通常遠大于表面頁(yè)面的數量。

深網(wǎng)爬蟲(chóng)可以爬取互聯(lián)網(wǎng)中的深層頁(yè)面,而要爬取深層頁(yè)面,就需要想辦法自動(dòng)填寫(xiě)相應的表格。深網(wǎng)爬蟲(chóng)主要由 URL 列表、LVS 列表(LVS 指標簽/值集合,即填充表單的數據源)、爬取控制器、解析器、LVS 控制器、表單分析器、表單處理器、響應分析器和其他部分。
四、網(wǎng)絡(luò )爬蟲(chóng)的爬取策略
前面我們說(shuō)過(guò),網(wǎng)絡(luò )爬蟲(chóng)算法是基于人對采集信息施加的規則,由于網(wǎng)絡(luò )環(huán)境復雜,算法也多種多樣,也就是爬取策略。這里主要介紹爬取的順序和頻率。
1.爬取順序
網(wǎng)絡(luò )爬蟲(chóng)在爬取過(guò)程中,可能會(huì )出現在爬取的URL列表中的多個(gè)URL地址,因此爬蟲(chóng)會(huì )依次對這些URL地址進(jìn)行爬取。
與一般的網(wǎng)絡(luò )爬蟲(chóng)相比,爬取的順序并不那么重要。但專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng),爬取的順序與服務(wù)器資源和寬帶資源有關(guān),所以非常重要,一般由爬取策略決定。爬取策略主要包括深度優(yōu)先爬取策略、廣度優(yōu)先爬取策略、大站點(diǎn)優(yōu)先策略、反鏈策略等爬取策略。

如圖,假設有一個(gè)網(wǎng)站,ABCDEFG為站點(diǎn)下的網(wǎng)頁(yè),網(wǎng)頁(yè)的層次結構如圖所示。如果此時(shí)網(wǎng)頁(yè)ABCDEFG都在爬取隊列中,那么根據不同的爬取策略,爬取的順序是不同的。
深度優(yōu)先爬取策略:A→D→E→B→C→F→G
廣度優(yōu)先爬取策略:A→B→C→D→E→F→G
除了以上兩種爬取策略外,還可以使用大站點(diǎn)爬取策略??梢愿鶕鄳W(wǎng)頁(yè)所屬的站點(diǎn)進(jìn)行分類(lèi)。如果某個(gè)網(wǎng)站有大量的網(wǎng)頁(yè),則稱(chēng)為大站點(diǎn)。按照這個(gè)策略,網(wǎng)站擁有的網(wǎng)頁(yè)越多,則越大,優(yōu)先抓取該網(wǎng)頁(yè)在大站點(diǎn)中的URL地址。
此外,還有反向鏈接策略。一個(gè)網(wǎng)頁(yè)的反向鏈接數是指該網(wǎng)頁(yè)被其他網(wǎng)頁(yè)指向的次數。這個(gè)次數代表了該網(wǎng)頁(yè)在一定程度上被其他網(wǎng)頁(yè)推薦的次數。因此,如果按照反向鏈接策略進(jìn)行爬取,那么哪個(gè)網(wǎng)頁(yè)的反向鏈接多,就會(huì )先爬到哪個(gè)頁(yè)面。
但是,在實(shí)際情況中,如果一個(gè)網(wǎng)頁(yè)的優(yōu)先級只是簡(jiǎn)單地由反向鏈接策略來(lái)決定的話(huà),就可能會(huì )出現很多作弊的情況。因此,采用反向鏈接策略需要考慮可靠反向鏈接的數量。除了以上的爬取策略,實(shí)踐中還有很多其他的爬取策略,比如OPIC策略、Partial PageRank策略等等。
2.爬取頻率
網(wǎng)站 網(wǎng)頁(yè)經(jīng)常更新。作為爬蟲(chóng),網(wǎng)站的更新頻率越接近爬蟲(chóng)訪(fǎng)問(wèn)網(wǎng)站的頻率,效果越好。當然,在爬蟲(chóng)服務(wù)器資源有限的情況下,爬蟲(chóng)還需要根據相應的策略,讓不同的網(wǎng)頁(yè)有不同的更新優(yōu)先級。優(yōu)先級高的網(wǎng)頁(yè)會(huì )更新得更快,爬取響應也會(huì )更快。常見(jiàn)的網(wǎng)頁(yè)更新策略有以下三種:

(1)用戶(hù)體驗策略:大部分用戶(hù)使用搜索引擎查詢(xún)某個(gè)關(guān)鍵詞時(shí),只會(huì )關(guān)注排名靠前的網(wǎng)頁(yè)。因此,當爬蟲(chóng)服務(wù)器資源有限時(shí),爬蟲(chóng)會(huì )優(yōu)先更新排名靠前的頁(yè)面。
(2)歷史數據策略:是指根據某個(gè)網(wǎng)頁(yè)的歷史更新數據,通過(guò)泊松過(guò)程建模等手段,預測該網(wǎng)頁(yè)下次更新時(shí)間,從而確定下一次更新時(shí)間的能力。 time 抓取網(wǎng)頁(yè)所用的時(shí)間。
(3)聚類(lèi)分析策略:網(wǎng)頁(yè)可能有不同的內容,但一般來(lái)說(shuō),屬性相似的網(wǎng)頁(yè)更新頻率相似,所以可以對大量的網(wǎng)頁(yè)進(jìn)行聚類(lèi)。爬取的頻率根據設置同類(lèi)型網(wǎng)頁(yè)的平均更新值。
五、網(wǎng)絡(luò )爬蟲(chóng)的實(shí)現技術(shù)
對于實(shí)現技術(shù),本文不展開(kāi),只為有興趣的同學(xué)提供幾種常用語(yǔ)言:Python、Java、PHP、Node.JS、C++、Go語(yǔ)言(另外還有很多開(kāi)發(fā)語(yǔ)言用于網(wǎng)絡(luò )爬蟲(chóng))。
Python:爬蟲(chóng)框架非常豐富,多線(xiàn)程處理能力強,而且易學(xué),代碼簡(jiǎn)潔,優(yōu)點(diǎn)很多。
Java:適合開(kāi)發(fā)大型爬蟲(chóng)項目。
PHP:后端處理能力很強,代碼很簡(jiǎn)潔,模塊豐富,但是并發(fā)能力比較弱。
Node.JS:支持高并發(fā)和多線(xiàn)程。
C++:運行速度快,適合開(kāi)發(fā)大型爬蟲(chóng)項目,成本高。
Go語(yǔ)言:同樣的高并發(fā)能力很強。
六、總結
說(shuō)到爬蟲(chóng),很多人認為它們是網(wǎng)絡(luò )世界中不可能存在的灰色地帶。恭喜你,看完這篇文章,你比很多人都知道。
因為爬蟲(chóng)分為良性爬蟲(chóng)和惡意爬蟲(chóng),比如搜索引擎爬蟲(chóng)。Goodwill爬蟲(chóng)嚴格遵守Robots協(xié)議規范爬取網(wǎng)頁(yè)數據(如URL),它的存在可以增加網(wǎng)站的曝光度,給網(wǎng)站帶來(lái)流量;

惡意爬蟲(chóng),無(wú)視Robots協(xié)議,肆意爬取網(wǎng)站中一些深度不情愿的數據,包括個(gè)人隱私或商業(yè)機密等重要信息。而惡意爬蟲(chóng)的用戶(hù)想要多次大量地從網(wǎng)站獲取信息,所以通常會(huì )在目標網(wǎng)站上投放大量爬蟲(chóng)。如果大量爬蟲(chóng)同時(shí)訪(fǎng)問(wèn)網(wǎng)站,很容易導致網(wǎng)站服務(wù)器超載或崩潰,導致網(wǎng)站算子丟失。
據統計,2017年我國42.2%的互聯(lián)網(wǎng)流量是由網(wǎng)絡(luò )機器人創(chuàng )造的,其中惡意機器(主要是惡意爬蟲(chóng))占21.80%。我們應該合法合理地使用網(wǎng)絡(luò )爬蟲(chóng),這樣才能用科技為企業(yè)帶來(lái)長(cháng)遠發(fā)展,用科學(xué)為社會(huì )創(chuàng )造更高的價(jià)值。
關(guān)于數據獵人
DataHunter是一家專(zhuān)業(yè)的數據分析和商業(yè)智能服務(wù)商,注冊于2014年,團隊核心成員來(lái)自IBM、Oracle、SAP等知名企業(yè),深耕大數據分析領(lǐng)域和擁有十余年豐富的企業(yè)服務(wù)經(jīng)驗。
DataHunter的核心產(chǎn)品Data Analytics智能數據分析平臺和數據大屏設計配置工具Data MAX在行業(yè)中形成了自己的獨特優(yōu)勢,在各行業(yè)積累了眾多標桿客戶(hù)和成功案例.

自成立以來(lái),DataHunter一直致力于為客戶(hù)提供實(shí)時(shí)、高效、智能的數據分析與展示解決方案,幫助企業(yè)查看和分析數據,改善業(yè)務(wù),成為最值得信賴(lài)的數據業(yè)務(wù)公司。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(幾個(gè)適合新入門(mén)學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè),總有一款適合你!)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 67 次瀏覽 ? 2022-01-22 19:16
推薦幾個(gè)適合初學(xué)者學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè)??傆幸豢钸m合你!
廢話(huà)不多說(shuō),直接上干貨吧!
今日頭條圖集:抓包獲取json數據
打開(kāi)今日頭條首頁(yè),搜索小姐姐,或者其他你感興趣的內容,然后點(diǎn)擊圖庫
動(dòng)態(tài)加載的json數據出來(lái),沒(méi)有反爬,注意如果不想抓取內容中的圖片,只能抓取縮略圖,也就是本頁(yè)顯示的圖片,在json數據中的image_list,注意,把url中的list改成origin,就是大圖了!代碼顯示如下
Python學(xué)習交流群542110741
圖片地址全部出!
全書(shū)網(wǎng):直接源碼匹配相關(guān)內容
直接搜索全書(shū),打開(kāi)首頁(yè),找到一本小說(shuō),比如《盜墓筆記》,點(diǎn)擊跳轉網(wǎng)頁(yè),點(diǎn)擊開(kāi)始閱讀,所有章節出現,小說(shuō)內容、網(wǎng)頁(yè)內容和進(jìn)入章節后出現代碼。如下:
Python學(xué)習交流群542110741
80本電子書(shū):匹配地址直接下載壓縮文件
80 與上面的全書(shū)網(wǎng)類(lèi)似,但它本身提供了下載功能,可以直接構造下載文件、頁(yè)面截圖和帶有小說(shuō)ID和名稱(chēng)的代碼:
Python學(xué)習交流群542110741
其他類(lèi)似網(wǎng)站
類(lèi)似的網(wǎng)站還有:美子圖、美拓、筆趣閣、九九等,連百度圖片也可以通過(guò)抓包獲取數據!
以上代碼都是手寫(xiě)的,沒(méi)有排版。如果你有興趣,你可以自己打字?;蛘弑热缧≌f(shuō)網(wǎng)站,你可以先抓取大類(lèi),然后獲取每個(gè)類(lèi)的所有小說(shuō),最后把每個(gè)類(lèi)的所有小說(shuō)。抓出小說(shuō)的內容,這就是全站爬蟲(chóng)?。?!
如果你還有其他合適的網(wǎng)站,希望你可以在評論區分享!一起交流吧! 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(幾個(gè)適合新入門(mén)學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè),總有一款適合你!)
推薦幾個(gè)適合初學(xué)者學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè)??傆幸豢钸m合你!
廢話(huà)不多說(shuō),直接上干貨吧!
今日頭條圖集:抓包獲取json數據
打開(kāi)今日頭條首頁(yè),搜索小姐姐,或者其他你感興趣的內容,然后點(diǎn)擊圖庫
動(dòng)態(tài)加載的json數據出來(lái),沒(méi)有反爬,注意如果不想抓取內容中的圖片,只能抓取縮略圖,也就是本頁(yè)顯示的圖片,在json數據中的image_list,注意,把url中的list改成origin,就是大圖了!代碼顯示如下
Python學(xué)習交流群542110741
圖片地址全部出!
全書(shū)網(wǎng):直接源碼匹配相關(guān)內容
直接搜索全書(shū),打開(kāi)首頁(yè),找到一本小說(shuō),比如《盜墓筆記》,點(diǎn)擊跳轉網(wǎng)頁(yè),點(diǎn)擊開(kāi)始閱讀,所有章節出現,小說(shuō)內容、網(wǎng)頁(yè)內容和進(jìn)入章節后出現代碼。如下:
Python學(xué)習交流群542110741
80本電子書(shū):匹配地址直接下載壓縮文件
80 與上面的全書(shū)網(wǎng)類(lèi)似,但它本身提供了下載功能,可以直接構造下載文件、頁(yè)面截圖和帶有小說(shuō)ID和名稱(chēng)的代碼:
Python學(xué)習交流群542110741
其他類(lèi)似網(wǎng)站
類(lèi)似的網(wǎng)站還有:美子圖、美拓、筆趣閣、九九等,連百度圖片也可以通過(guò)抓包獲取數據!
以上代碼都是手寫(xiě)的,沒(méi)有排版。如果你有興趣,你可以自己打字?;蛘弑热缧≌f(shuō)網(wǎng)站,你可以先抓取大類(lèi),然后獲取每個(gè)類(lèi)的所有小說(shuō),最后把每個(gè)類(lèi)的所有小說(shuō)。抓出小說(shuō)的內容,這就是全站爬蟲(chóng)?。?!
如果你還有其他合適的網(wǎng)站,希望你可以在評論區分享!一起交流吧!
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(python網(wǎng)絡(luò )爬蟲(chóng)-爬取網(wǎng)頁(yè)的三種方式10.抓取數據)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 70 次瀏覽 ? 2022-01-21 07:20
Python網(wǎng)絡(luò )爬蟲(chóng)——爬取網(wǎng)頁(yè)的三種方式
10.前言0.1 爬取網(wǎng)頁(yè)本文將介紹三種爬取網(wǎng)頁(yè)數據的方式:正則表達式、BeautifulSoup、lxml。有關(guān)用于獲取 Web 內容的代碼的詳細信息,請參閱 Python Web Crawler - Your First Crawler。使用此代碼來(lái)抓取整個(gè)網(wǎng)頁(yè)。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
20.2 爬取目標爬取網(wǎng)頁(yè)上所有顯示的內容。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
3 分析網(wǎng)頁(yè)的結構,我們可以看到所有的內容都在標簽中。以面積為例,我們可以看到面積的值為:
7,686,850平方公里
根據這個(gè)結構,我們用不同的方式來(lái)表達,就可以抓取到所有我們想要的數據。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
4Chrome瀏覽器可以輕松復制各種表情:
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
5 有了上面的下載功能和不同的表達方式,我們可以通過(guò)三種不同的方式抓取數據。1.以不同的方式爬取數據1.1 正則表達式爬取網(wǎng)頁(yè)正則表達式在python或其他語(yǔ)言中有很好的應用,用簡(jiǎn)單的規定符號來(lái)表達不同的字符串組成形式,簡(jiǎn)潔高效。學(xué)習正則表達式很有必要。Python 內置正則表達式,無(wú)需額外安裝。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
61.2BeautifulSoup爬取數據BeautifulSoup的使用可以在python網(wǎng)絡(luò )爬蟲(chóng)-BeautifulSoup爬取網(wǎng)絡(luò )數據中看到代碼如下:
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
71.3 lxml抓包數據
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
81.4 個(gè)運行結果
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
9 從結果可以看出,正則表達式在某些地方返回了額外的元素,而不是純文本。這是因為這些地方的網(wǎng)頁(yè)結構與其他地方不同,所以正則表達式不能完全覆蓋相同的內容,例如某些地方的鏈接和圖片。并且 BeautifulSoup 和 lxml 具有提取文本的特殊功能,因此不會(huì )出現類(lèi)似的錯誤。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(python網(wǎng)絡(luò )爬蟲(chóng)-爬取網(wǎng)頁(yè)的三種方式10.抓取數據)
Python網(wǎng)絡(luò )爬蟲(chóng)——爬取網(wǎng)頁(yè)的三種方式
10.前言0.1 爬取網(wǎng)頁(yè)本文將介紹三種爬取網(wǎng)頁(yè)數據的方式:正則表達式、BeautifulSoup、lxml。有關(guān)用于獲取 Web 內容的代碼的詳細信息,請參閱 Python Web Crawler - Your First Crawler。使用此代碼來(lái)抓取整個(gè)網(wǎng)頁(yè)。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
20.2 爬取目標爬取網(wǎng)頁(yè)上所有顯示的內容。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
3 分析網(wǎng)頁(yè)的結構,我們可以看到所有的內容都在標簽中。以面積為例,我們可以看到面積的值為:
7,686,850平方公里
根據這個(gè)結構,我們用不同的方式來(lái)表達,就可以抓取到所有我們想要的數據。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
4Chrome瀏覽器可以輕松復制各種表情:
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
5 有了上面的下載功能和不同的表達方式,我們可以通過(guò)三種不同的方式抓取數據。1.以不同的方式爬取數據1.1 正則表達式爬取網(wǎng)頁(yè)正則表達式在python或其他語(yǔ)言中有很好的應用,用簡(jiǎn)單的規定符號來(lái)表達不同的字符串組成形式,簡(jiǎn)潔高效。學(xué)習正則表達式很有必要。Python 內置正則表達式,無(wú)需額外安裝。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
61.2BeautifulSoup爬取數據BeautifulSoup的使用可以在python網(wǎng)絡(luò )爬蟲(chóng)-BeautifulSoup爬取網(wǎng)絡(luò )數據中看到代碼如下:
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
71.3 lxml抓包數據
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
81.4 個(gè)運行結果
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
9 從結果可以看出,正則表達式在某些地方返回了額外的元素,而不是純文本。這是因為這些地方的網(wǎng)頁(yè)結構與其他地方不同,所以正則表達式不能完全覆蓋相同的內容,例如某些地方的鏈接和圖片。并且 BeautifulSoup 和 lxml 具有提取文本的特殊功能,因此不會(huì )出現類(lèi)似的錯誤。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(2021-07-09pyspider框架介紹框架Scrapy)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-02-07 21:07
2021-07-09
pyspider框架介紹
pyspider是中文binux編寫(xiě)的強大的網(wǎng)絡(luò )爬蟲(chóng)系統,它的GitHub地址是,官方文檔地址是。
pyspider 帶有強大的 WebUI、腳本編輯器、任務(wù)監視器、項目管理器和結果處理器。支持多數據庫后端,多消息隊列,爬取JavaScript渲染頁(yè)面。使用起來(lái)非常方便。
pyspider基本功能
我們將 PySpider 的功能總結如下。
提供方便易用的WebUI系統,可以可視化編寫(xiě)和調試爬蟲(chóng)。
提供爬取進(jìn)度監控、爬取結果查看、爬蟲(chóng)項目管理等功能。
支持多種后端數據庫,如 MySQL、MongoDB、Redis、SQLite、Elasticsearch、PostgreSQL。
支持多個(gè)消息隊列,如 RabbitMQ、Beanstalk、Redis、Kombu。
提供優(yōu)先級控制、故障重試、定時(shí)捕捉等功能。
使用 PhantomJS,您可以抓取由 JavaScript 呈現的頁(yè)面。
支持單機和分布式部署,支持Docker部署。
如果你想快速輕松地爬取一個(gè)頁(yè)面,使用 pyspider 是一個(gè)不錯的選擇。
與 Scrapy 的比較
Scrapy,另一個(gè)爬蟲(chóng)框架,后面會(huì )介紹。學(xué)習了 Scrapy 之后,這部分就更容易理解了。我們先來(lái)了解一下pyspider和Scrapy的區別。
pyspider 提供 WebUI。爬蟲(chóng)的編寫(xiě)和調試都是在WebUI中進(jìn)行的,而Scrapy原生沒(méi)有這個(gè)功能。它使用代碼和命令行操作,但可以連接到 Portia 以實(shí)現可視化配置。
pyspider的調試非常方便,WebUI的操作方便直觀(guān)。在 Scrapy 中,使用 parse 命令進(jìn)行調試,不如 pyspider 方便。
pyspider 支持 PhantomJS 在 JavaScript 采集 中渲染頁(yè)面,并且 ScrapySplash 組件可以??吭?Scrapy 中,這需要額外的配置。
PyQuery 作為選擇器內置在 PySpider 中,XPath、CSS 選擇器和正則匹配都??吭?Scrapy 中。
pyspider的可擴展性不足,可配置程度不高。在Scrapy中,通過(guò)對接Middleware、Pipeline、Extension等組件可以實(shí)現非常強大的功能。模塊間耦合度低,可擴展性極高。
如果想快速抓取一個(gè)頁(yè)面,推薦使用pyspider,開(kāi)發(fā)比較方便,比如快速抓取一個(gè)普通新聞網(wǎng)站的新聞內容。如果要處理非常大規模的抓取,反爬度很強,建議使用Scrapy,比如對網(wǎng)站的大規模數據采集的被封IP、被封賬號進(jìn)行抓取, 和高頻驗證。
pyspider的架構
pyspider的架構主要分為三個(gè)部分:Scheduler(調度器)、Fetcher(抓取器)、Processor(處理器)。整個(gè)爬取過(guò)程由Monitor(監視器)監控,爬取結果為Result Worker(results)。處理器),如圖 12-1 所示。
Scheduler發(fā)起任務(wù)調度,Fetcher負責抓取網(wǎng)頁(yè)內容,Processor負責解析網(wǎng)頁(yè)內容,然后將新生成的Request發(fā)送給Scheduler進(jìn)行調度,并保存生成的提取結果輸出。
pyspider的任務(wù)執行過(guò)程邏輯很清晰,具體流程如下。
每個(gè) pyspider 項目都對應一個(gè) Python 腳本,該腳本定義了一個(gè)帶有 on_start() 方法的 Handler 類(lèi)。爬取首先調用on_start()方法生成初始爬取任務(wù),然后發(fā)送給Scheduler進(jìn)行調度。
Scheduler 將抓取任務(wù)分發(fā)給 Fetcher 進(jìn)行抓取,Fetcher 執行并獲取響應,然后將響應發(fā)送給 Processor。
Processer處理響應并提取新的URL生成新的爬蟲(chóng)任務(wù),然后通過(guò)消息隊列通知Schduler當前的爬蟲(chóng)任務(wù)執行狀態(tài),并將新生成的爬蟲(chóng)任務(wù)發(fā)送給Scheduler。如果生成了新的 fetch 結果,則將其發(fā)送到結果隊列中,由 Result Worker 處理。
Scheduler接收到一個(gè)新的抓取任務(wù),然后查詢(xún)數據庫,判斷是新的抓取任務(wù)還是需要重試的任務(wù),然后繼續調度,然后發(fā)回Fetcher去抓取。
不斷重復上述工作,直到所有任務(wù)都執行完畢,抓取結束。
捕獲后,程序會(huì )回調on_finished()方法,這里可以定義后處理過(guò)程。結語(yǔ)
本節我們主要了解pyspider的基本功能和架構。接下來(lái)我們用一個(gè)例子來(lái)體驗一下pyspider的爬取操作,然后總結一下它的各種用途。
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章: 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(2021-07-09pyspider框架介紹框架Scrapy)
2021-07-09
pyspider框架介紹
pyspider是中文binux編寫(xiě)的強大的網(wǎng)絡(luò )爬蟲(chóng)系統,它的GitHub地址是,官方文檔地址是。
pyspider 帶有強大的 WebUI、腳本編輯器、任務(wù)監視器、項目管理器和結果處理器。支持多數據庫后端,多消息隊列,爬取JavaScript渲染頁(yè)面。使用起來(lái)非常方便。
pyspider基本功能
我們將 PySpider 的功能總結如下。
提供方便易用的WebUI系統,可以可視化編寫(xiě)和調試爬蟲(chóng)。
提供爬取進(jìn)度監控、爬取結果查看、爬蟲(chóng)項目管理等功能。
支持多種后端數據庫,如 MySQL、MongoDB、Redis、SQLite、Elasticsearch、PostgreSQL。
支持多個(gè)消息隊列,如 RabbitMQ、Beanstalk、Redis、Kombu。
提供優(yōu)先級控制、故障重試、定時(shí)捕捉等功能。
使用 PhantomJS,您可以抓取由 JavaScript 呈現的頁(yè)面。
支持單機和分布式部署,支持Docker部署。
如果你想快速輕松地爬取一個(gè)頁(yè)面,使用 pyspider 是一個(gè)不錯的選擇。
與 Scrapy 的比較
Scrapy,另一個(gè)爬蟲(chóng)框架,后面會(huì )介紹。學(xué)習了 Scrapy 之后,這部分就更容易理解了。我們先來(lái)了解一下pyspider和Scrapy的區別。
pyspider 提供 WebUI。爬蟲(chóng)的編寫(xiě)和調試都是在WebUI中進(jìn)行的,而Scrapy原生沒(méi)有這個(gè)功能。它使用代碼和命令行操作,但可以連接到 Portia 以實(shí)現可視化配置。
pyspider的調試非常方便,WebUI的操作方便直觀(guān)。在 Scrapy 中,使用 parse 命令進(jìn)行調試,不如 pyspider 方便。
pyspider 支持 PhantomJS 在 JavaScript 采集 中渲染頁(yè)面,并且 ScrapySplash 組件可以??吭?Scrapy 中,這需要額外的配置。
PyQuery 作為選擇器內置在 PySpider 中,XPath、CSS 選擇器和正則匹配都??吭?Scrapy 中。
pyspider的可擴展性不足,可配置程度不高。在Scrapy中,通過(guò)對接Middleware、Pipeline、Extension等組件可以實(shí)現非常強大的功能。模塊間耦合度低,可擴展性極高。
如果想快速抓取一個(gè)頁(yè)面,推薦使用pyspider,開(kāi)發(fā)比較方便,比如快速抓取一個(gè)普通新聞網(wǎng)站的新聞內容。如果要處理非常大規模的抓取,反爬度很強,建議使用Scrapy,比如對網(wǎng)站的大規模數據采集的被封IP、被封賬號進(jìn)行抓取, 和高頻驗證。
pyspider的架構
pyspider的架構主要分為三個(gè)部分:Scheduler(調度器)、Fetcher(抓取器)、Processor(處理器)。整個(gè)爬取過(guò)程由Monitor(監視器)監控,爬取結果為Result Worker(results)。處理器),如圖 12-1 所示。
Scheduler發(fā)起任務(wù)調度,Fetcher負責抓取網(wǎng)頁(yè)內容,Processor負責解析網(wǎng)頁(yè)內容,然后將新生成的Request發(fā)送給Scheduler進(jìn)行調度,并保存生成的提取結果輸出。
pyspider的任務(wù)執行過(guò)程邏輯很清晰,具體流程如下。
每個(gè) pyspider 項目都對應一個(gè) Python 腳本,該腳本定義了一個(gè)帶有 on_start() 方法的 Handler 類(lèi)。爬取首先調用on_start()方法生成初始爬取任務(wù),然后發(fā)送給Scheduler進(jìn)行調度。
Scheduler 將抓取任務(wù)分發(fā)給 Fetcher 進(jìn)行抓取,Fetcher 執行并獲取響應,然后將響應發(fā)送給 Processor。
Processer處理響應并提取新的URL生成新的爬蟲(chóng)任務(wù),然后通過(guò)消息隊列通知Schduler當前的爬蟲(chóng)任務(wù)執行狀態(tài),并將新生成的爬蟲(chóng)任務(wù)發(fā)送給Scheduler。如果生成了新的 fetch 結果,則將其發(fā)送到結果隊列中,由 Result Worker 處理。
Scheduler接收到一個(gè)新的抓取任務(wù),然后查詢(xún)數據庫,判斷是新的抓取任務(wù)還是需要重試的任務(wù),然后繼續調度,然后發(fā)回Fetcher去抓取。
不斷重復上述工作,直到所有任務(wù)都執行完畢,抓取結束。
捕獲后,程序會(huì )回調on_finished()方法,這里可以定義后處理過(guò)程。結語(yǔ)
本節我們主要了解pyspider的基本功能和架構。接下來(lái)我們用一個(gè)例子來(lái)體驗一下pyspider的爬取操作,然后總結一下它的各種用途。
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章:
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(學(xué)爬蟲(chóng)的幾個(gè)誤區,你都知道嗎?(上) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2022-02-07 21:02
)
我其實(shí)沒(méi)想到人們對爬行的熱情如此之高??磥?lái)我的粉絲群中的每個(gè)人都想學(xué)習爬行。
反過(guò)來(lái)想,也就不足為奇了:爬蟲(chóng)等于數據,沒(méi)有數據怎么辦?
但我發(fā)現,這種基于能力和知識點(diǎn)的學(xué)習路線(xiàn)雖然看起來(lái)不錯,但如果沒(méi)有實(shí)際的項目支持,很難實(shí)施。
在和很多人的交流中,我也發(fā)現了學(xué)習爬蟲(chóng)的幾個(gè)誤區。
學(xué)習爬蟲(chóng)的幾個(gè)誤區
1.不明白:我開(kāi)發(fā)了一個(gè)簡(jiǎn)單的爬蟲(chóng)對比葫蘆畫(huà),但原理不明白,稍微改一下也不行。
2.缺乏明確的目標:如果你的目標是學(xué)習爬行,這還不夠明確。進(jìn)一步細化和明確目標,例如:學(xué)會(huì )攀登你最需要的3個(gè)網(wǎng)站。
3. 貪多,貪眾:我沒(méi)底子,只想一口吃掉一個(gè)胖子。很多人認為某件事并不難,但他們從來(lái)沒(méi)有做過(guò),或者從來(lái)沒(méi)有學(xué)過(guò)。
4.缺乏實(shí)踐經(jīng)驗:爬蟲(chóng)所涉及的知識體系非常豐富,超出了任何語(yǔ)言的范疇。如果被知識點(diǎn)驅使去學(xué)習爬蟲(chóng),會(huì )非常困難,無(wú)法掌握關(guān)鍵點(diǎn)。
我一直主張以實(shí)戰為切入點(diǎn),學(xué)習技術(shù)。比如我在B站的Python_Seven醬也是實(shí)戰的。小江機器人等項目很多人都很熟悉。
幾周前突然想到爬蟲(chóng)的學(xué)習路線(xiàn)也可以這樣做:
這種學(xué)習路徑比基于能力和知識的階梯更容易執行:
1.目標很明確,學(xué)習攀登10個(gè)不同難度級別網(wǎng)站。
2.目標明確,深度學(xué)習成為可能。確保完全理解 10 個(gè) 網(wǎng)站 抓取過(guò)程,而不僅僅是畫(huà)一個(gè)勺子。
3.不要貪得太多,什么都不要,10個(gè)網(wǎng)站(還包括幾個(gè)練習網(wǎng)站)。但不要太貪心。在你牢牢掌握這些之前,不要想著(zhù)應用爬取,也不要去追求特別難的網(wǎng)站。
4.實(shí)戰,up是實(shí)戰,到底是實(shí)戰。但經(jīng)過(guò)實(shí)戰,我學(xué)到了知識并付諸實(shí)踐。
來(lái)吧,這是我們篩選的10個(gè)項目。
學(xué)習爬行的10個(gè)項目
具體的網(wǎng)站僅供參考,可以換成同難度的類(lèi)似網(wǎng)站。
注意:8和9是同一個(gè)網(wǎng)站,使用的方法不同。
下面是10個(gè)網(wǎng)站及相關(guān)知識點(diǎn)的列表:
1.網(wǎng)站僅供參考,可替換為其他相同難度的網(wǎng)站。
2.以學(xué)習為目的,抓取過(guò)程一定要恰當,不要對網(wǎng)站的操作施加壓力。
30天時(shí)間表
如果你有一個(gè)目標,你就必須有一個(gè)計劃。我看到很多人說(shuō)想學(xué)Python,一年前來(lái)找我,一年后還是那個(gè)狀態(tài)。沒(méi)有時(shí)間計劃的目標大多是無(wú)法實(shí)現的目標。
我為這10個(gè)項目制定了30天的學(xué)習計劃。
這個(gè)30天爬蟲(chóng)計劃的第一天就是了解爬蟲(chóng)的規則。多條爬蟲(chóng)進(jìn)公安局的故事大家都聽(tīng)過(guò)。所以這件事非常重要。
事實(shí)上,爬行動(dòng)物是無(wú)辜的。明白了規則之后,爬蟲(chóng)變色就不用說(shuō)了。否則,百度、谷歌、天眼查等大公司和平臺都會(huì )進(jìn)入。你要明白:什么是不可逾越的紅線(xiàn)?什么可以爬?你能爬多少?如何文明優(yōu)雅地攀登?
那么是時(shí)候攻克這10個(gè)爬蟲(chóng)項目了,涉及的知識點(diǎn)不同,從最簡(jiǎn)單的小蟲(chóng)卵到分布式的大型爬蟲(chóng)。
關(guān)于Python技術(shù)儲備
學(xué)好 Python 是賺錢(qián)的好方法,不管是工作還是副業(yè),但要學(xué)好 Python,還是要有學(xué)習計劃的。最后,我們將分享一套完整的Python學(xué)習資料,以幫助那些想學(xué)習Python的朋友!
一、Python全方位學(xué)習路線(xiàn)
Python的各個(gè)方向都是將Python中常用的技術(shù)點(diǎn)進(jìn)行整理,形成各個(gè)領(lǐng)域知識點(diǎn)的匯總。它的用處是你可以根據以上知識點(diǎn)找到對應的學(xué)習資源,保證你能學(xué)得更全面。
二、學(xué)習軟件
工人要做好工作,首先要磨利他的工具。學(xué)習Python常用的開(kāi)發(fā)軟件就到這里,為大家節省不少時(shí)間。
三、入門(mén)視頻
當我們看視頻學(xué)習時(shí),沒(méi)有手我們就無(wú)法移動(dòng)眼睛和大腦。更科學(xué)的學(xué)習方式是理解后再使用。這時(shí)候動(dòng)手項目就很合適了。
四、實(shí)際案例
光學(xué)理論是無(wú)用的。你必須學(xué)會(huì )??跟隨,你必須先進(jìn)行實(shí)際練習,然后才能將所學(xué)應用于實(shí)踐。這時(shí)候可以借鑒實(shí)戰案例。
五、采訪(fǎng)信息
我們必須學(xué)習 Python 才能找到一份高薪工作。以下面試題是來(lái)自阿里、騰訊、字節跳動(dòng)等一線(xiàn)互聯(lián)網(wǎng)公司的最新面試資料,部分阿里大佬給出了權威答案??赐赀@套面試材料相信大家都能找到一份滿(mǎn)意的工作。
本完整版Python全套學(xué)習資料已上傳至CSDN。需要的可以微信掃描下方官方CSDN認證二維碼免費獲取【保證100%免費】
查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(學(xué)爬蟲(chóng)的幾個(gè)誤區,你都知道嗎?(上)
)
我其實(shí)沒(méi)想到人們對爬行的熱情如此之高??磥?lái)我的粉絲群中的每個(gè)人都想學(xué)習爬行。
反過(guò)來(lái)想,也就不足為奇了:爬蟲(chóng)等于數據,沒(méi)有數據怎么辦?

但我發(fā)現,這種基于能力和知識點(diǎn)的學(xué)習路線(xiàn)雖然看起來(lái)不錯,但如果沒(méi)有實(shí)際的項目支持,很難實(shí)施。
在和很多人的交流中,我也發(fā)現了學(xué)習爬蟲(chóng)的幾個(gè)誤區。
學(xué)習爬蟲(chóng)的幾個(gè)誤區
1.不明白:我開(kāi)發(fā)了一個(gè)簡(jiǎn)單的爬蟲(chóng)對比葫蘆畫(huà),但原理不明白,稍微改一下也不行。
2.缺乏明確的目標:如果你的目標是學(xué)習爬行,這還不夠明確。進(jìn)一步細化和明確目標,例如:學(xué)會(huì )攀登你最需要的3個(gè)網(wǎng)站。
3. 貪多,貪眾:我沒(méi)底子,只想一口吃掉一個(gè)胖子。很多人認為某件事并不難,但他們從來(lái)沒(méi)有做過(guò),或者從來(lái)沒(méi)有學(xué)過(guò)。
4.缺乏實(shí)踐經(jīng)驗:爬蟲(chóng)所涉及的知識體系非常豐富,超出了任何語(yǔ)言的范疇。如果被知識點(diǎn)驅使去學(xué)習爬蟲(chóng),會(huì )非常困難,無(wú)法掌握關(guān)鍵點(diǎn)。
我一直主張以實(shí)戰為切入點(diǎn),學(xué)習技術(shù)。比如我在B站的Python_Seven醬也是實(shí)戰的。小江機器人等項目很多人都很熟悉。
幾周前突然想到爬蟲(chóng)的學(xué)習路線(xiàn)也可以這樣做:
這種學(xué)習路徑比基于能力和知識的階梯更容易執行:
1.目標很明確,學(xué)習攀登10個(gè)不同難度級別網(wǎng)站。
2.目標明確,深度學(xué)習成為可能。確保完全理解 10 個(gè) 網(wǎng)站 抓取過(guò)程,而不僅僅是畫(huà)一個(gè)勺子。
3.不要貪得太多,什么都不要,10個(gè)網(wǎng)站(還包括幾個(gè)練習網(wǎng)站)。但不要太貪心。在你牢牢掌握這些之前,不要想著(zhù)應用爬取,也不要去追求特別難的網(wǎng)站。
4.實(shí)戰,up是實(shí)戰,到底是實(shí)戰。但經(jīng)過(guò)實(shí)戰,我學(xué)到了知識并付諸實(shí)踐。
來(lái)吧,這是我們篩選的10個(gè)項目。
學(xué)習爬行的10個(gè)項目
具體的網(wǎng)站僅供參考,可以換成同難度的類(lèi)似網(wǎng)站。


注意:8和9是同一個(gè)網(wǎng)站,使用的方法不同。
下面是10個(gè)網(wǎng)站及相關(guān)知識點(diǎn)的列表:
1.網(wǎng)站僅供參考,可替換為其他相同難度的網(wǎng)站。
2.以學(xué)習為目的,抓取過(guò)程一定要恰當,不要對網(wǎng)站的操作施加壓力。

30天時(shí)間表
如果你有一個(gè)目標,你就必須有一個(gè)計劃。我看到很多人說(shuō)想學(xué)Python,一年前來(lái)找我,一年后還是那個(gè)狀態(tài)。沒(méi)有時(shí)間計劃的目標大多是無(wú)法實(shí)現的目標。
我為這10個(gè)項目制定了30天的學(xué)習計劃。

這個(gè)30天爬蟲(chóng)計劃的第一天就是了解爬蟲(chóng)的規則。多條爬蟲(chóng)進(jìn)公安局的故事大家都聽(tīng)過(guò)。所以這件事非常重要。
事實(shí)上,爬行動(dòng)物是無(wú)辜的。明白了規則之后,爬蟲(chóng)變色就不用說(shuō)了。否則,百度、谷歌、天眼查等大公司和平臺都會(huì )進(jìn)入。你要明白:什么是不可逾越的紅線(xiàn)?什么可以爬?你能爬多少?如何文明優(yōu)雅地攀登?
那么是時(shí)候攻克這10個(gè)爬蟲(chóng)項目了,涉及的知識點(diǎn)不同,從最簡(jiǎn)單的小蟲(chóng)卵到分布式的大型爬蟲(chóng)。
關(guān)于Python技術(shù)儲備
學(xué)好 Python 是賺錢(qián)的好方法,不管是工作還是副業(yè),但要學(xué)好 Python,還是要有學(xué)習計劃的。最后,我們將分享一套完整的Python學(xué)習資料,以幫助那些想學(xué)習Python的朋友!
一、Python全方位學(xué)習路線(xiàn)
Python的各個(gè)方向都是將Python中常用的技術(shù)點(diǎn)進(jìn)行整理,形成各個(gè)領(lǐng)域知識點(diǎn)的匯總。它的用處是你可以根據以上知識點(diǎn)找到對應的學(xué)習資源,保證你能學(xué)得更全面。

二、學(xué)習軟件
工人要做好工作,首先要磨利他的工具。學(xué)習Python常用的開(kāi)發(fā)軟件就到這里,為大家節省不少時(shí)間。

三、入門(mén)視頻
當我們看視頻學(xué)習時(shí),沒(méi)有手我們就無(wú)法移動(dòng)眼睛和大腦。更科學(xué)的學(xué)習方式是理解后再使用。這時(shí)候動(dòng)手項目就很合適了。

四、實(shí)際案例
光學(xué)理論是無(wú)用的。你必須學(xué)會(huì )??跟隨,你必須先進(jìn)行實(shí)際練習,然后才能將所學(xué)應用于實(shí)踐。這時(shí)候可以借鑒實(shí)戰案例。

五、采訪(fǎng)信息
我們必須學(xué)習 Python 才能找到一份高薪工作。以下面試題是來(lái)自阿里、騰訊、字節跳動(dòng)等一線(xiàn)互聯(lián)網(wǎng)公司的最新面試資料,部分阿里大佬給出了權威答案??赐赀@套面試材料相信大家都能找到一份滿(mǎn)意的工作。


本完整版Python全套學(xué)習資料已上傳至CSDN。需要的可以微信掃描下方官方CSDN認證二維碼免費獲取【保證100%免費】
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(PHPHTML數據爬蟲(chóng)的設計思路及應用的優(yōu)勢)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2022-02-05 16:08
內容
1. 為什么是爬蟲(chóng)?
在“大數據時(shí)代”,數據獲取方式:
從第三方數據平臺購買(mǎi)數據爬蟲(chóng)數據2.什么是爬蟲(chóng)?
抓取網(wǎng)絡(luò )數據的程序
3. 爬蟲(chóng)如何抓取網(wǎng)頁(yè)數據?
首先,你需要了解一個(gè)網(wǎng)頁(yè)的三個(gè)特征:
每個(gè)網(wǎng)頁(yè)都有自己的 URL(Uniform Resource Locator)來(lái)定位網(wǎng)頁(yè) 所有使用 HTML(超文本標記語(yǔ)言)來(lái)描述頁(yè)面信息 所有網(wǎng)頁(yè)使用 HTTP/HTTPS(超文本傳輸??協(xié)議)來(lái)傳輸 HTML 數據
爬蟲(chóng)設計思路:
首先確定需要爬取的網(wǎng)頁(yè)的URL地址,通過(guò)HTTP/HTTPS協(xié)議獲取對應的HTML頁(yè)面,提取HTML頁(yè)面中的有用數據:
一個(gè)。如果是需要的數據--保存
灣。如果還有其他網(wǎng)址,繼續步驟2 4. Python爬蟲(chóng)的優(yōu)勢?語(yǔ)言的優(yōu)點(diǎn)和缺點(diǎn)
PHP
世界上最好的語(yǔ)言
對于多線(xiàn)程,異步支持不好,并發(fā)處理不夠
爪哇
完善的網(wǎng)絡(luò )爬蟲(chóng)生態(tài)系統
Java語(yǔ)言本身繁瑣,代碼量大,數據重構成本高
C/C++
運營(yíng)效率和性能幾乎是最高的
學(xué)習成本高
Python
語(yǔ)法優(yōu)美,代碼簡(jiǎn)潔,開(kāi)發(fā)效率高,模塊多
5.抓取HTML頁(yè)面的學(xué)習路線(xiàn):解析服務(wù)器對應內容:采集動(dòng)態(tài)HTML、Captcha處理Scrapy框架:分布式策略:爬蟲(chóng)、反爬蟲(chóng)、反反之間的較量爬蟲(chóng):6.爬蟲(chóng)分類(lèi)6.1 通用爬蟲(chóng):
1.定義:搜索引擎爬蟲(chóng)系統
2.目標:爬取互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè),放到本地服務(wù)器上形成備份,對這些網(wǎng)頁(yè)做相關(guān)的處理(提取關(guān)鍵詞,去除廣告),最終為用戶(hù)提供借口拜訪(fǎng)
3.爬取過(guò)程:
a) 首先選擇一部分已有的URL,將這些URL放入爬取隊列
b) 從隊列中取出URL,然后解析NDS得到主機IP,然后到這個(gè)IP對應的服務(wù)器下載HTML頁(yè)面,保存到搜索引擎的本地服務(wù)器,然后把爬取的抓取隊列中的 URL
c) 分析網(wǎng)頁(yè)內容,找出網(wǎng)頁(yè)中的其他URL連接,繼續第二步,直到爬取結束
4.搜索引擎如何獲得一個(gè)新的網(wǎng)站 URL:
主動(dòng)向搜索引擎提交網(wǎng)址:在其他網(wǎng)站中設置網(wǎng)站的外部鏈接:其他網(wǎng)站上方的友好鏈接搜索引擎會(huì )配合DNS服務(wù)商,可以快速< @k10@ >新網(wǎng)站
5.一般爬蟲(chóng)注意事項
萬(wàn)能爬蟲(chóng)不是萬(wàn)物皆可爬,它必須遵守規則:
機器人協(xié)議:該協(xié)議將指定通用爬蟲(chóng)爬取網(wǎng)頁(yè)的權限
我們可以在不同的網(wǎng)頁(yè)上訪(fǎng)問(wèn)機器人權限
6.一般爬蟲(chóng)一般流程:
7.通用爬蟲(chóng)的缺點(diǎn)
只能提供文本相關(guān)的內容(HTML、WORD、PDF)等,不能提供多媒體文件(msic、圖片、視頻)等二進(jìn)制文件。結果是一樣的,不同背景的人聽(tīng)不同的搜索結果是無(wú)法理解的 人的語(yǔ)義檢索側重于爬蟲(chóng)的優(yōu)勢
DNS域名解析成IP:在命令框中輸入ping獲取服務(wù)器的IP
6.2 關(guān)注爬蟲(chóng):
爬蟲(chóng)程序員編寫(xiě)的針對某個(gè)內容的爬蟲(chóng) -> 面向主題的爬蟲(chóng),需要爬蟲(chóng)的爬蟲(chóng) 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(PHPHTML數據爬蟲(chóng)的設計思路及應用的優(yōu)勢)
內容
1. 為什么是爬蟲(chóng)?
在“大數據時(shí)代”,數據獲取方式:
從第三方數據平臺購買(mǎi)數據爬蟲(chóng)數據2.什么是爬蟲(chóng)?
抓取網(wǎng)絡(luò )數據的程序
3. 爬蟲(chóng)如何抓取網(wǎng)頁(yè)數據?
首先,你需要了解一個(gè)網(wǎng)頁(yè)的三個(gè)特征:
每個(gè)網(wǎng)頁(yè)都有自己的 URL(Uniform Resource Locator)來(lái)定位網(wǎng)頁(yè) 所有使用 HTML(超文本標記語(yǔ)言)來(lái)描述頁(yè)面信息 所有網(wǎng)頁(yè)使用 HTTP/HTTPS(超文本傳輸??協(xié)議)來(lái)傳輸 HTML 數據
爬蟲(chóng)設計思路:
首先確定需要爬取的網(wǎng)頁(yè)的URL地址,通過(guò)HTTP/HTTPS協(xié)議獲取對應的HTML頁(yè)面,提取HTML頁(yè)面中的有用數據:
一個(gè)。如果是需要的數據--保存
灣。如果還有其他網(wǎng)址,繼續步驟2 4. Python爬蟲(chóng)的優(yōu)勢?語(yǔ)言的優(yōu)點(diǎn)和缺點(diǎn)
PHP
世界上最好的語(yǔ)言
對于多線(xiàn)程,異步支持不好,并發(fā)處理不夠
爪哇
完善的網(wǎng)絡(luò )爬蟲(chóng)生態(tài)系統
Java語(yǔ)言本身繁瑣,代碼量大,數據重構成本高
C/C++
運營(yíng)效率和性能幾乎是最高的
學(xué)習成本高
Python
語(yǔ)法優(yōu)美,代碼簡(jiǎn)潔,開(kāi)發(fā)效率高,模塊多
5.抓取HTML頁(yè)面的學(xué)習路線(xiàn):解析服務(wù)器對應內容:采集動(dòng)態(tài)HTML、Captcha處理Scrapy框架:分布式策略:爬蟲(chóng)、反爬蟲(chóng)、反反之間的較量爬蟲(chóng):6.爬蟲(chóng)分類(lèi)6.1 通用爬蟲(chóng):
1.定義:搜索引擎爬蟲(chóng)系統
2.目標:爬取互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè),放到本地服務(wù)器上形成備份,對這些網(wǎng)頁(yè)做相關(guān)的處理(提取關(guān)鍵詞,去除廣告),最終為用戶(hù)提供借口拜訪(fǎng)

3.爬取過(guò)程:
a) 首先選擇一部分已有的URL,將這些URL放入爬取隊列
b) 從隊列中取出URL,然后解析NDS得到主機IP,然后到這個(gè)IP對應的服務(wù)器下載HTML頁(yè)面,保存到搜索引擎的本地服務(wù)器,然后把爬取的抓取隊列中的 URL
c) 分析網(wǎng)頁(yè)內容,找出網(wǎng)頁(yè)中的其他URL連接,繼續第二步,直到爬取結束
4.搜索引擎如何獲得一個(gè)新的網(wǎng)站 URL:
主動(dòng)向搜索引擎提交網(wǎng)址:在其他網(wǎng)站中設置網(wǎng)站的外部鏈接:其他網(wǎng)站上方的友好鏈接搜索引擎會(huì )配合DNS服務(wù)商,可以快速< @k10@ >新網(wǎng)站
5.一般爬蟲(chóng)注意事項
萬(wàn)能爬蟲(chóng)不是萬(wàn)物皆可爬,它必須遵守規則:
機器人協(xié)議:該協(xié)議將指定通用爬蟲(chóng)爬取網(wǎng)頁(yè)的權限
我們可以在不同的網(wǎng)頁(yè)上訪(fǎng)問(wèn)機器人權限


6.一般爬蟲(chóng)一般流程:

7.通用爬蟲(chóng)的缺點(diǎn)
只能提供文本相關(guān)的內容(HTML、WORD、PDF)等,不能提供多媒體文件(msic、圖片、視頻)等二進(jìn)制文件。結果是一樣的,不同背景的人聽(tīng)不同的搜索結果是無(wú)法理解的 人的語(yǔ)義檢索側重于爬蟲(chóng)的優(yōu)勢
DNS域名解析成IP:在命令框中輸入ping獲取服務(wù)器的IP

6.2 關(guān)注爬蟲(chóng):
爬蟲(chóng)程序員編寫(xiě)的針對某個(gè)內容的爬蟲(chóng) -> 面向主題的爬蟲(chóng),需要爬蟲(chóng)的爬蟲(chóng)
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(2021-10-29剛學(xué)新浪微博熱搜主題討論量獲取)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 58 次瀏覽 ? 2022-02-05 09:16
2021-10-29
剛學(xué)python爬蟲(chóng),用爬蟲(chóng)爬了新浪微博熱搜,看看效果如何。也是這段時(shí)間學(xué)習python的一個(gè)總結。
一、目的:
抓取2020年1月3日星期五新浪微博熱搜榜,動(dòng)態(tài)展示抓取數據,生成當日微博熱詞云和微博熱搜前20關(guān)鍵詞條形圖。
二、事情:
分析新浪微博熱搜榜,分析網(wǎng)頁(yè)結構,分析網(wǎng)頁(yè),獲取當前熱門(mén)話(huà)題、排名、話(huà)題討論量、當前爬取時(shí)間。由于微博熱搜動(dòng)態(tài)刷新,選擇20-30分鐘抓取數據,時(shí)間范圍為9:30-21:00。將上次采集的數據全部導入實(shí)現數據動(dòng)態(tài)顯示的模塊,并進(jìn)行相關(guān)調整。使用口吃分詞對獲取的數據進(jìn)行分詞,使用WordCloud展示當日熱度搜索熱點(diǎn)詞云
三、相關(guān)實(shí)現步驟
1.網(wǎng)頁(yè)分析
定義一個(gè)請求頭來(lái)模擬瀏覽器并隨機生成一個(gè)請求頭,方法def get_header():
header1 = {
??? "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
}
header2 = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362"
}
header3 = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
header_list = [header1,header2,header3]
index = random.randint(0,1)
return header_list[index]
解析 網(wǎng)站 方法:def get_data(url, headers)
使用權
req = requests.get(url=url, headers=headers)
req.encoding = "utf-8"
通過(guò)lxml解析網(wǎng)頁(yè)
bf = BeautifulSoup(html, "lxml")
通過(guò)觀(guān)察,每個(gè)熱搜都在tr class=""下,所以只需遍歷所有class=""
你可以上每一個(gè)熱搜
div_content = bf.find_all("tr", class_="")
遍歷div_content獲取各個(gè)熱搜的排名、話(huà)題、討論量
for item in div_content:
刪除頂部消息并將變量 t = 1 添加到循環(huán)中
if (t == 1):
??? ????? t = 0
??? ????? continue
tr下有3條td信息,分別代表排名、熱搜話(huà)題和瀏覽量、標簽表達。前兩條信息是我們想要得到的。
獲取當前熱搜排名
num_content = item.select("td")[0].string
熱搜話(huà)題和瀏覽量分別在td-02的a標簽和span標簽下
獲取當前熱門(mén)話(huà)題
content = item.select("td")[1].select("a")[0].string
獲取當前熱搜話(huà)題的討論量
num = item.select("td")[1].select("span")[0].string
獲取當前系統時(shí)間需要在前面import from time import strftime
current_time = strftime("%Y-%m-%d %H:%M")
將當前熱搜排名、當前熱搜話(huà)題、當前熱搜話(huà)題討論量、當前系統時(shí)間放入列表存儲數據
list = [content,num_content,num,current_time]
將整個(gè)列表放入列表中
list_content.append(list)
2.存儲數據
存儲爬取的數據,存儲方式def store_Excel(list):
寫(xiě)入文件,編碼方式為utf_8_sig,生成的csv文件不會(huì )亂碼,不換行的操作為newline=""
with open("微博實(shí)時(shí)熱搜.csv","a",encoding="utf_8_sig",newline="")as file:
csv_writer = csv.writer(file)
遍歷列表,寫(xiě)
????? for item in list:
?? ?? ?csv_writer.writerow(item)
關(guān)閉文件
file.close()
3.生成詞云
想法:
整合一天爬取的所有數據
2、通過(guò)累加的方式遍歷并累加列表,將列表變成長(cháng)字符串
3.通過(guò)口吃分詞和空間分詞來(lái)分割字符串
4.找一張輪廓清晰的圖片打開(kāi),使用numpy獲取輪廓
5、使用WordCloud生成當天微博熱點(diǎn)詞云。
導入生成詞云的庫
rom wordcloud import WordCloud
import Image
import numpy
import jieba
為字符串存儲定義字符串
str = ""
閱讀熱搜熱點(diǎn)表
with open("微博實(shí)時(shí)熱搜test.csv","r",encoding="utf_8_sig",newline="") as file:
??? csv_reader = csv.reader(file)
遍歷列表
for item in csv_reader:
去掉第一個(gè)無(wú)用的信息,在循環(huán)外定義變量t=1
if t == 1:
??? ??? t = 0
??? ??? continue
字符串拼接,熱門(mén)話(huà)題在第一欄
str += item[0]
關(guān)閉文件
file.close()
口吃分詞
jieba_content = jieba.cut(str)
空間連接的join方法
join_content=" ".join(jieba_content)
打開(kāi)圖片
wei_bo = Image.open("logo.jpg")
找到輪廓
wei_bo_image = numpy.array(wei_bo)
制作生成的詞云
word_cloud = WordCloud(font_path="font1.TTF",background_color="white",mask = wei_bo_image).generate(join_content)
word_cloud.to_file("微博熱搜.jpg")
最終詞云展示:
微博logo圖片勾勒出文字云。字體大小代表受歡迎程度。字體越大,受歡迎程度越高。字體越小,受歡迎程度越低。
4.分析數據
想法:
1.將微博熱門(mén)話(huà)題存儲在txt文件中
2.讀取txt文件,使用jieba分詞進(jìn)行分詞,生成關(guān)鍵詞
3. 對 關(guān)鍵詞 執行頻率統計
4.按頻率降序對統計信息進(jìn)行排序關(guān)鍵詞
5. 將排序結果存儲在 csv 文件中以供以后操作
定義詞典
word_dic = {}
打開(kāi)文件,讀取數據
使用 open("1.txt", "r", encoding="utf-8") 作為文件:
txt = file.read()
文件.close()
jieba分詞數據
單詞 = jieba.lcut(txt)
循環(huán)數據
言歸正傳:
如果關(guān)鍵字數量為1,則不計入
如果 len(word) == 1:
繼續
否則頻率增加 1
別的:
word_dic[word] = word_dic.get(word, 0) + 1
將字典數據轉換為元組數據,用zip實(shí)現
word_zip = zip(word_dic.values(), word_dic.keys())
根據值從大到小對元組中的數據進(jìn)行排序
word_sort = list(排序(word_zip, reverse=True))
定義兩個(gè)數據存儲列表
list_1 = ["name", "count_name"]
list_2 = []
列表_2.追加(列表_1)
對于 word_sort 中的項目:
# 詞頻
計數 = 項目 [0]
#關(guān)鍵字
名稱(chēng) = 項目 [1]
list_1 = [名稱(chēng),計數]
列表_2.追加(列表_1)
寫(xiě)入文件
以open("微博熱搜關(guān)鍵詞詞頻統計.csv", "w", encoding="utf_8_sig", newline="")為文件:
csv_writer = csv.writer(文件)
遍歷list_2并寫(xiě)入每一行
對于 list_2 中的 i:
csv_writer.writerow(i)
5.生成繪圖
思路:根據熱搜關(guān)鍵詞的排序文件,提取頻率最高的前20位數據,繪制條形圖
導入繪圖工具包
將熊貓導入為 pd
將 matplotlib.pyplot 導入為 plt
定義繪圖樣式和顏色
plt.style.use('ggplot')
顏色1 = '#6D6D6D'
讀取排序文件
df = pd.read_csv("微博熱搜關(guān)鍵詞詞頻統計.csv",encoding="utf-8")
提取前 20 個(gè) 關(guān)鍵詞 和頻率
name1 = df.name[:20]
count1 = df.count_name[:20]
要繪制條形圖,請使用 range() 使 x 軸保持正確的順序
plt.bar(范圍(20),count1,tick_label = name1)
設置縱坐標范圍
plt.ylim(0,90)
顯示中文字體標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
標題
plt.title('微博熱搜關(guān)鍵詞詞頻統計',color = colors1)
x 軸標題,y 軸標題
plt.title('微博熱搜關(guān)鍵詞詞頻統計',color = colors1)
plt.xlabel('關(guān)鍵詞')
為每個(gè)條添加數字標簽
對于枚舉中的 x,y (list(count1)):
plt.text(x,y+1,'%s'%round(y,90),ha = 'center',color = colors1)
x軸關(guān)鍵字旋轉300度
plt.xticks(旋轉 = 300)
自動(dòng)控制空白邊距以顯示所有 x 軸坐標
plt.tight_layout()
保存圖片
plt.savefig('微博熱搜關(guān)鍵詞詞頻統計top20.png')
顯示圖像
plt.show()
繪圖結果顯示:
這次爬蟲(chóng)抓取了大約20組數據,每組數據對應50個(gè)熱搜榜。爬取時(shí)間為2020年1月1日9:30-21:00,每次爬取時(shí)間間隔為20-30分鐘。抓取這么多組數據的主要目的是為了做數據的動(dòng)態(tài)效果,展示過(guò)去一天微博熱搜的動(dòng)態(tài)變化。
數據動(dòng)態(tài)展示效果圖:
完整數據動(dòng)態(tài)效果視頻請參考微博熱搜數據動(dòng)態(tài)展示.mp4
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章: 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(2021-10-29剛學(xué)新浪微博熱搜主題討論量獲取)
2021-10-29
剛學(xué)python爬蟲(chóng),用爬蟲(chóng)爬了新浪微博熱搜,看看效果如何。也是這段時(shí)間學(xué)習python的一個(gè)總結。
一、目的:
抓取2020年1月3日星期五新浪微博熱搜榜,動(dòng)態(tài)展示抓取數據,生成當日微博熱詞云和微博熱搜前20關(guān)鍵詞條形圖。
二、事情:
分析新浪微博熱搜榜,分析網(wǎng)頁(yè)結構,分析網(wǎng)頁(yè),獲取當前熱門(mén)話(huà)題、排名、話(huà)題討論量、當前爬取時(shí)間。由于微博熱搜動(dòng)態(tài)刷新,選擇20-30分鐘抓取數據,時(shí)間范圍為9:30-21:00。將上次采集的數據全部導入實(shí)現數據動(dòng)態(tài)顯示的模塊,并進(jìn)行相關(guān)調整。使用口吃分詞對獲取的數據進(jìn)行分詞,使用WordCloud展示當日熱度搜索熱點(diǎn)詞云
三、相關(guān)實(shí)現步驟
1.網(wǎng)頁(yè)分析
定義一個(gè)請求頭來(lái)模擬瀏覽器并隨機生成一個(gè)請求頭,方法def get_header():
header1 = {
??? "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
}
header2 = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362"
}
header3 = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
header_list = [header1,header2,header3]
index = random.randint(0,1)
return header_list[index]
解析 網(wǎng)站 方法:def get_data(url, headers)
使用權
req = requests.get(url=url, headers=headers)
req.encoding = "utf-8"
通過(guò)lxml解析網(wǎng)頁(yè)
bf = BeautifulSoup(html, "lxml")
通過(guò)觀(guān)察,每個(gè)熱搜都在tr class=""下,所以只需遍歷所有class=""
你可以上每一個(gè)熱搜
div_content = bf.find_all("tr", class_="")
遍歷div_content獲取各個(gè)熱搜的排名、話(huà)題、討論量
for item in div_content:
刪除頂部消息并將變量 t = 1 添加到循環(huán)中
if (t == 1):
??? ????? t = 0
??? ????? continue
tr下有3條td信息,分別代表排名、熱搜話(huà)題和瀏覽量、標簽表達。前兩條信息是我們想要得到的。
獲取當前熱搜排名
num_content = item.select("td")[0].string
熱搜話(huà)題和瀏覽量分別在td-02的a標簽和span標簽下
獲取當前熱門(mén)話(huà)題
content = item.select("td")[1].select("a")[0].string
獲取當前熱搜話(huà)題的討論量
num = item.select("td")[1].select("span")[0].string
獲取當前系統時(shí)間需要在前面import from time import strftime
current_time = strftime("%Y-%m-%d %H:%M")
將當前熱搜排名、當前熱搜話(huà)題、當前熱搜話(huà)題討論量、當前系統時(shí)間放入列表存儲數據
list = [content,num_content,num,current_time]
將整個(gè)列表放入列表中
list_content.append(list)
2.存儲數據
存儲爬取的數據,存儲方式def store_Excel(list):
寫(xiě)入文件,編碼方式為utf_8_sig,生成的csv文件不會(huì )亂碼,不換行的操作為newline=""
with open("微博實(shí)時(shí)熱搜.csv","a",encoding="utf_8_sig",newline="")as file:
csv_writer = csv.writer(file)
遍歷列表,寫(xiě)
????? for item in list:
?? ?? ?csv_writer.writerow(item)
關(guān)閉文件
file.close()
3.生成詞云
想法:
整合一天爬取的所有數據
2、通過(guò)累加的方式遍歷并累加列表,將列表變成長(cháng)字符串
3.通過(guò)口吃分詞和空間分詞來(lái)分割字符串
4.找一張輪廓清晰的圖片打開(kāi),使用numpy獲取輪廓
5、使用WordCloud生成當天微博熱點(diǎn)詞云。
導入生成詞云的庫
rom wordcloud import WordCloud
import Image
import numpy
import jieba
為字符串存儲定義字符串
str = ""
閱讀熱搜熱點(diǎn)表
with open("微博實(shí)時(shí)熱搜test.csv","r",encoding="utf_8_sig",newline="") as file:
??? csv_reader = csv.reader(file)
遍歷列表
for item in csv_reader:
去掉第一個(gè)無(wú)用的信息,在循環(huán)外定義變量t=1
if t == 1:
??? ??? t = 0
??? ??? continue
字符串拼接,熱門(mén)話(huà)題在第一欄
str += item[0]
關(guān)閉文件
file.close()
口吃分詞
jieba_content = jieba.cut(str)
空間連接的join方法
join_content=" ".join(jieba_content)
打開(kāi)圖片
wei_bo = Image.open("logo.jpg")
找到輪廓
wei_bo_image = numpy.array(wei_bo)
制作生成的詞云
word_cloud = WordCloud(font_path="font1.TTF",background_color="white",mask = wei_bo_image).generate(join_content)
word_cloud.to_file("微博熱搜.jpg")
最終詞云展示:
微博logo圖片勾勒出文字云。字體大小代表受歡迎程度。字體越大,受歡迎程度越高。字體越小,受歡迎程度越低。
4.分析數據
想法:
1.將微博熱門(mén)話(huà)題存儲在txt文件中
2.讀取txt文件,使用jieba分詞進(jìn)行分詞,生成關(guān)鍵詞
3. 對 關(guān)鍵詞 執行頻率統計
4.按頻率降序對統計信息進(jìn)行排序關(guān)鍵詞
5. 將排序結果存儲在 csv 文件中以供以后操作
定義詞典
word_dic = {}
打開(kāi)文件,讀取數據
使用 open("1.txt", "r", encoding="utf-8") 作為文件:
txt = file.read()
文件.close()
jieba分詞數據
單詞 = jieba.lcut(txt)
循環(huán)數據
言歸正傳:
如果關(guān)鍵字數量為1,則不計入
如果 len(word) == 1:
繼續
否則頻率增加 1
別的:
word_dic[word] = word_dic.get(word, 0) + 1
將字典數據轉換為元組數據,用zip實(shí)現
word_zip = zip(word_dic.values(), word_dic.keys())
根據值從大到小對元組中的數據進(jìn)行排序
word_sort = list(排序(word_zip, reverse=True))
定義兩個(gè)數據存儲列表
list_1 = ["name", "count_name"]
list_2 = []
列表_2.追加(列表_1)
對于 word_sort 中的項目:
# 詞頻
計數 = 項目 [0]
#關(guān)鍵字
名稱(chēng) = 項目 [1]
list_1 = [名稱(chēng),計數]
列表_2.追加(列表_1)
寫(xiě)入文件
以open("微博熱搜關(guān)鍵詞詞頻統計.csv", "w", encoding="utf_8_sig", newline="")為文件:
csv_writer = csv.writer(文件)
遍歷list_2并寫(xiě)入每一行
對于 list_2 中的 i:
csv_writer.writerow(i)
5.生成繪圖
思路:根據熱搜關(guān)鍵詞的排序文件,提取頻率最高的前20位數據,繪制條形圖
導入繪圖工具包
將熊貓導入為 pd
將 matplotlib.pyplot 導入為 plt
定義繪圖樣式和顏色
plt.style.use('ggplot')
顏色1 = '#6D6D6D'
讀取排序文件
df = pd.read_csv("微博熱搜關(guān)鍵詞詞頻統計.csv",encoding="utf-8")
提取前 20 個(gè) 關(guān)鍵詞 和頻率
name1 = df.name[:20]
count1 = df.count_name[:20]
要繪制條形圖,請使用 range() 使 x 軸保持正確的順序
plt.bar(范圍(20),count1,tick_label = name1)
設置縱坐標范圍
plt.ylim(0,90)
顯示中文字體標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
標題
plt.title('微博熱搜關(guān)鍵詞詞頻統計',color = colors1)
x 軸標題,y 軸標題
plt.title('微博熱搜關(guān)鍵詞詞頻統計',color = colors1)
plt.xlabel('關(guān)鍵詞')
為每個(gè)條添加數字標簽
對于枚舉中的 x,y (list(count1)):
plt.text(x,y+1,'%s'%round(y,90),ha = 'center',color = colors1)
x軸關(guān)鍵字旋轉300度
plt.xticks(旋轉 = 300)
自動(dòng)控制空白邊距以顯示所有 x 軸坐標
plt.tight_layout()
保存圖片
plt.savefig('微博熱搜關(guān)鍵詞詞頻統計top20.png')
顯示圖像
plt.show()
繪圖結果顯示:
這次爬蟲(chóng)抓取了大約20組數據,每組數據對應50個(gè)熱搜榜。爬取時(shí)間為2020年1月1日9:30-21:00,每次爬取時(shí)間間隔為20-30分鐘。抓取這么多組數據的主要目的是為了做數據的動(dòng)態(tài)效果,展示過(guò)去一天微博熱搜的動(dòng)態(tài)變化。
數據動(dòng)態(tài)展示效果圖:
完整數據動(dòng)態(tài)效果視頻請參考微博熱搜數據動(dòng)態(tài)展示.mp4
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章:
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(網(wǎng)絡(luò )爬蟲(chóng)最基本的思路和處理方法(一)——1.)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 51 次瀏覽 ? 2022-02-05 09:12
1. 科普
一般搜索引擎處理的對象是互聯(lián)網(wǎng)的網(wǎng)頁(yè)。目前,網(wǎng)頁(yè)數量已達數億。因此,搜索引擎面臨的第一個(gè)問(wèn)題就是如何設計一個(gè)高效的下載系統?;ヂ?lián)網(wǎng)頁(yè)面的鏡像。網(wǎng)絡(luò )爬蟲(chóng)負責這個(gè)任務(wù)。
爬取網(wǎng)頁(yè)的過(guò)程其實(shí)和讀者平時(shí)使用IE瀏覽器瀏覽網(wǎng)頁(yè)的方式是一樣的。假設您在瀏覽器的地址欄中輸入此地址。打開(kāi)網(wǎng)頁(yè)的過(guò)程其實(shí)就是瀏覽器作為瀏覽的“客戶(hù)端”,向服務(wù)器端發(fā)出請求,將服務(wù)器端的文件“抓取”到本地,然后解釋并顯示出來(lái)。瀏覽器的作用是解析得到的HTML代碼,然后將原來(lái)的網(wǎng)頁(yè)轉換成我們看到的網(wǎng)站頁(yè)面。
網(wǎng)絡(luò )爬蟲(chóng)最基本的思想是:從一個(gè)頁(yè)面開(kāi)始,分析其中的url,提取出來(lái),然后通過(guò)這些鏈接尋找下一頁(yè)。如此來(lái)回。
2. 通用爬蟲(chóng)框架
@7))。@9) 和 . 重復剛才的故事。
3. 網(wǎng)址
爬蟲(chóng)處理的主要對象是URL。簡(jiǎn)單地說(shuō),url就是輸入的URL(例如:)。在了解 URL 之前先了解 URI。
Web 上可用的每個(gè)資源,例如 HTML 文檔、圖像、視頻剪輯、程序等,都由通用資源標識符 (URI) 定位。
一個(gè)URI通常由三部分組成:
訪(fǎng)問(wèn)資源的命名機制 存儲資源的資源的主機名 資源本身的名稱(chēng),由路徑表示
比如URI:
我們可以這樣解釋?zhuān)?br /> URL 是 URI 的子集。它是Uniform Resource Locator的縮寫(xiě),翻譯為“統一資源定位器”。
通俗的講,URL是描述Internet上信息資源的字符串,主要用于各種WWW客戶(hù)端程序和服務(wù)器程序中。
使用 URL 可以使用統一的格式來(lái)描述各種信息資源,包括文件、服務(wù)器地址和目錄。
URL的格式由三部分組成:
第一部分是協(xié)議(或服務(wù)模式) 第二部分是存儲資源的主機的IP地址(有時(shí)還包括端口號) 第三部分是主機資源的具體地址,如目錄和文件名等
第一部分和第二部分用“://”符號分隔
第二部分和第三部分用“/”符號隔開(kāi)
第 1 部分和第 2 部分缺一不可,第 3 部分有時(shí)可以省略 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(網(wǎng)絡(luò )爬蟲(chóng)最基本的思路和處理方法(一)——1.)
1. 科普
一般搜索引擎處理的對象是互聯(lián)網(wǎng)的網(wǎng)頁(yè)。目前,網(wǎng)頁(yè)數量已達數億。因此,搜索引擎面臨的第一個(gè)問(wèn)題就是如何設計一個(gè)高效的下載系統?;ヂ?lián)網(wǎng)頁(yè)面的鏡像。網(wǎng)絡(luò )爬蟲(chóng)負責這個(gè)任務(wù)。
爬取網(wǎng)頁(yè)的過(guò)程其實(shí)和讀者平時(shí)使用IE瀏覽器瀏覽網(wǎng)頁(yè)的方式是一樣的。假設您在瀏覽器的地址欄中輸入此地址。打開(kāi)網(wǎng)頁(yè)的過(guò)程其實(shí)就是瀏覽器作為瀏覽的“客戶(hù)端”,向服務(wù)器端發(fā)出請求,將服務(wù)器端的文件“抓取”到本地,然后解釋并顯示出來(lái)。瀏覽器的作用是解析得到的HTML代碼,然后將原來(lái)的網(wǎng)頁(yè)轉換成我們看到的網(wǎng)站頁(yè)面。
網(wǎng)絡(luò )爬蟲(chóng)最基本的思想是:從一個(gè)頁(yè)面開(kāi)始,分析其中的url,提取出來(lái),然后通過(guò)這些鏈接尋找下一頁(yè)。如此來(lái)回。
2. 通用爬蟲(chóng)框架
@7))。@9) 和 . 重復剛才的故事。
3. 網(wǎng)址
爬蟲(chóng)處理的主要對象是URL。簡(jiǎn)單地說(shuō),url就是輸入的URL(例如:)。在了解 URL 之前先了解 URI。
Web 上可用的每個(gè)資源,例如 HTML 文檔、圖像、視頻剪輯、程序等,都由通用資源標識符 (URI) 定位。
一個(gè)URI通常由三部分組成:
訪(fǎng)問(wèn)資源的命名機制 存儲資源的資源的主機名 資源本身的名稱(chēng),由路徑表示
比如URI:
我們可以這樣解釋?zhuān)?br /> URL 是 URI 的子集。它是Uniform Resource Locator的縮寫(xiě),翻譯為“統一資源定位器”。
通俗的講,URL是描述Internet上信息資源的字符串,主要用于各種WWW客戶(hù)端程序和服務(wù)器程序中。
使用 URL 可以使用統一的格式來(lái)描述各種信息資源,包括文件、服務(wù)器地址和目錄。
URL的格式由三部分組成:
第一部分是協(xié)議(或服務(wù)模式) 第二部分是存儲資源的主機的IP地址(有時(shí)還包括端口號) 第三部分是主機資源的具體地址,如目錄和文件名等
第一部分和第二部分用“://”符號分隔
第二部分和第三部分用“/”符號隔開(kāi)
第 1 部分和第 2 部分缺一不可,第 3 部分有時(shí)可以省略
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(抓取知乎所有用戶(hù)信息的爬蟲(chóng)代碼邏輯以及分析分析方法)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 66 次瀏覽 ? 2022-02-05 09:09
2021-11-27
今天用遞歸寫(xiě)了一個(gè)爬蟲(chóng),抓取知乎的所有用戶(hù)信息。源代碼放在github上。有興趣的同學(xué)可以下載看看。這里介紹一下代碼邏輯和分頁(yè)分析。首先,看網(wǎng)頁(yè)。,這里我隨機選擇一個(gè)大V作為入口,然后點(diǎn)擊他的關(guān)注列表,如圖
我們都知道 Python 很容易學(xué)習,但我們只是不知道如何學(xué)習它以及在哪里可以找到信息。在這里,python學(xué)習交流QQ群233539995,分享我精心準備的Python學(xué)習資料,0基礎到高級!希望大家在學(xué)習Python的道路上少走彎路!來(lái)吧!
注意我的爬蟲(chóng)全名是非登錄狀態(tài)。這里的fan list和follower list是后臺ajax請求獲取的數據(沒(méi)聽(tīng)說(shuō)過(guò)ajax的不要慌,ajax請求和普通瀏覽器請求沒(méi)什么區別,主要是偷偷發(fā)給服務(wù)器的)當我們?yōu)g覽網(wǎng)頁(yè)的時(shí)候請求是為了節省流量,減少請求次數,不然每次看新數據都會(huì )刷新網(wǎng)頁(yè),服務(wù)器壓力很大,所以我們有這個(gè)東西),然后我們找到粉絲列表和關(guān)注者列表的網(wǎng)址,很簡(jiǎn)單,點(diǎn)擊chrome瀏覽器下的頁(yè)碼開(kāi)關(guān)即可找到,如圖
很容易找到關(guān)注者和粉絲的 URL。讓我們來(lái)看看這些數據。這是粉絲數據的一個(gè)例子。如圖,是一段json
這里找到了粉絲的數據,但這不是用戶(hù)的詳細信息,只是部分數據,但是他提供了一個(gè)token_url,我們可以得到這個(gè)ID訪(fǎng)問(wèn)用戶(hù)的詳細信息,我們來(lái)看看如何提取每個(gè)用戶(hù)的詳細信息。在這里樓主發(fā)現,在看粉絲或者關(guān)注列表的時(shí)候,網(wǎng)頁(yè)會(huì )自動(dòng)觸發(fā)對用戶(hù)詳細信息的請求,如圖
本次獲取用戶(hù)詳細信息查詢(xún)的URL。我們來(lái)看看這個(gè)詳細信息的URL,如圖。
上面介紹了網(wǎng)頁(yè)的基本分析。先說(shuō)一下代碼的思路。本次爬蟲(chóng)使用遞歸,本次使用scrapy進(jìn)行爬取,存儲mogodb數據庫。
首先,我用了一個(gè)大V作為爬蟲(chóng)的第一個(gè)網(wǎng)頁(yè),然后分為三個(gè)步驟。第一步是爬取大V的詳細信息,然后存入數據庫。第二步是爬大V的粉絲。第三步是爬大V的粉絲(其實(shí)就是爬粉絲或者粉絲的token_url)。完成后,利用粉絲和關(guān)注者的爬取數據,構造他們每一個(gè)詳細信息的url,然后挖掘詳細信息存入數據庫。至此,第一步遞歸完成,接下來(lái)爬蟲(chóng)會(huì )從每個(gè)粉絲和粉絲開(kāi)始,分別爬取他們粉絲和粉絲的詳細數據,繼續遞歸。
代碼中還添加了一些自動(dòng)翻頁(yè)功能,有興趣的可以看看。以下是我們項目定義中要捕獲的數據:
import scrapyclass 知乎UserItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() answer_count = scrapy.Field()
#回答數article_count = scrapy.Field()
#Written 文章 number follower_count = scrapy.Field()
#關(guān)注粉絲數_count = scrapy.Field()
#有多少人關(guān)注了educations=scrapy.Field()
#教育背景描述 = scrapy.Field()
#個(gè)人描述位置 = scrapy.Field()
#Location url_token =scrapy.Field()
#知乎給每個(gè)用戶(hù)首??頁(yè)的唯一ID name=scrapy.Field()
#用戶(hù)昵稱(chēng)員工 = scrapy.Field()
#工作信息business=scrapy.Field()
#工作或業(yè)務(wù)信息的集合 user_type =scrapy.Field()
#用戶(hù)類(lèi)型,可以是個(gè)人、群組等。headline =scrapy.Field()
#個(gè)人主頁(yè)標簽 voteup_count = scrapy.Field()
#獲得的點(diǎn)贊數Thanks_count=scrapy.Field()
#感謝次數喜愛(ài)的_count = scrapy.Field()
#采集數量 avatar_url = scrapy.Field()
#頭像網(wǎng)址
代碼總共不到 80 行。運行一分鐘后,它捕獲了知乎 1000多個(gè)用戶(hù)的信息。這是結果圖片。
最近一直在忙別的事情,終于可以天天寫(xiě)爬蟲(chóng)了。不知道大家對這篇文章有沒(méi)有什么問(wèn)題,可以隨時(shí)跟我提。
最后要提的是,爬取一定要偽裝headers,里面有一些東西是服務(wù)器每次都會(huì )檢查的。
我們都知道 Python 很容易學(xué)習,但我們只是不知道如何學(xué)習它以及在哪里可以找到信息。在這里,python學(xué)習交流QQ群233539995,分享我精心準備的Python學(xué)習資料,0基礎到高級!希望大家在學(xué)習Python的道路上少走彎路!來(lái)吧!
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章: 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(抓取知乎所有用戶(hù)信息的爬蟲(chóng)代碼邏輯以及分析分析方法)
2021-11-27
今天用遞歸寫(xiě)了一個(gè)爬蟲(chóng),抓取知乎的所有用戶(hù)信息。源代碼放在github上。有興趣的同學(xué)可以下載看看。這里介紹一下代碼邏輯和分頁(yè)分析。首先,看網(wǎng)頁(yè)。,這里我隨機選擇一個(gè)大V作為入口,然后點(diǎn)擊他的關(guān)注列表,如圖
我們都知道 Python 很容易學(xué)習,但我們只是不知道如何學(xué)習它以及在哪里可以找到信息。在這里,python學(xué)習交流QQ群233539995,分享我精心準備的Python學(xué)習資料,0基礎到高級!希望大家在學(xué)習Python的道路上少走彎路!來(lái)吧!
注意我的爬蟲(chóng)全名是非登錄狀態(tài)。這里的fan list和follower list是后臺ajax請求獲取的數據(沒(méi)聽(tīng)說(shuō)過(guò)ajax的不要慌,ajax請求和普通瀏覽器請求沒(méi)什么區別,主要是偷偷發(fā)給服務(wù)器的)當我們?yōu)g覽網(wǎng)頁(yè)的時(shí)候請求是為了節省流量,減少請求次數,不然每次看新數據都會(huì )刷新網(wǎng)頁(yè),服務(wù)器壓力很大,所以我們有這個(gè)東西),然后我們找到粉絲列表和關(guān)注者列表的網(wǎng)址,很簡(jiǎn)單,點(diǎn)擊chrome瀏覽器下的頁(yè)碼開(kāi)關(guān)即可找到,如圖
很容易找到關(guān)注者和粉絲的 URL。讓我們來(lái)看看這些數據。這是粉絲數據的一個(gè)例子。如圖,是一段json
這里找到了粉絲的數據,但這不是用戶(hù)的詳細信息,只是部分數據,但是他提供了一個(gè)token_url,我們可以得到這個(gè)ID訪(fǎng)問(wèn)用戶(hù)的詳細信息,我們來(lái)看看如何提取每個(gè)用戶(hù)的詳細信息。在這里樓主發(fā)現,在看粉絲或者關(guān)注列表的時(shí)候,網(wǎng)頁(yè)會(huì )自動(dòng)觸發(fā)對用戶(hù)詳細信息的請求,如圖
本次獲取用戶(hù)詳細信息查詢(xún)的URL。我們來(lái)看看這個(gè)詳細信息的URL,如圖。
上面介紹了網(wǎng)頁(yè)的基本分析。先說(shuō)一下代碼的思路。本次爬蟲(chóng)使用遞歸,本次使用scrapy進(jìn)行爬取,存儲mogodb數據庫。
首先,我用了一個(gè)大V作為爬蟲(chóng)的第一個(gè)網(wǎng)頁(yè),然后分為三個(gè)步驟。第一步是爬取大V的詳細信息,然后存入數據庫。第二步是爬大V的粉絲。第三步是爬大V的粉絲(其實(shí)就是爬粉絲或者粉絲的token_url)。完成后,利用粉絲和關(guān)注者的爬取數據,構造他們每一個(gè)詳細信息的url,然后挖掘詳細信息存入數據庫。至此,第一步遞歸完成,接下來(lái)爬蟲(chóng)會(huì )從每個(gè)粉絲和粉絲開(kāi)始,分別爬取他們粉絲和粉絲的詳細數據,繼續遞歸。
代碼中還添加了一些自動(dòng)翻頁(yè)功能,有興趣的可以看看。以下是我們項目定義中要捕獲的數據:
import scrapyclass 知乎UserItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() answer_count = scrapy.Field()
#回答數article_count = scrapy.Field()
#Written 文章 number follower_count = scrapy.Field()
#關(guān)注粉絲數_count = scrapy.Field()
#有多少人關(guān)注了educations=scrapy.Field()
#教育背景描述 = scrapy.Field()
#個(gè)人描述位置 = scrapy.Field()
#Location url_token =scrapy.Field()
#知乎給每個(gè)用戶(hù)首??頁(yè)的唯一ID name=scrapy.Field()
#用戶(hù)昵稱(chēng)員工 = scrapy.Field()
#工作信息business=scrapy.Field()
#工作或業(yè)務(wù)信息的集合 user_type =scrapy.Field()
#用戶(hù)類(lèi)型,可以是個(gè)人、群組等。headline =scrapy.Field()
#個(gè)人主頁(yè)標簽 voteup_count = scrapy.Field()
#獲得的點(diǎn)贊數Thanks_count=scrapy.Field()
#感謝次數喜愛(ài)的_count = scrapy.Field()
#采集數量 avatar_url = scrapy.Field()
#頭像網(wǎng)址
代碼總共不到 80 行。運行一分鐘后,它捕獲了知乎 1000多個(gè)用戶(hù)的信息。這是結果圖片。
最近一直在忙別的事情,終于可以天天寫(xiě)爬蟲(chóng)了。不知道大家對這篇文章有沒(méi)有什么問(wèn)題,可以隨時(shí)跟我提。
最后要提的是,爬取一定要偽裝headers,里面有一些東西是服務(wù)器每次都會(huì )檢查的。
我們都知道 Python 很容易學(xué)習,但我們只是不知道如何學(xué)習它以及在哪里可以找到信息。在這里,python學(xué)習交流QQ群233539995,分享我精心準備的Python學(xué)習資料,0基礎到高級!希望大家在學(xué)習Python的道路上少走彎路!來(lái)吧!
分類(lèi):
技術(shù)要點(diǎn):
相關(guān)文章:
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(關(guān)于爬蟲(chóng)的知識后,你了解多少?(一) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 59 次瀏覽 ? 2022-02-05 00:04
)
如今,大前端理念已經(jīng)深入人心,需要涉及的知識很多。所以,對于現在的前端來(lái)說(shuō),也是不可抗拒的。在修煉吸星大法時(shí),盡可能多地吸收知識,最終達到物盡其用的效果。
最近也在學(xué)習爬蟲(chóng),因為之前項目中需要用到的地鐵信息數據不是爬蟲(chóng)爬下來(lái)的數據,而是直接復制過(guò)來(lái)的。
雖然這些數據暫時(shí)不會(huì )有太大變化,但感覺(jué)還是有點(diǎn)低。所以在了解了爬蟲(chóng)之后,打算和大家討論交流,然后直接進(jìn)入正題。
首先說(shuō)一下爬蟲(chóng)和Robots協(xié)議是什么
然后介紹爬蟲(chóng)的基本流程
最后根據實(shí)際栗子爬個(gè)豆瓣最近上映的電影來(lái)試試小刀
2、爬蟲(chóng)和機器人協(xié)議
首先看定義:爬蟲(chóng)是自動(dòng)獲取網(wǎng)頁(yè)內容的程序。它是搜索引擎的重要組成部分,因此搜索引擎優(yōu)化主要針對爬蟲(chóng)進(jìn)行優(yōu)化。
下面我們來(lái)看看Robots協(xié)議的介紹。robots.txt 是文本文件,robots.txt 是協(xié)議,而不是命令。
robots.txt 是爬蟲(chóng)要查看的第一個(gè)文件。robots.txt 告訴爬蟲(chóng)可以在服務(wù)器上查看哪些文件。爬蟲(chóng)機器人會(huì )根據文件內容確定訪(fǎng)問(wèn)范圍。
下圖是豆瓣電影頁(yè)面列出的robots協(xié)議的訪(fǎng)問(wèn)范圍。
爬蟲(chóng)和機器人協(xié)議密切相關(guān)。如果您看到不允許抓取的頁(yè)面,請不要抓取它們。萬(wàn)一涉及到用戶(hù)隱私的某些方面,稍后會(huì )被發(fā)現并帶到合法渠道。
因此,業(yè)內每個(gè)人都認可這個(gè) Robots 協(xié)議。不想爬網(wǎng)頁(yè)就別爬了,上網(wǎng)就可以安寧了。
有點(diǎn)跑題了,我們看下面一張圖,簡(jiǎn)單梳理一下上面提到的內容。
其實(shí)有人會(huì )問(wèn),爬行動(dòng)物到底在爬什么?
這是一個(gè)非常有見(jiàn)地的問(wèn)題。說(shuō)白了就是爬蟲(chóng)拿到的那段html代碼,所以這對我們來(lái)說(shuō)并不陌生,只要我們把它轉換成DOM樹(shù)就行了。
所以,現在看上圖的右半部分,是一張對比圖。
左邊的那個(gè)沒(méi)有受限的機器人協(xié)議。從邏輯上講,admin/private和tmp這三個(gè)文件夾是不能被抓到的,但是因為沒(méi)有Robots協(xié)議,人就可以肆無(wú)忌憚的爬了。
從右側看,Robots 協(xié)議是有限的。相反,像谷歌這樣的搜索引擎,也是通過(guò) Robots.txt 文件來(lái)查看哪些是抓不到的,然后去 admin 或者 private 的時(shí)候直接跳過(guò)。去搶吧。
好了,介紹到此為止。凡是不包括真刀真槍的,都只是紙上談兵。
3、爬蟲(chóng)基本流程
其實(shí)對于爬蟲(chóng)的使用來(lái)說(shuō),過(guò)程無(wú)非就是這四個(gè)步驟。
專(zhuān)用數據
數據存儲
啟動(dòng)服務(wù)
渲染數據
專(zhuān)用數據
現在到了激動(dòng)人心的部分,不要停下來(lái),跟著(zhù)我,敲出一頁(yè)爬豆瓣電影,供自己欣賞。
我們先來(lái)看看整體的目錄結構。
既然是抓數據,就得用業(yè)界知名的神器——request
請求工件
那么如何使用request,我們一起聽(tīng)風(fēng)看代碼
// 使用起來(lái)超簡(jiǎn)單let request = require('request');
request('http://www.baidu.com', function (error, response, body) { console.log('error:', error); // 當有錯誤發(fā)生時(shí)打印錯誤日志 console.log('statusCode:', response && response.statusCode); // 打印響應狀態(tài)碼 console.log('body:', body); // 打印百度頁(yè)面的html代碼});
看了上面的代碼,是不是還覺(jué)得不明顯。小伙伴們,html代碼已經(jīng)出現在你們面前了,不要猶豫,只要把它變成熟悉的DOM,就可以為所欲為。
于是,cheerio 出道,大家都稱(chēng)它為 Node 版的 jq。你可以完全按照jq的習慣來(lái)操作DOM。
下面不再走彎路,一起來(lái)寫(xiě)爬蟲(chóng)吧!
閱讀內容
首頁(yè)應該先分析豆瓣電影的頁(yè)面,也就是熱映的電影,我們先來(lái)看看DOM結構。
好了,讀完噻吩后,我們需要的內容也標注出來(lái)了,然后進(jìn)入read.js文件,一步步開(kāi)始舔。
// read.js文件
// request-promise是讓request支持了promise的語(yǔ)法,可以說(shuō)是request的小弟const rp = require('request-promise');// 將抓取頁(yè)面的html代碼轉為DOM,可以稱(chēng)之為是node版的jqconst cheerio = require('cheerio');// 這個(gè)是為了在調試時(shí)查看日志const debug = require('debug')('movie:read');
// 讀取頁(yè)面的方法,重點(diǎn)來(lái)了const read = async (url) => { debug('開(kāi)始讀取最近上映的電影');
const opts = { url, // 目標頁(yè)面 transform: body => { // body為目標頁(yè)面抓取到的html代碼 // 通過(guò)cheerio.load方法可以把html代碼轉換成可以操作的DOM結構 return cheerio.load(body); } };
return rp(opts).then($ => { let result = []; // 結果數組 // 遍歷這些熱映電影的li $('#screening li.ui-slide-item').each((index, item) => { let ele = $(item); let name = ele.data('title'); let score = ele.data('rate') || '暫無(wú)評分'; let href = ele.find('.poster a').attr('href'); let image = ele.find('img').attr('src'); // 影片id可以從影片href中獲取到 let id = href && href.match(/(\d+)/)[1]; // 為了防止豆瓣防盜鏈導致裂圖,換成webp格式加載圖片 image = image && image.replace(/jpg$/, 'webp');
if (!name || !image || !href) { return; }
result.push({ name, score, href, image, id }); debug(`正在讀取電影:${name}`); }); // 返回結果數組 return result; });};// 導出方法module.exports = read;
寫(xiě)完代碼,讓我們回憶一下你做了什么。
4、數據存儲
這里我們使用mysql建一個(gè)數據庫來(lái)存儲數據,不懂的沒(méi)關(guān)系,我先一步一步來(lái)。我們首先安裝 XAMPP 和 Navicat 可視化數據庫管理工具,安裝完成后,按照下面的說(shuō)明進(jìn)行操作。
XAMPP啟動(dòng)mysql
Navicat 連接數據庫并創(chuàng )建表
幾句話(huà)可能不像有圖有真相那么真實(shí)。我們先來(lái)看看圖片。
嗯,看圖的時(shí)代到此結束。我真的很慚愧消耗了大量的流量?,F在讓我們回到編碼階段。
連接到數據庫
首先,我們需要在 src 目錄下創(chuàng )建一個(gè) sql 文件。它需要和我們剛剛創(chuàng )建的數據庫同名,所以我們稱(chēng)之為my_movie.sql(當然目錄結構已經(jīng)創(chuàng )建好了)
然后,回到 db.js 文件,編寫(xiě)連接數據庫的代碼
// db.js
const mysql = require('mysql');const bluebird = require('bluebird');
// 創(chuàng )建連接const connection = mysql.createConnection({ host: 'localhost', // host port: 3306, // 端口號默認3306 database: 'my_movie', // 對應的數據庫 user: 'root', password: ''});
connection.connect(); // 連接數據庫
// bluebird是為了方便支持promise語(yǔ)法化// 然后直接把數據庫的query查詢(xún)語(yǔ)句導出方便之后調用module.exports = bluebird.promisify(connection.query).bind(connection);
上面的代碼已經(jīng)創(chuàng )建了連接Mysql數據庫的操作。接下來(lái),不要放慢速度,將內容直接寫(xiě)入數據庫。
寫(xiě)入數據庫
這時(shí)候我們來(lái)看看write.js這個(gè)文件。是的,顧名思義,就是用來(lái)寫(xiě)數據庫的,直接上代碼
// write.js文件
// 從db.js那里導入query方法const query = require('./db');const debug = require('debug')('movie:write');// 寫(xiě)入數據庫的方法const write = async (movies) => { debug('開(kāi)始寫(xiě)入電影');
// movies即為read.js讀取出來(lái)的結果數組 for (let movie of movies) { // 通過(guò)query方法去查詢(xún)一下是不是已經(jīng)在數據庫里存過(guò)了 let oldMovie = await query('SELECT * FROM movies WHERE id=? LIMIT 1', [movie.id]);
// sql查詢(xún)語(yǔ)句返回的是一個(gè)數組,如果不為空數組的話(huà)就表示有數據存過(guò) // 直接就進(jìn)行更新操作了 if (Array.isArray(oldMovie) && oldMovie.length) { // 更新movies表里的數據 let old = oldMovie[0]; await query('UPDATE movies SET name=?,href=?,image=?,score=? WHERE id=?', [movie.name, movie.href, movie.image, movie.score, old.id]); } else { // 插入內容到movies表 await query('INSERT INTO movies(id,name,href,image,score) VALUES(?,?,?,?,?)', [movie.id, movie.name, movie.href, movie.image, movie.score]); }
debug(`正在寫(xiě)入電影:${movie.name}`); }};
module.exports = write;
上面寫(xiě)的可能有點(diǎn)混亂,畢竟純前端很少寫(xiě)SQL語(yǔ)句。不過(guò)不要害羞,我先把上面的代碼整理好之后再簡(jiǎn)單介紹一下SQL語(yǔ)句部分。
write.js 到底寫(xiě)了什么?
好了,上面也實(shí)現了寫(xiě)入數據庫的方法。接下來(lái),趁熱打鐵,稍微聊聊SQL語(yǔ)句。
SQL語(yǔ)句學(xué)習
? 表示占位符。順便說(shuō)一下,我將簡(jiǎn)要介紹將在 SQL 語(yǔ)句中使用的語(yǔ)法,以及無(wú)處不在的增刪改查。
插入數據
語(yǔ)法: INSERT INTO 表名(列名) VALUES(列名值)栗子: INSERT INTO tags(name,id,url) VALUES('爬蟲(chóng)',10,'https://news.so.com/hotnews')解釋?zhuān)? 向標簽表(tags)里插入一條,姓名,id和訪(fǎng)問(wèn)地址分別為VALUES內對應的值
更新數據
語(yǔ)法: UPDATE 表名 SET 列名=更新值 WHERE 更新條件栗子: UPDATE articles SET title='你好,世界',content='世界沒(méi)你想的那么糟!' WHERE id=1解釋?zhuān)? 更新id為1的文章,標題和內容都進(jìn)行了修改
刪除數據
語(yǔ)法: DELETE FROM 表名 WHERE 刪除條件栗子: DELETE FROM tags WHERE id=11解釋?zhuān)? 從標簽表(tags)里刪除id為11的數據
查詢(xún)
語(yǔ)法: SELECT 列名 FROM 表名 WHERE 查詢(xún)條件 ORDER BY 排序列名栗子: SELECT name,title,content FROM tags WHERE id=8解釋?zhuān)? 查詢(xún)id為8的標簽表里對應信息
至此,我已經(jīng)把所有的讀寫(xiě)方法都寫(xiě)完了,所以大家一定是有點(diǎn)累了。是時(shí)候測試結果了,否則都是廢話(huà)
5、執行讀寫(xiě)操作
現在來(lái)到 index.js 并開(kāi)始檢查它。
// index.js文件
const read = require('./read');const write = require('./write');const url = 'https://movie.douban.com'; // 目標頁(yè)面
(async () => { // 異步抓取目標頁(yè)面 const movies = await read(url); // 寫(xiě)入數據到數據庫 await write(movies); // 完畢后退出程序 process.exit();})();
完了,執行一下看看效果如何,直接上圖
代碼已執行。接下來(lái)回到Navicat,看看數據是否已經(jīng)寫(xiě)入。我們用圖片來(lái)說(shuō)話(huà)。
至此,我們已經(jīng)完成了數據采集和存儲操作,但似乎還缺少什么?
也就是我們需要寫(xiě)一個(gè)頁(yè)面來(lái)展示它,因為爬取和寫(xiě)數據只允許在node環(huán)境下進(jìn)行。所以我們還要創(chuàng )建一個(gè)web服務(wù)來(lái)顯示頁(yè)面,堅持下去很快就OK了,加油。
6、啟動(dòng)服務(wù)
既然我們要創(chuàng )建一個(gè) web 服務(wù),讓我們開(kāi)始編寫(xiě) server.js 的內容
服務(wù)器服務(wù)
// server.js文件
const express = require('express');const path = require('path');const query = require('../src/db');const app = express();
// 設置模板引擎app.set('view engine', 'html');app.set('views', path.join(__dirname, 'views'));app.engine('html', require('ejs').__express);
// 首頁(yè)路由app.get('/', async (req, res) => { // 通過(guò)SQL查詢(xún)語(yǔ)句拿到庫里的movies表數據 const movies = await query('SELECT * FROM movies'); // 渲染首頁(yè)模板并把movies數據傳過(guò)去 res.render('index', { movies });});// 監聽(tīng)localhost:9000端口app.listen(9000);
寫(xiě)完服務(wù)端服務(wù),我們再來(lái)看看 index.html 模板。這是最后一件事。寫(xiě)完,就大功告成了。
7、渲染數據
// index.html
熱映的電影 正在熱映的電影 %=movie.image% <p class="score">評分: </a>
</p>
通過(guò)模板引擎遍歷movies數組,然后渲染
現在,看看最終效果
和你一起來(lái)到這里是緣分。我很高興經(jīng)歷了這么長(cháng)時(shí)間的文章 學(xué)習。每個(gè)人都應該對爬行動(dòng)物的知識有一個(gè)很好的了解。
對了,這里是代碼地址:爬蟲(chóng)研究/電影
為了您的方便,敲敲敲。
感謝閱讀,886。
查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(關(guān)于爬蟲(chóng)的知識后,你了解多少?(一)
)
如今,大前端理念已經(jīng)深入人心,需要涉及的知識很多。所以,對于現在的前端來(lái)說(shuō),也是不可抗拒的。在修煉吸星大法時(shí),盡可能多地吸收知識,最終達到物盡其用的效果。
最近也在學(xué)習爬蟲(chóng),因為之前項目中需要用到的地鐵信息數據不是爬蟲(chóng)爬下來(lái)的數據,而是直接復制過(guò)來(lái)的。
雖然這些數據暫時(shí)不會(huì )有太大變化,但感覺(jué)還是有點(diǎn)低。所以在了解了爬蟲(chóng)之后,打算和大家討論交流,然后直接進(jìn)入正題。
首先說(shuō)一下爬蟲(chóng)和Robots協(xié)議是什么
然后介紹爬蟲(chóng)的基本流程
最后根據實(shí)際栗子爬個(gè)豆瓣最近上映的電影來(lái)試試小刀
2、爬蟲(chóng)和機器人協(xié)議
首先看定義:爬蟲(chóng)是自動(dòng)獲取網(wǎng)頁(yè)內容的程序。它是搜索引擎的重要組成部分,因此搜索引擎優(yōu)化主要針對爬蟲(chóng)進(jìn)行優(yōu)化。
下面我們來(lái)看看Robots協(xié)議的介紹。robots.txt 是文本文件,robots.txt 是協(xié)議,而不是命令。
robots.txt 是爬蟲(chóng)要查看的第一個(gè)文件。robots.txt 告訴爬蟲(chóng)可以在服務(wù)器上查看哪些文件。爬蟲(chóng)機器人會(huì )根據文件內容確定訪(fǎng)問(wèn)范圍。
下圖是豆瓣電影頁(yè)面列出的robots協(xié)議的訪(fǎng)問(wèn)范圍。
爬蟲(chóng)和機器人協(xié)議密切相關(guān)。如果您看到不允許抓取的頁(yè)面,請不要抓取它們。萬(wàn)一涉及到用戶(hù)隱私的某些方面,稍后會(huì )被發(fā)現并帶到合法渠道。
因此,業(yè)內每個(gè)人都認可這個(gè) Robots 協(xié)議。不想爬網(wǎng)頁(yè)就別爬了,上網(wǎng)就可以安寧了。
有點(diǎn)跑題了,我們看下面一張圖,簡(jiǎn)單梳理一下上面提到的內容。
其實(shí)有人會(huì )問(wèn),爬行動(dòng)物到底在爬什么?
這是一個(gè)非常有見(jiàn)地的問(wèn)題。說(shuō)白了就是爬蟲(chóng)拿到的那段html代碼,所以這對我們來(lái)說(shuō)并不陌生,只要我們把它轉換成DOM樹(shù)就行了。
所以,現在看上圖的右半部分,是一張對比圖。
左邊的那個(gè)沒(méi)有受限的機器人協(xié)議。從邏輯上講,admin/private和tmp這三個(gè)文件夾是不能被抓到的,但是因為沒(méi)有Robots協(xié)議,人就可以肆無(wú)忌憚的爬了。
從右側看,Robots 協(xié)議是有限的。相反,像谷歌這樣的搜索引擎,也是通過(guò) Robots.txt 文件來(lái)查看哪些是抓不到的,然后去 admin 或者 private 的時(shí)候直接跳過(guò)。去搶吧。
好了,介紹到此為止。凡是不包括真刀真槍的,都只是紙上談兵。
3、爬蟲(chóng)基本流程
其實(shí)對于爬蟲(chóng)的使用來(lái)說(shuō),過(guò)程無(wú)非就是這四個(gè)步驟。
專(zhuān)用數據
數據存儲
啟動(dòng)服務(wù)
渲染數據
專(zhuān)用數據
現在到了激動(dòng)人心的部分,不要停下來(lái),跟著(zhù)我,敲出一頁(yè)爬豆瓣電影,供自己欣賞。
我們先來(lái)看看整體的目錄結構。
既然是抓數據,就得用業(yè)界知名的神器——request
請求工件
那么如何使用request,我們一起聽(tīng)風(fēng)看代碼
// 使用起來(lái)超簡(jiǎn)單let request = require('request');
request('http://www.baidu.com', function (error, response, body) { console.log('error:', error); // 當有錯誤發(fā)生時(shí)打印錯誤日志 console.log('statusCode:', response && response.statusCode); // 打印響應狀態(tài)碼 console.log('body:', body); // 打印百度頁(yè)面的html代碼});
看了上面的代碼,是不是還覺(jué)得不明顯。小伙伴們,html代碼已經(jīng)出現在你們面前了,不要猶豫,只要把它變成熟悉的DOM,就可以為所欲為。
于是,cheerio 出道,大家都稱(chēng)它為 Node 版的 jq。你可以完全按照jq的習慣來(lái)操作DOM。
下面不再走彎路,一起來(lái)寫(xiě)爬蟲(chóng)吧!
閱讀內容
首頁(yè)應該先分析豆瓣電影的頁(yè)面,也就是熱映的電影,我們先來(lái)看看DOM結構。
好了,讀完噻吩后,我們需要的內容也標注出來(lái)了,然后進(jìn)入read.js文件,一步步開(kāi)始舔。
// read.js文件
// request-promise是讓request支持了promise的語(yǔ)法,可以說(shuō)是request的小弟const rp = require('request-promise');// 將抓取頁(yè)面的html代碼轉為DOM,可以稱(chēng)之為是node版的jqconst cheerio = require('cheerio');// 這個(gè)是為了在調試時(shí)查看日志const debug = require('debug')('movie:read');
// 讀取頁(yè)面的方法,重點(diǎn)來(lái)了const read = async (url) => { debug('開(kāi)始讀取最近上映的電影');
const opts = { url, // 目標頁(yè)面 transform: body => { // body為目標頁(yè)面抓取到的html代碼 // 通過(guò)cheerio.load方法可以把html代碼轉換成可以操作的DOM結構 return cheerio.load(body); } };
return rp(opts).then($ => { let result = []; // 結果數組 // 遍歷這些熱映電影的li $('#screening li.ui-slide-item').each((index, item) => { let ele = $(item); let name = ele.data('title'); let score = ele.data('rate') || '暫無(wú)評分'; let href = ele.find('.poster a').attr('href'); let image = ele.find('img').attr('src'); // 影片id可以從影片href中獲取到 let id = href && href.match(/(\d+)/)[1]; // 為了防止豆瓣防盜鏈導致裂圖,換成webp格式加載圖片 image = image && image.replace(/jpg$/, 'webp');
if (!name || !image || !href) { return; }
result.push({ name, score, href, image, id }); debug(`正在讀取電影:${name}`); }); // 返回結果數組 return result; });};// 導出方法module.exports = read;
寫(xiě)完代碼,讓我們回憶一下你做了什么。
4、數據存儲
這里我們使用mysql建一個(gè)數據庫來(lái)存儲數據,不懂的沒(méi)關(guān)系,我先一步一步來(lái)。我們首先安裝 XAMPP 和 Navicat 可視化數據庫管理工具,安裝完成后,按照下面的說(shuō)明進(jìn)行操作。
XAMPP啟動(dòng)mysql
Navicat 連接數據庫并創(chuàng )建表
幾句話(huà)可能不像有圖有真相那么真實(shí)。我們先來(lái)看看圖片。
嗯,看圖的時(shí)代到此結束。我真的很慚愧消耗了大量的流量?,F在讓我們回到編碼階段。
連接到數據庫
首先,我們需要在 src 目錄下創(chuàng )建一個(gè) sql 文件。它需要和我們剛剛創(chuàng )建的數據庫同名,所以我們稱(chēng)之為my_movie.sql(當然目錄結構已經(jīng)創(chuàng )建好了)
然后,回到 db.js 文件,編寫(xiě)連接數據庫的代碼
// db.js
const mysql = require('mysql');const bluebird = require('bluebird');
// 創(chuàng )建連接const connection = mysql.createConnection({ host: 'localhost', // host port: 3306, // 端口號默認3306 database: 'my_movie', // 對應的數據庫 user: 'root', password: ''});
connection.connect(); // 連接數據庫
// bluebird是為了方便支持promise語(yǔ)法化// 然后直接把數據庫的query查詢(xún)語(yǔ)句導出方便之后調用module.exports = bluebird.promisify(connection.query).bind(connection);
上面的代碼已經(jīng)創(chuàng )建了連接Mysql數據庫的操作。接下來(lái),不要放慢速度,將內容直接寫(xiě)入數據庫。
寫(xiě)入數據庫
這時(shí)候我們來(lái)看看write.js這個(gè)文件。是的,顧名思義,就是用來(lái)寫(xiě)數據庫的,直接上代碼
// write.js文件
// 從db.js那里導入query方法const query = require('./db');const debug = require('debug')('movie:write');// 寫(xiě)入數據庫的方法const write = async (movies) => { debug('開(kāi)始寫(xiě)入電影');
// movies即為read.js讀取出來(lái)的結果數組 for (let movie of movies) { // 通過(guò)query方法去查詢(xún)一下是不是已經(jīng)在數據庫里存過(guò)了 let oldMovie = await query('SELECT * FROM movies WHERE id=? LIMIT 1', [movie.id]);
// sql查詢(xún)語(yǔ)句返回的是一個(gè)數組,如果不為空數組的話(huà)就表示有數據存過(guò) // 直接就進(jìn)行更新操作了 if (Array.isArray(oldMovie) && oldMovie.length) { // 更新movies表里的數據 let old = oldMovie[0]; await query('UPDATE movies SET name=?,href=?,image=?,score=? WHERE id=?', [movie.name, movie.href, movie.image, movie.score, old.id]); } else { // 插入內容到movies表 await query('INSERT INTO movies(id,name,href,image,score) VALUES(?,?,?,?,?)', [movie.id, movie.name, movie.href, movie.image, movie.score]); }
debug(`正在寫(xiě)入電影:${movie.name}`); }};
module.exports = write;
上面寫(xiě)的可能有點(diǎn)混亂,畢竟純前端很少寫(xiě)SQL語(yǔ)句。不過(guò)不要害羞,我先把上面的代碼整理好之后再簡(jiǎn)單介紹一下SQL語(yǔ)句部分。
write.js 到底寫(xiě)了什么?
好了,上面也實(shí)現了寫(xiě)入數據庫的方法。接下來(lái),趁熱打鐵,稍微聊聊SQL語(yǔ)句。
SQL語(yǔ)句學(xué)習
? 表示占位符。順便說(shuō)一下,我將簡(jiǎn)要介紹將在 SQL 語(yǔ)句中使用的語(yǔ)法,以及無(wú)處不在的增刪改查。
插入數據
語(yǔ)法: INSERT INTO 表名(列名) VALUES(列名值)栗子: INSERT INTO tags(name,id,url) VALUES('爬蟲(chóng)',10,'https://news.so.com/hotnews')解釋?zhuān)? 向標簽表(tags)里插入一條,姓名,id和訪(fǎng)問(wèn)地址分別為VALUES內對應的值
更新數據
語(yǔ)法: UPDATE 表名 SET 列名=更新值 WHERE 更新條件栗子: UPDATE articles SET title='你好,世界',content='世界沒(méi)你想的那么糟!' WHERE id=1解釋?zhuān)? 更新id為1的文章,標題和內容都進(jìn)行了修改
刪除數據
語(yǔ)法: DELETE FROM 表名 WHERE 刪除條件栗子: DELETE FROM tags WHERE id=11解釋?zhuān)? 從標簽表(tags)里刪除id為11的數據
查詢(xún)
語(yǔ)法: SELECT 列名 FROM 表名 WHERE 查詢(xún)條件 ORDER BY 排序列名栗子: SELECT name,title,content FROM tags WHERE id=8解釋?zhuān)? 查詢(xún)id為8的標簽表里對應信息
至此,我已經(jīng)把所有的讀寫(xiě)方法都寫(xiě)完了,所以大家一定是有點(diǎn)累了。是時(shí)候測試結果了,否則都是廢話(huà)
5、執行讀寫(xiě)操作
現在來(lái)到 index.js 并開(kāi)始檢查它。
// index.js文件
const read = require('./read');const write = require('./write');const url = 'https://movie.douban.com'; // 目標頁(yè)面
(async () => { // 異步抓取目標頁(yè)面 const movies = await read(url); // 寫(xiě)入數據到數據庫 await write(movies); // 完畢后退出程序 process.exit();})();
完了,執行一下看看效果如何,直接上圖
代碼已執行。接下來(lái)回到Navicat,看看數據是否已經(jīng)寫(xiě)入。我們用圖片來(lái)說(shuō)話(huà)。
至此,我們已經(jīng)完成了數據采集和存儲操作,但似乎還缺少什么?
也就是我們需要寫(xiě)一個(gè)頁(yè)面來(lái)展示它,因為爬取和寫(xiě)數據只允許在node環(huán)境下進(jìn)行。所以我們還要創(chuàng )建一個(gè)web服務(wù)來(lái)顯示頁(yè)面,堅持下去很快就OK了,加油。
6、啟動(dòng)服務(wù)
既然我們要創(chuàng )建一個(gè) web 服務(wù),讓我們開(kāi)始編寫(xiě) server.js 的內容
服務(wù)器服務(wù)
// server.js文件
const express = require('express');const path = require('path');const query = require('../src/db');const app = express();
// 設置模板引擎app.set('view engine', 'html');app.set('views', path.join(__dirname, 'views'));app.engine('html', require('ejs').__express);
// 首頁(yè)路由app.get('/', async (req, res) => { // 通過(guò)SQL查詢(xún)語(yǔ)句拿到庫里的movies表數據 const movies = await query('SELECT * FROM movies'); // 渲染首頁(yè)模板并把movies數據傳過(guò)去 res.render('index', { movies });});// 監聽(tīng)localhost:9000端口app.listen(9000);
寫(xiě)完服務(wù)端服務(wù),我們再來(lái)看看 index.html 模板。這是最后一件事。寫(xiě)完,就大功告成了。
7、渲染數據
// index.html
熱映的電影 正在熱映的電影 %=movie.image% <p class="score">評分: </a>
</p>
通過(guò)模板引擎遍歷movies數組,然后渲染
現在,看看最終效果
和你一起來(lái)到這里是緣分。我很高興經(jīng)歷了這么長(cháng)時(shí)間的文章 學(xué)習。每個(gè)人都應該對爬行動(dòng)物的知識有一個(gè)很好的了解。
對了,這里是代碼地址:爬蟲(chóng)研究/電影
為了您的方便,敲敲敲。
感謝閱讀,886。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件如何用c#實(shí)現網(wǎng)站數據的抓???)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2022-02-04 18:34
優(yōu)采云云端采集網(wǎng)絡(luò )爬蟲(chóng)軟件如何使用c#實(shí)現網(wǎng)站數據抓???如何使用c#實(shí)現網(wǎng)站數據抓???首先需要明確:網(wǎng)站的任何頁(yè)面,無(wú)論是php、jsp、aspx等動(dòng)態(tài)頁(yè)面還是后臺程序生成的靜態(tài)頁(yè)面,都可以在瀏覽器。所以當你想開(kāi)發(fā)一個(gè)data采集程序時(shí),你首先要了解你要采集的網(wǎng)站的首頁(yè)結構(HTML)。一旦您熟悉了 網(wǎng)站 中您想要 采集 數據的 HTML 源文件的內容,程序的其余部分就很容易了。因為C#對網(wǎng)站數據采集的原理是“把你要的頁(yè)面的HTML文件下載到采集,
這樣,整個(gè)采集的工作就會(huì )在一個(gè)段落中完成。先說(shuō)怎么抓取吧:1、抓取通用內容需要三個(gè)類(lèi):WebRequest、WebResponse、StreamReader 需要的命名空間:System.Net、System.IO 核心代碼:WebRequest 創(chuàng )建是靜態(tài)方法,參數是待抓取網(wǎng)頁(yè)的網(wǎng)址;編碼指定編碼。Encoding中有ASCII、UTF32、UTF8等全局編碼,但是沒(méi)有g(shù)b2312的encoding屬性,所以我們使用GetEncoding來(lái)獲取gb2312編碼。優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件2、抓取圖片或其他二進(jìn)制文件(如文件) 需要四個(gè)類(lèi):WebRequest、WebResponse、Stream、FileStream 需要的命名空間:System .Net、System .IO核心代碼:使用Stream讀取3、 抓取網(wǎng)頁(yè)內容POST方法抓取網(wǎng)頁(yè)時(shí),有時(shí)需要通過(guò)Post向服務(wù)器發(fā)送一些數據,在網(wǎng)頁(yè)抓取程序中添加如下代碼,實(shí)現向服務(wù)器發(fā)送用戶(hù)名和密碼:優(yōu)采云Cloud采集Web爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向 抓取網(wǎng)頁(yè)時(shí),成功登錄服務(wù)器應用系統后,應用系統可能會(huì )重定向網(wǎng)頁(yè)通過(guò) Response.Redirect。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。實(shí)現post用戶(hù)名和密碼到服務(wù)器:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向抓取網(wǎng)頁(yè)時(shí),登錄成功后在服務(wù)器應用系統中,應用系統可以通過(guò)Response.Redirect重定向網(wǎng)頁(yè)。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。實(shí)現post用戶(hù)名和密碼到服務(wù)器:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向抓取網(wǎng)頁(yè)時(shí),登錄成功后在服務(wù)器應用系統中,應用系統可以通過(guò)Response.Redirect重定向網(wǎng)頁(yè)。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。
5、ASP.NET爬取網(wǎng)頁(yè)內容-維護登錄狀態(tài)使用Post數據成功登錄服務(wù)器應用系統后,需要登錄的頁(yè)面就可以獲取到了,那么我們可能需要維護登錄多個(gè)請求之間的狀態(tài)。優(yōu)采云云采集Web爬蟲(chóng)軟件首先,我們需要使用HttpWebRequest,而不是WebRequest。與WebRequest相比,改代碼為: 注意:HttpWebRequest.Create返回的類(lèi)型還是WebRequest,所以需要進(jìn)行轉換。二、使用CookieContainer。這樣,requests和request2之間就使用了同一個(gè)Session。如果請求已登錄,則 request2 也處于已登錄狀態(tài)。最后,如何在不同頁(yè)面之間使用同一個(gè)CookieContainer。要在不同頁(yè)面之間使用相同的 CookieContainer,只將 CookieContainer 添加到 Session。優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以是用戶(hù)登錄時(shí)需要分析瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 @采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以需要分析瀏覽器的方向用戶(hù)登錄。服務(wù)器發(fā)送的 POST 請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 @采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以需要分析瀏覽器的方向用戶(hù)登錄。服務(wù)器發(fā)送的 POST 請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 需要登錄,因為需要登錄的是網(wǎng)站,所以需要分析用戶(hù)登錄時(shí)瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 需要登錄,因為需要登錄的是網(wǎng)站,所以需要分析用戶(hù)登錄時(shí)瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集
1、簡(jiǎn)單易用,任何人都可以使用:無(wú)需技術(shù)背景,只需了解互聯(lián)網(wǎng)采集。全程可視化流程,點(diǎn)擊鼠標完成操作,2分鐘快速上手。2、功能強大,任何網(wǎng)站都可以使用:點(diǎn)擊、登錄、翻頁(yè)、識別驗證碼、瀑布流、Ajax腳本異步加載數據網(wǎng)頁(yè),都可以通過(guò)簡(jiǎn)單的設置進(jìn)行采集。3、在采集 中,也可以關(guān)閉。配置好采集任務(wù)后,可以關(guān)機,側邊執行任務(wù)。龐大的采集集群24*7不間斷運行,不用擔心IP被封或者網(wǎng)絡(luò )中斷。4、功能免費+增值服務(wù),可以按需選擇。免費版具有滿(mǎn)足用戶(hù)基本采集需求的所有功能。同時(shí),設置一些增值服務(wù)(如私有制),以滿(mǎn)足高端付費企業(yè)用戶(hù)的需求。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件如何用c#實(shí)現網(wǎng)站數據的抓???)
優(yōu)采云云端采集網(wǎng)絡(luò )爬蟲(chóng)軟件如何使用c#實(shí)現網(wǎng)站數據抓???如何使用c#實(shí)現網(wǎng)站數據抓???首先需要明確:網(wǎng)站的任何頁(yè)面,無(wú)論是php、jsp、aspx等動(dòng)態(tài)頁(yè)面還是后臺程序生成的靜態(tài)頁(yè)面,都可以在瀏覽器。所以當你想開(kāi)發(fā)一個(gè)data采集程序時(shí),你首先要了解你要采集的網(wǎng)站的首頁(yè)結構(HTML)。一旦您熟悉了 網(wǎng)站 中您想要 采集 數據的 HTML 源文件的內容,程序的其余部分就很容易了。因為C#對網(wǎng)站數據采集的原理是“把你要的頁(yè)面的HTML文件下載到采集,
這樣,整個(gè)采集的工作就會(huì )在一個(gè)段落中完成。先說(shuō)怎么抓取吧:1、抓取通用內容需要三個(gè)類(lèi):WebRequest、WebResponse、StreamReader 需要的命名空間:System.Net、System.IO 核心代碼:WebRequest 創(chuàng )建是靜態(tài)方法,參數是待抓取網(wǎng)頁(yè)的網(wǎng)址;編碼指定編碼。Encoding中有ASCII、UTF32、UTF8等全局編碼,但是沒(méi)有g(shù)b2312的encoding屬性,所以我們使用GetEncoding來(lái)獲取gb2312編碼。優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件2、抓取圖片或其他二進(jìn)制文件(如文件) 需要四個(gè)類(lèi):WebRequest、WebResponse、Stream、FileStream 需要的命名空間:System .Net、System .IO核心代碼:使用Stream讀取3、 抓取網(wǎng)頁(yè)內容POST方法抓取網(wǎng)頁(yè)時(shí),有時(shí)需要通過(guò)Post向服務(wù)器發(fā)送一些數據,在網(wǎng)頁(yè)抓取程序中添加如下代碼,實(shí)現向服務(wù)器發(fā)送用戶(hù)名和密碼:優(yōu)采云Cloud采集Web爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向 抓取網(wǎng)頁(yè)時(shí),成功登錄服務(wù)器應用系統后,應用系統可能會(huì )重定向網(wǎng)頁(yè)通過(guò) Response.Redirect。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。實(shí)現post用戶(hù)名和密碼到服務(wù)器:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向抓取網(wǎng)頁(yè)時(shí),登錄成功后在服務(wù)器應用系統中,應用系統可以通過(guò)Response.Redirect重定向網(wǎng)頁(yè)。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。實(shí)現post用戶(hù)名和密碼到服務(wù)器:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件4、ASP.NET爬取網(wǎng)頁(yè)內容-防止爬取時(shí)重定向抓取網(wǎng)頁(yè)時(shí),登錄成功后在服務(wù)器應用系統中,應用系統可以通過(guò)Response.Redirect重定向網(wǎng)頁(yè)。如果這個(gè)重定向不需要響應,那么我們就不需要讀取 reader.ReadToEnd() Response.Write out ,就是這樣。
5、ASP.NET爬取網(wǎng)頁(yè)內容-維護登錄狀態(tài)使用Post數據成功登錄服務(wù)器應用系統后,需要登錄的頁(yè)面就可以獲取到了,那么我們可能需要維護登錄多個(gè)請求之間的狀態(tài)。優(yōu)采云云采集Web爬蟲(chóng)軟件首先,我們需要使用HttpWebRequest,而不是WebRequest。與WebRequest相比,改代碼為: 注意:HttpWebRequest.Create返回的類(lèi)型還是WebRequest,所以需要進(jìn)行轉換。二、使用CookieContainer。這樣,requests和request2之間就使用了同一個(gè)Session。如果請求已登錄,則 request2 也處于已登錄狀態(tài)。最后,如何在不同頁(yè)面之間使用同一個(gè)CookieContainer。要在不同頁(yè)面之間使用相同的 CookieContainer,只將 CookieContainer 添加到 Session。優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以是用戶(hù)登錄時(shí)需要分析瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 @采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以需要分析瀏覽器的方向用戶(hù)登錄。服務(wù)器發(fā)送的 POST 請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 @采集網(wǎng)絡(luò )爬蟲(chóng)軟件6、抓取需要登錄的網(wǎng)站,因為需要登錄的是網(wǎng)站,所以需要分析瀏覽器的方向用戶(hù)登錄。服務(wù)器發(fā)送的 POST 請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 需要登錄,因為需要登錄的是網(wǎng)站,所以需要分析用戶(hù)登錄時(shí)瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集 需要登錄,因為需要登錄的是網(wǎng)站,所以需要分析用戶(hù)登錄時(shí)瀏覽器的方向。服務(wù)器發(fā)送的POST請求。1.安裝httpwatch 2.使用IE瀏覽器進(jìn)入網(wǎng)站的登錄頁(yè)面3.打開(kāi)httpwatch的記錄開(kāi)始追蹤4.輸入賬號密碼,確認登錄抓包流程:重點(diǎn)關(guān)注POST請求中的Url和postdata,以及服務(wù)器返回的cookie采集教程:優(yōu)采云云采集網(wǎng)絡(luò )爬蟲(chóng)軟件順奇網(wǎng)企業(yè)資料采集 114 黃頁(yè)企業(yè)資料采集
1、簡(jiǎn)單易用,任何人都可以使用:無(wú)需技術(shù)背景,只需了解互聯(lián)網(wǎng)采集。全程可視化流程,點(diǎn)擊鼠標完成操作,2分鐘快速上手。2、功能強大,任何網(wǎng)站都可以使用:點(diǎn)擊、登錄、翻頁(yè)、識別驗證碼、瀑布流、Ajax腳本異步加載數據網(wǎng)頁(yè),都可以通過(guò)簡(jiǎn)單的設置進(jìn)行采集。3、在采集 中,也可以關(guān)閉。配置好采集任務(wù)后,可以關(guān)機,側邊執行任務(wù)。龐大的采集集群24*7不間斷運行,不用擔心IP被封或者網(wǎng)絡(luò )中斷。4、功能免費+增值服務(wù),可以按需選擇。免費版具有滿(mǎn)足用戶(hù)基本采集需求的所有功能。同時(shí),設置一些增值服務(wù)(如私有制),以滿(mǎn)足高端付費企業(yè)用戶(hù)的需求。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(爬蟲(chóng)普通爬蟲(chóng):抓取數據的過(guò)程的分類(lèi))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 49 次瀏覽 ? 2022-02-04 12:22
爬蟲(chóng)概述 什么是爬蟲(chóng)?
編寫(xiě)程序,讓它模擬瀏覽器上網(wǎng),然后上網(wǎng)抓取數據的過(guò)程
爬行動(dòng)物的分類(lèi)
1.普通爬行動(dòng)物:
抓取整個(gè)頁(yè)面的源內容
2.關(guān)注爬蟲(chóng):
獲取頁(yè)面的部分內容
3.增量爬蟲(chóng):
它可以檢測到 網(wǎng)站 中的數據更新。在 網(wǎng)站 中獲取最新更新的數據。
防爬機制: 防爬策略:
爬蟲(chóng)利用相應的策略和技術(shù)手段破解門(mén)戶(hù)網(wǎng)站的反爬蟲(chóng)手段,從而爬取對應的數據。
爬行動(dòng)物的合法性:
爬蟲(chóng)本身不受法律禁止(中立)
爬取數據違法風(fēng)險的表現:
1.爬蟲(chóng)干擾了訪(fǎng)問(wèn)者網(wǎng)站的正常運行。
2.爬蟲(chóng)爬取某些類(lèi)型的受法律保護的數據或信息。
如何規避違法風(fēng)險:
1.嚴格遵守網(wǎng)站設置的robots協(xié)議
2.在避免爬蟲(chóng)措施的同時(shí),需要優(yōu)化自己的代碼,避免干擾被訪(fǎng)問(wèn)網(wǎng)站的正常運行
3.在使用和傳播捕獲的信息時(shí),應對捕獲的內容進(jìn)行審核。如發(fā)現屬于用戶(hù)的個(gè)人信息、隱私或其他商業(yè)秘密,應及時(shí)刪除并停止使用
UA反爬機制是什么,如何破解?如何獲取動(dòng)態(tài)加載頁(yè)面的數據:
如何獲取動(dòng)態(tài)加載頁(yè)面的數據:<br /> 通過(guò)抓包工具全局搜索找到動(dòng)態(tài)加載數據對應的數據包,數據包中提取該請求的url,
一.Anaxonda安裝1.雙擊Anaconda3-5.0.0-Windows-x86_64.exe文件
2.下一個(gè)
1.打開(kāi)cmd窗口,輸入jupyter notebook命令,
如果沒(méi)有找不到命令并且沒(méi)有報錯,則安裝成功!
2.在開(kāi)始菜單中顯示
3.啟動(dòng) ① 默認端口啟動(dòng)
在終端中輸入以下命令:
jupyter notebook
執行命令后,終端會(huì )顯示一系列notebook服務(wù)器信息,瀏覽器會(huì )自動(dòng)啟動(dòng)Jupyter Notebook。
啟動(dòng)過(guò)程中,終端顯示如下:
$ jupyter notebook
[I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine
[I 08:58:24.417 NotebookApp] 0 active kernels
[I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
默認情況下,瀏覽器地址欄會(huì )顯示::8888。其中,“l(fā)ocalhost”是指本機,“8888”是端口號。
網(wǎng)址
如果同時(shí)啟動(dòng)多個(gè) Jupyter Notebook,由于默認端口“8888”被占用,地址欄中的數字將從“8888”開(kāi)始,每次啟動(dòng)另一個(gè) Jupyter Notebook 時(shí)數字會(huì )增加 1,例如如“8889”、“8890”、“……
?、?啟動(dòng)指定端口
如果要自定義啟動(dòng) Jupyter Notebook 的端口號,可以在終端輸入以下命令:
jupyter notebook --port
在,”
"為自定義端口號,直接以數字的形式寫(xiě)在命令中,數字兩邊不帶尖括號""。例如:jupyter notebook --port 9999,即啟動(dòng)Jupyter Notebook端口號為“9999”的服務(wù)器。
?、?不打開(kāi)瀏覽器啟動(dòng)服務(wù)器
如果您只想啟動(dòng) Jupyter Notebook 服務(wù)器但不想立即進(jìn)入主頁(yè),則無(wú)需立即啟動(dòng)瀏覽器。在終端輸入:
jupyter notebook --no-browser
此時(shí)終端會(huì )顯示激活服務(wù)器的信息,激活服務(wù)器后會(huì )顯示打開(kāi)瀏覽器頁(yè)面的鏈接。當您需要啟動(dòng)瀏覽器頁(yè)面時(shí),只需復制鏈接,將其粘貼到瀏覽器的地址欄中,然后按 Enter 鍵即可轉到您的 Jupyter Notebook 頁(yè)面。
示例圖中,由于我在完成以上內容的同時(shí)同時(shí)啟動(dòng)了多個(gè)Jupyter Notebooks,顯示我的“8888”端口號被占用,最后“8889”分配給了我。
2. 快捷方式 向上插入單元格:a 向下插入單元格:b 刪除單元格:x 將代碼切換為 markdown:m 將 markdown 切換為代碼:y 運行單元格:shift+enter 查看幫助文檔:shift+ Tab 自動(dòng)提示:標簽
3. 魔法指令
運行外部python源文件:%run xxx.py 計算一條語(yǔ)句的運行時(shí)間:%time statement 計算一條語(yǔ)句的平均運行時(shí)間:%timeit statement 測試多行代碼的平均運行時(shí)間:
%%時(shí)間
聲明1
聲明2
聲明3 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(爬蟲(chóng)普通爬蟲(chóng):抓取數據的過(guò)程的分類(lèi))
爬蟲(chóng)概述 什么是爬蟲(chóng)?
編寫(xiě)程序,讓它模擬瀏覽器上網(wǎng),然后上網(wǎng)抓取數據的過(guò)程
爬行動(dòng)物的分類(lèi)
1.普通爬行動(dòng)物:
抓取整個(gè)頁(yè)面的源內容
2.關(guān)注爬蟲(chóng):
獲取頁(yè)面的部分內容
3.增量爬蟲(chóng):
它可以檢測到 網(wǎng)站 中的數據更新。在 網(wǎng)站 中獲取最新更新的數據。
防爬機制: 防爬策略:
爬蟲(chóng)利用相應的策略和技術(shù)手段破解門(mén)戶(hù)網(wǎng)站的反爬蟲(chóng)手段,從而爬取對應的數據。
爬行動(dòng)物的合法性:
爬蟲(chóng)本身不受法律禁止(中立)
爬取數據違法風(fēng)險的表現:
1.爬蟲(chóng)干擾了訪(fǎng)問(wèn)者網(wǎng)站的正常運行。
2.爬蟲(chóng)爬取某些類(lèi)型的受法律保護的數據或信息。
如何規避違法風(fēng)險:
1.嚴格遵守網(wǎng)站設置的robots協(xié)議
2.在避免爬蟲(chóng)措施的同時(shí),需要優(yōu)化自己的代碼,避免干擾被訪(fǎng)問(wèn)網(wǎng)站的正常運行
3.在使用和傳播捕獲的信息時(shí),應對捕獲的內容進(jìn)行審核。如發(fā)現屬于用戶(hù)的個(gè)人信息、隱私或其他商業(yè)秘密,應及時(shí)刪除并停止使用
UA反爬機制是什么,如何破解?如何獲取動(dòng)態(tài)加載頁(yè)面的數據:
如何獲取動(dòng)態(tài)加載頁(yè)面的數據:<br /> 通過(guò)抓包工具全局搜索找到動(dòng)態(tài)加載數據對應的數據包,數據包中提取該請求的url,
一.Anaxonda安裝1.雙擊Anaconda3-5.0.0-Windows-x86_64.exe文件

2.下一個(gè)






1.打開(kāi)cmd窗口,輸入jupyter notebook命令,
如果沒(méi)有找不到命令并且沒(méi)有報錯,則安裝成功!
2.在開(kāi)始菜單中顯示

3.啟動(dòng) ① 默認端口啟動(dòng)
在終端中輸入以下命令:
jupyter notebook
執行命令后,終端會(huì )顯示一系列notebook服務(wù)器信息,瀏覽器會(huì )自動(dòng)啟動(dòng)Jupyter Notebook。
啟動(dòng)過(guò)程中,終端顯示如下:
$ jupyter notebook
[I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine
[I 08:58:24.417 NotebookApp] 0 active kernels
[I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
默認情況下,瀏覽器地址欄會(huì )顯示::8888。其中,“l(fā)ocalhost”是指本機,“8888”是端口號。
網(wǎng)址
如果同時(shí)啟動(dòng)多個(gè) Jupyter Notebook,由于默認端口“8888”被占用,地址欄中的數字將從“8888”開(kāi)始,每次啟動(dòng)另一個(gè) Jupyter Notebook 時(shí)數字會(huì )增加 1,例如如“8889”、“8890”、“……
?、?啟動(dòng)指定端口
如果要自定義啟動(dòng) Jupyter Notebook 的端口號,可以在終端輸入以下命令:
jupyter notebook --port
在,”
"為自定義端口號,直接以數字的形式寫(xiě)在命令中,數字兩邊不帶尖括號""。例如:jupyter notebook --port 9999,即啟動(dòng)Jupyter Notebook端口號為“9999”的服務(wù)器。
?、?不打開(kāi)瀏覽器啟動(dòng)服務(wù)器
如果您只想啟動(dòng) Jupyter Notebook 服務(wù)器但不想立即進(jìn)入主頁(yè),則無(wú)需立即啟動(dòng)瀏覽器。在終端輸入:
jupyter notebook --no-browser
此時(shí)終端會(huì )顯示激活服務(wù)器的信息,激活服務(wù)器后會(huì )顯示打開(kāi)瀏覽器頁(yè)面的鏈接。當您需要啟動(dòng)瀏覽器頁(yè)面時(shí),只需復制鏈接,將其粘貼到瀏覽器的地址欄中,然后按 Enter 鍵即可轉到您的 Jupyter Notebook 頁(yè)面。
示例圖中,由于我在完成以上內容的同時(shí)同時(shí)啟動(dòng)了多個(gè)Jupyter Notebooks,顯示我的“8888”端口號被占用,最后“8889”分配給了我。
2. 快捷方式 向上插入單元格:a 向下插入單元格:b 刪除單元格:x 將代碼切換為 markdown:m 將 markdown 切換為代碼:y 運行單元格:shift+enter 查看幫助文檔:shift+ Tab 自動(dòng)提示:標簽
3. 魔法指令
運行外部python源文件:%run xxx.py 計算一條語(yǔ)句的運行時(shí)間:%time statement 計算一條語(yǔ)句的平均運行時(shí)間:%timeit statement 測試多行代碼的平均運行時(shí)間:
%%時(shí)間
聲明1
聲明2
聲明3
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(種子網(wǎng)站存儲7萬(wàn)多條記錄()時(shí)間送達!)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 68 次瀏覽 ? 2022-02-04 12:16
關(guān)鍵時(shí)刻,第一時(shí)間發(fā)貨!
節前的一次誤操作,清空了mysql中的記錄表和電影表。顯然,我沒(méi)有做任何mysql備份。于是,我干脆清空了所有表數據,一夜之間又回到了解放前……
在之前的版本中,記錄表存儲了7萬(wàn)多條記錄,爬取了4萬(wàn)多條記錄,但是可以明顯的發(fā)現,爬取的數據越多,卡機越多。又報錯了,是關(guān)于JDBC的,又一次機器卡住了。
經(jīng)過(guò)仔細考慮,之前版本的爬蟲(chóng)程序和數據庫的讀寫(xiě)次數過(guò)于頻繁,存在以下問(wèn)題:
3.存儲電影詳情頁(yè)記錄和短評數據全部解析后立即存入數據庫。
顯然,上面的方法一看就效率低下,所以今天下午修改了相關(guān)代碼,部分實(shí)現批量插入,盡可能減少與數據庫的交互,從而降低時(shí)間和空間成本。
既然出現了問(wèn)題,我們再來(lái)看看這個(gè)版本,最后發(fā)現問(wèn)題的原因是種子URL沒(méi)有存儲在mysql的記錄表中??,所以是在DoubanCrawler類(lèi)中。
執行 stmt.executeUpdate(sql) > 0 返回值 0,所以爬取為 0 的記錄不會(huì )從數據庫中讀取,最后會(huì )在 while 循環(huán)中爬取種子 網(wǎng)站。
解決方案:由于種子網(wǎng)站沒(méi)有存儲在記錄中,那么對種子網(wǎng)站進(jìn)行特殊處理,將if的判斷條件改為if(stmt.executeUpdate(sql)>0 || frontPage.equals(url)),這樣對于種子網(wǎng)站,即使沒(méi)有成功的更新操作,仍然可以進(jìn)入讀取爬取到0的數據庫的操作。
對于第一個(gè)問(wèn)題,使用批量插入操作
具體實(shí)現如下:
1. 通過(guò)正則匹配,找到符合條件的鏈接,加入nextLinkList集合
2.遍歷后,將數據存入數據庫
3. 在批處理操作中,使用了 addBatch() 方法和 executeBatch() 方法。注意需要添加 conn.setAutoCommit(false); mit() 表示手動(dòng)提交。
第二題,一次查詢(xún)多條記錄
實(shí)現思路:一次只改一條記錄,一次查詢(xún)10條記錄,將這10條記錄存入list集合中,將原來(lái)的String類(lèi)型url改為list類(lèi)型urlList并傳入 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(種子網(wǎng)站存儲7萬(wàn)多條記錄()時(shí)間送達!)
關(guān)鍵時(shí)刻,第一時(shí)間發(fā)貨!
節前的一次誤操作,清空了mysql中的記錄表和電影表。顯然,我沒(méi)有做任何mysql備份。于是,我干脆清空了所有表數據,一夜之間又回到了解放前……
在之前的版本中,記錄表存儲了7萬(wàn)多條記錄,爬取了4萬(wàn)多條記錄,但是可以明顯的發(fā)現,爬取的數據越多,卡機越多。又報錯了,是關(guān)于JDBC的,又一次機器卡住了。
經(jīng)過(guò)仔細考慮,之前版本的爬蟲(chóng)程序和數據庫的讀寫(xiě)次數過(guò)于頻繁,存在以下問(wèn)題:
3.存儲電影詳情頁(yè)記錄和短評數據全部解析后立即存入數據庫。
顯然,上面的方法一看就效率低下,所以今天下午修改了相關(guān)代碼,部分實(shí)現批量插入,盡可能減少與數據庫的交互,從而降低時(shí)間和空間成本。
既然出現了問(wèn)題,我們再來(lái)看看這個(gè)版本,最后發(fā)現問(wèn)題的原因是種子URL沒(méi)有存儲在mysql的記錄表中??,所以是在DoubanCrawler類(lèi)中。

執行 stmt.executeUpdate(sql) > 0 返回值 0,所以爬取為 0 的記錄不會(huì )從數據庫中讀取,最后會(huì )在 while 循環(huán)中爬取種子 網(wǎng)站。
解決方案:由于種子網(wǎng)站沒(méi)有存儲在記錄中,那么對種子網(wǎng)站進(jìn)行特殊處理,將if的判斷條件改為if(stmt.executeUpdate(sql)>0 || frontPage.equals(url)),這樣對于種子網(wǎng)站,即使沒(méi)有成功的更新操作,仍然可以進(jìn)入讀取爬取到0的數據庫的操作。
對于第一個(gè)問(wèn)題,使用批量插入操作
具體實(shí)現如下:



1. 通過(guò)正則匹配,找到符合條件的鏈接,加入nextLinkList集合
2.遍歷后,將數據存入數據庫
3. 在批處理操作中,使用了 addBatch() 方法和 executeBatch() 方法。注意需要添加 conn.setAutoCommit(false); mit() 表示手動(dòng)提交。
第二題,一次查詢(xún)多條記錄
實(shí)現思路:一次只改一條記錄,一次查詢(xún)10條記錄,將這10條記錄存入list集合中,將原來(lái)的String類(lèi)型url改為list類(lèi)型urlList并傳入
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據( 如何替代人工從網(wǎng)頁(yè)中找到數據并復制粘貼到excel中)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 57 次瀏覽 ? 2022-02-03 20:02
如何替代人工從網(wǎng)頁(yè)中找到數據并復制粘貼到excel中)
為什么要學(xué)習網(wǎng)絡(luò )爬蟲(chóng)
它可以代替人工從網(wǎng)頁(yè)中查找數據并將其復制粘貼到excel中。這種重復性的工作,不僅浪費時(shí)間,而且一不留神,容易出錯,解決了這些無(wú)法自動(dòng)化、無(wú)法實(shí)時(shí)獲取的公共數據的應用價(jià)值,我們可以借助KYC框架來(lái)了解,了解你的公司(了解您的公司),了解您的競爭對手(了解您的競爭對手),了解您的客戶(hù)(了解您的客戶(hù))。這是通過(guò)理解和執行對公共數據的簡(jiǎn)單描述性分析可以帶來(lái)的價(jià)值。進(jìn)一步,通過(guò)機器學(xué)習和統計算法分析,可以幫助企業(yè)做4Ps(產(chǎn)品)、價(jià)格(價(jià)格)、渠道(地點(diǎn))促銷(xiāo)(promotion))
網(wǎng)絡(luò )爬蟲(chóng)的基本協(xié)議
robots協(xié)議
python爬蟲(chóng)的流程
主要可以分為三個(gè)部分:1.獲取網(wǎng)頁(yè);2.解析網(wǎng)頁(yè)(提取數據);3.存儲數據;
1.獲取網(wǎng)頁(yè)就是向URL發(fā)送請求,會(huì )返回整個(gè)網(wǎng)頁(yè)的數據
2.解析一個(gè)網(wǎng)頁(yè)就是從整個(gè)網(wǎng)頁(yè)的數據中提取出想要的數據
3.存數據就是存數據
三道工序的技術(shù)實(shí)現
1.獲取網(wǎng)頁(yè)
獲取網(wǎng)頁(yè)的基本技術(shù):request、urllib和selenium(模擬瀏覽器)
獲取網(wǎng)頁(yè)先進(jìn)技術(shù):多進(jìn)程多線(xiàn)程爬取、登錄爬取、破IP封禁、服務(wù)器爬取
2.解析網(wǎng)頁(yè)
解析網(wǎng)頁(yè)的基本技術(shù):re正則表達式、beautifulsoup和lxml
網(wǎng)頁(yè)解析高級技術(shù):解決中文亂碼
3.存儲的數據
數據存儲的基本技術(shù):存txt文件和存csv文件
存儲數據的先進(jìn)技術(shù):存儲在MySQL數據庫中和存儲在mongodb數據庫中 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(
如何替代人工從網(wǎng)頁(yè)中找到數據并復制粘貼到excel中)
為什么要學(xué)習網(wǎng)絡(luò )爬蟲(chóng)
它可以代替人工從網(wǎng)頁(yè)中查找數據并將其復制粘貼到excel中。這種重復性的工作,不僅浪費時(shí)間,而且一不留神,容易出錯,解決了這些無(wú)法自動(dòng)化、無(wú)法實(shí)時(shí)獲取的公共數據的應用價(jià)值,我們可以借助KYC框架來(lái)了解,了解你的公司(了解您的公司),了解您的競爭對手(了解您的競爭對手),了解您的客戶(hù)(了解您的客戶(hù))。這是通過(guò)理解和執行對公共數據的簡(jiǎn)單描述性分析可以帶來(lái)的價(jià)值。進(jìn)一步,通過(guò)機器學(xué)習和統計算法分析,可以幫助企業(yè)做4Ps(產(chǎn)品)、價(jià)格(價(jià)格)、渠道(地點(diǎn))促銷(xiāo)(promotion))
網(wǎng)絡(luò )爬蟲(chóng)的基本協(xié)議
robots協(xié)議
python爬蟲(chóng)的流程
主要可以分為三個(gè)部分:1.獲取網(wǎng)頁(yè);2.解析網(wǎng)頁(yè)(提取數據);3.存儲數據;
1.獲取網(wǎng)頁(yè)就是向URL發(fā)送請求,會(huì )返回整個(gè)網(wǎng)頁(yè)的數據
2.解析一個(gè)網(wǎng)頁(yè)就是從整個(gè)網(wǎng)頁(yè)的數據中提取出想要的數據
3.存數據就是存數據
三道工序的技術(shù)實(shí)現
1.獲取網(wǎng)頁(yè)
獲取網(wǎng)頁(yè)的基本技術(shù):request、urllib和selenium(模擬瀏覽器)
獲取網(wǎng)頁(yè)先進(jìn)技術(shù):多進(jìn)程多線(xiàn)程爬取、登錄爬取、破IP封禁、服務(wù)器爬取
2.解析網(wǎng)頁(yè)
解析網(wǎng)頁(yè)的基本技術(shù):re正則表達式、beautifulsoup和lxml
網(wǎng)頁(yè)解析高級技術(shù):解決中文亂碼
3.存儲的數據
數據存儲的基本技術(shù):存txt文件和存csv文件
存儲數據的先進(jìn)技術(shù):存儲在MySQL數據庫中和存儲在mongodb數據庫中
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(最簡(jiǎn)單的過(guò)程可以用如下代碼表示:importurllib2request=urllib2.Request())
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 64 次瀏覽 ? 2022-02-01 14:30
概念
爬蟲(chóng)是網(wǎng)頁(yè)的采集。
通常,在獲取的網(wǎng)頁(yè)中存在到其他網(wǎng)頁(yè)的路徑,稱(chēng)為超鏈接。然后,通過(guò)這樣的路徑可以獲取更多的其他網(wǎng)頁(yè),就像蜘蛛在網(wǎng)上爬行一樣,所以俗稱(chēng)爬蟲(chóng)。
爬蟲(chóng)的工作原理類(lèi)似于瀏覽器瀏覽網(wǎng)頁(yè)。它是一種請求/返回模式,即客戶(hù)端向服務(wù)器發(fā)出請求訪(fǎng)問(wèn)某個(gè)頁(yè)面(請求),服務(wù)器返回客戶(hù)端請求的內容(響應)。URL是代表互聯(lián)網(wǎng)上每個(gè)文件的唯一標志,也就是我們所說(shuō)的網(wǎng)址??蛻?hù)端通過(guò) URL 向特定網(wǎng)頁(yè)發(fā)送請求。最簡(jiǎn)單的過(guò)程可以用以下代碼表示:
import urllib2request = urllib2.Request("")#構造請求請求 response = urllib2.urlopen(request)#發(fā)送請求并得到響應打印 response.read()#使用read()來(lái)獲取返回的內容并打印出Http協(xié)議的POST和GET
對于簡(jiǎn)單的靜態(tài)網(wǎng)頁(yè),這樣就足夠了,可以順利獲取html文本。
但對于這個(gè)日新月異的互聯(lián)網(wǎng)來(lái)說(shuō),這東西根本就不夠用。首先要考慮的是動(dòng)態(tài)網(wǎng)頁(yè),它需要我們動(dòng)態(tài)地向它傳遞參數。例如,在登錄時(shí),我們需要提交用戶(hù)名和密碼等表單信息,以便我們獲取更多信息。這需要我們在構造請求時(shí)向服務(wù)器傳遞更多信息。
說(shuō)到傳遞參數,就不得不說(shuō)一下HTTP協(xié)議與服務(wù)器交互的方式了。HTTP協(xié)議有六種請求方法,分別是get、head、put、delete、post、options,其中最基本的四種是GET、POST和PUT、DELET。我們知道 URL 地址是用來(lái)描述網(wǎng)絡(luò )上的資源的。HTTP中的GET、POST、PUT、DELETE對應了查詢(xún)、修改、添加、刪除這四種操作。對于爬蟲(chóng)中的數據傳輸,使用 POST 和 GET。我們來(lái)看看GET和POST的區別:
1.GET提交的數據會(huì )放在URL后面,URL和傳輸數據用?分隔,參數用&連接
2.GET方法提交的數據大小是有限制的(因為瀏覽器對URL的長(cháng)度有限制),而POST方法提交的數據沒(méi)有限制。
3.GET方法需要使用Request.QueryString獲取變量的值,POST方法使用Request.Form獲取變量的值。
4.GET方式提交數據會(huì )帶來(lái)安全問(wèn)題。例如,通過(guò) GET 方法提交數據時(shí),用戶(hù)名和密碼會(huì )出現在 URL 上。如果頁(yè)面可以被緩存或者其他人可以訪(fǎng)問(wèn)機器,則可以從訪(fǎng)問(wèn)歷史記錄中獲取用戶(hù)的賬號和密碼。下面介紹兩種提交方法。
POST方法導入urllib2值 ={“username”:“”,“password”:“XXXX”}data = urllib.urlencode(values)url=":///my/mycsdn"request = urllib2.@ >請求(url,data)response = urllib2.urlopen(request)print response.read()
可以看出,該方法首先將要提交的信息構造成一個(gè)數據,然后連同URL一起構造請求對象。
GET方法 import urllib2 import urllibval??ues ={"username":"","password":"XXXX"}data = urllib.urlencode(values)url = ""geturl = url +"?"+ datarequest = urllib2. Request(geturl)response = urllib2.urlopen(request)print response.read()
可以看到GET方式是直接在URL后面加參數
設置標題
即便如此,還是有一些網(wǎng)站不被允許訪(fǎng)問(wèn),會(huì )出現識別問(wèn)題。這時(shí)候,為了真正的偽裝成瀏覽器,我們還需要在構造請求的時(shí)候設置一些Headers屬性。打開(kāi)瀏覽器查看網(wǎng)頁(yè)標題,可以看到如下內容:
我們可以根據自己的需要選擇某些屬性來(lái)構造請求,比如下面使用了user-agent和referer。
headers ={'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Referer':''}request = urllib2.Request (網(wǎng)址,標題=標題)
User-agent全稱(chēng)為用戶(hù)代理,是向網(wǎng)站提供所用瀏覽器的類(lèi)型和版本、操作系統、瀏覽器內核等信息的標志,是偽裝成瀏覽器。真正的瀏覽器提供這個(gè)屬性是為了方便網(wǎng)站為用戶(hù)提供更好的展示和體驗。Referer 顯示當前頁(yè)面來(lái)自哪個(gè)頁(yè)面??梢杂脕?lái)防止防盜鏈。服務(wù)器將識別 headers 中的 referer 是否是它自己。如果沒(méi)有,某些服務(wù)器將不會(huì )響應。
有了以上的基礎知識,就可以開(kāi)始了解和實(shí)現真正的爬蟲(chóng)了。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(最簡(jiǎn)單的過(guò)程可以用如下代碼表示:importurllib2request=urllib2.Request())
概念
爬蟲(chóng)是網(wǎng)頁(yè)的采集。
通常,在獲取的網(wǎng)頁(yè)中存在到其他網(wǎng)頁(yè)的路徑,稱(chēng)為超鏈接。然后,通過(guò)這樣的路徑可以獲取更多的其他網(wǎng)頁(yè),就像蜘蛛在網(wǎng)上爬行一樣,所以俗稱(chēng)爬蟲(chóng)。
爬蟲(chóng)的工作原理類(lèi)似于瀏覽器瀏覽網(wǎng)頁(yè)。它是一種請求/返回模式,即客戶(hù)端向服務(wù)器發(fā)出請求訪(fǎng)問(wèn)某個(gè)頁(yè)面(請求),服務(wù)器返回客戶(hù)端請求的內容(響應)。URL是代表互聯(lián)網(wǎng)上每個(gè)文件的唯一標志,也就是我們所說(shuō)的網(wǎng)址??蛻?hù)端通過(guò) URL 向特定網(wǎng)頁(yè)發(fā)送請求。最簡(jiǎn)單的過(guò)程可以用以下代碼表示:
import urllib2request = urllib2.Request("")#構造請求請求 response = urllib2.urlopen(request)#發(fā)送請求并得到響應打印 response.read()#使用read()來(lái)獲取返回的內容并打印出Http協(xié)議的POST和GET
對于簡(jiǎn)單的靜態(tài)網(wǎng)頁(yè),這樣就足夠了,可以順利獲取html文本。
但對于這個(gè)日新月異的互聯(lián)網(wǎng)來(lái)說(shuō),這東西根本就不夠用。首先要考慮的是動(dòng)態(tài)網(wǎng)頁(yè),它需要我們動(dòng)態(tài)地向它傳遞參數。例如,在登錄時(shí),我們需要提交用戶(hù)名和密碼等表單信息,以便我們獲取更多信息。這需要我們在構造請求時(shí)向服務(wù)器傳遞更多信息。
說(shuō)到傳遞參數,就不得不說(shuō)一下HTTP協(xié)議與服務(wù)器交互的方式了。HTTP協(xié)議有六種請求方法,分別是get、head、put、delete、post、options,其中最基本的四種是GET、POST和PUT、DELET。我們知道 URL 地址是用來(lái)描述網(wǎng)絡(luò )上的資源的。HTTP中的GET、POST、PUT、DELETE對應了查詢(xún)、修改、添加、刪除這四種操作。對于爬蟲(chóng)中的數據傳輸,使用 POST 和 GET。我們來(lái)看看GET和POST的區別:
1.GET提交的數據會(huì )放在URL后面,URL和傳輸數據用?分隔,參數用&連接
2.GET方法提交的數據大小是有限制的(因為瀏覽器對URL的長(cháng)度有限制),而POST方法提交的數據沒(méi)有限制。
3.GET方法需要使用Request.QueryString獲取變量的值,POST方法使用Request.Form獲取變量的值。
4.GET方式提交數據會(huì )帶來(lái)安全問(wèn)題。例如,通過(guò) GET 方法提交數據時(shí),用戶(hù)名和密碼會(huì )出現在 URL 上。如果頁(yè)面可以被緩存或者其他人可以訪(fǎng)問(wèn)機器,則可以從訪(fǎng)問(wèn)歷史記錄中獲取用戶(hù)的賬號和密碼。下面介紹兩種提交方法。
POST方法導入urllib2值 ={“username”:“”,“password”:“XXXX”}data = urllib.urlencode(values)url=":///my/mycsdn"request = urllib2.@ >請求(url,data)response = urllib2.urlopen(request)print response.read()
可以看出,該方法首先將要提交的信息構造成一個(gè)數據,然后連同URL一起構造請求對象。
GET方法 import urllib2 import urllibval??ues ={"username":"","password":"XXXX"}data = urllib.urlencode(values)url = ""geturl = url +"?"+ datarequest = urllib2. Request(geturl)response = urllib2.urlopen(request)print response.read()
可以看到GET方式是直接在URL后面加參數
設置標題
即便如此,還是有一些網(wǎng)站不被允許訪(fǎng)問(wèn),會(huì )出現識別問(wèn)題。這時(shí)候,為了真正的偽裝成瀏覽器,我們還需要在構造請求的時(shí)候設置一些Headers屬性。打開(kāi)瀏覽器查看網(wǎng)頁(yè)標題,可以看到如下內容:
我們可以根據自己的需要選擇某些屬性來(lái)構造請求,比如下面使用了user-agent和referer。
headers ={'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Referer':''}request = urllib2.Request (網(wǎng)址,標題=標題)
User-agent全稱(chēng)為用戶(hù)代理,是向網(wǎng)站提供所用瀏覽器的類(lèi)型和版本、操作系統、瀏覽器內核等信息的標志,是偽裝成瀏覽器。真正的瀏覽器提供這個(gè)屬性是為了方便網(wǎng)站為用戶(hù)提供更好的展示和體驗。Referer 顯示當前頁(yè)面來(lái)自哪個(gè)頁(yè)面??梢杂脕?lái)防止防盜鏈。服務(wù)器將識別 headers 中的 referer 是否是它自己。如果沒(méi)有,某些服務(wù)器將不會(huì )響應。
有了以上的基礎知識,就可以開(kāi)始了解和實(shí)現真正的爬蟲(chóng)了。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(主流爬蟲(chóng)框架簡(jiǎn)介-1.地址 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2022-02-01 12:27
)
一、前言
目前市面上的爬蟲(chóng)框架比較多,有不同語(yǔ)言、不同類(lèi)型的爬蟲(chóng)框架。然而,在開(kāi)展預研時(shí),很難選擇哪一項
框架是許多開(kāi)發(fā)人員特別頭疼的問(wèn)題。
本文主要總結了市面上主流開(kāi)發(fā)語(yǔ)言中的主流爬蟲(chóng)框架,以及爬蟲(chóng)框架的優(yōu)缺點(diǎn);希望對大家選擇合適的爬蟲(chóng)框架有所幫助。
二、主流語(yǔ)言爬蟲(chóng)框架列表 常用爬蟲(chóng)框架列表 JAVA PYTHON PHP C# C/C++
阿帕奇納奇2
刮擦
php蜘蛛
點(diǎn)網(wǎng)蜘蛛
開(kāi)源搜索引擎
網(wǎng)絡(luò )魔術(shù)
克勞利
豆包
網(wǎng)絡(luò )爬蟲(chóng)
蛛網(wǎng)
赫里特里克斯
波西亞
PHP抓取
智能蜘蛛
阿普頓
網(wǎng)絡(luò )采集器
PySpider
php硒
阿博特
袋熊
爬蟲(chóng)4j
抓
網(wǎng)絡(luò )
蜘蛛
蜘蛛俠
可樂(lè )
銳角
拉爾賓
SeimiCrawler
蟒蛇硒
HtmlAgilityPack
湯
查詢(xún)
java硒
htmlunit
三、主流爬蟲(chóng)框架介紹1.Java爬蟲(chóng)框架Apache Nutch2
地址:
Nutch 是一個(gè)搜索引擎的開(kāi)源 Java 實(shí)現。它提供了我們運行自己的搜索引擎所需的所有工具。包括全文搜索和網(wǎng)絡(luò )爬蟲(chóng)。
Nutch 致力于讓每個(gè)人都能輕松、廉價(jià)地配置世界級的網(wǎng)絡(luò )搜索引擎。為了實(shí)現這一雄心勃勃的目標,Nutch 必須能夠:
* 每月獲取數十億網(wǎng)頁(yè)
* 維護這些頁(yè)面的索引
* 每秒數以千計的索引文件搜索
簡(jiǎn)而言之,Nutch 支持分發(fā)。您可以通過(guò)配置網(wǎng)站地址、規則和采集的深度(通用爬蟲(chóng)或全網(wǎng)爬蟲(chóng))對網(wǎng)站執行采集,并提供完整的-文本搜索功能,可以對來(lái)自采集的海量數據進(jìn)行全文搜索;如果要完成站點(diǎn)所有內容的采集,而不關(guān)心采集和解析準確性(不是特定頁(yè)面來(lái)滿(mǎn)足特定字段內容采集的需要) ,建議您使用Apache Nutch。如果要為站點(diǎn)的指定內容版塊指定字段采集,建議使用垂直爬蟲(chóng)更加靈活。
webmgaic(推薦)
地址:
WebMagic 是一個(gè)簡(jiǎn)單靈活的 Java 爬蟲(chóng)框架?;赪ebMagic,您可以快速開(kāi)發(fā)一個(gè)高效且易于維護的爬蟲(chóng)。
特征:
快速入門(mén)的簡(jiǎn)單 API
模塊化結構,易于擴展
提供多線(xiàn)程和分布式支持
赫里特里克斯
地址:
Heritrix是java開(kāi)發(fā)的開(kāi)源網(wǎng)絡(luò )爬蟲(chóng),用戶(hù)可以使用它從互聯(lián)網(wǎng)上爬取想要的資源。它最好的地方在于其良好的擴展性,方便用戶(hù)實(shí)現自己的爬取邏輯。
網(wǎng)絡(luò )采集器
地址:
WebCollector是一個(gè)無(wú)需配置,方便二次開(kāi)發(fā)的JAVA爬蟲(chóng)框架(內核)。它提供了精簡(jiǎn)的API,只需少量代碼即可實(shí)現強大的爬蟲(chóng)。WebCollector-Hadoop 是支持分布式爬取的 WebCollector 的 Hadoop 版本。
爬蟲(chóng)4j
地址::
crawler4j 是一個(gè)基于 Java 的輕量級獨立開(kāi)源爬蟲(chóng)框架,最大的特點(diǎn)之一就是簡(jiǎn)單。此外,它還支持多線(xiàn)程,支持代理,并且可以過(guò)濾重復的URL
基本上,從將jar加載到項目中,只需修改示例代碼即可簡(jiǎn)單實(shí)現爬蟲(chóng)的所有功能,所有這些動(dòng)作不超過(guò)半小時(shí)。
蜘蛛俠
地址:
Spiderman 是一個(gè) Java 開(kāi)源 Web 數據提取工具。它能夠采集指定的網(wǎng)頁(yè)并從這些頁(yè)面中提取有用的數據。Spiderman主要使用XPath、正則表達式、表達式引擎等技術(shù)來(lái)實(shí)現數據提取。
SeimiCrawler
地址:
一個(gè)敏捷、獨立部署的分布式Java爬蟲(chóng)框架
SeimiCrawler 是一個(gè)強大、高效、敏捷的框架,支持分布式爬蟲(chóng)開(kāi)發(fā)。希望能夠最大程度的降低新手開(kāi)發(fā)高可用性能好的爬蟲(chóng)系統的門(mén)檻,提高爬蟲(chóng)系統開(kāi)發(fā)的開(kāi)發(fā)效率。在 SeimiCrawler 的世界里,大部分人只關(guān)心編寫(xiě)爬蟲(chóng)的業(yè)務(wù)邏輯,剩下的交給 Seimi 來(lái)處理。在設計思路上,SeimiCrawler 很大程度上受到了 Python 的爬蟲(chóng)框架 Scrapy 的啟發(fā),同時(shí)融合了 Java 語(yǔ)言本身的特點(diǎn)和 Spring 的特點(diǎn),希望在國內使用更高效的 XPath 來(lái)更方便、更廣泛地解析 HTML,所以SeimiCrawler默認的HTML解析器是JsoupXpath,
湯
地址:
jsoup 是一個(gè) Java HTML 解析器,可以直接解析一個(gè) URL 地址和 HTML 文本內容。它提供了一個(gè)非常省力的 API,用于通過(guò) DOM、CSS 和類(lèi)似 jQuery 的操作方法獲取和操作數據。
2.Python爬蟲(chóng)框架scrapy(推薦)
地址:
Scrapy,一個(gè)用 Python 開(kāi)發(fā)的快速、高級的屏幕抓取和網(wǎng)頁(yè)抓取框架,用于抓取網(wǎng)站并從頁(yè)面中提取結構化數據。Scrapy 用途廣泛,可用于數據挖掘、監控和自動(dòng)化測試。
Scrapy 的吸引力在于它是一個(gè)任何人都可以根據自己的需要輕松修改的框架。還提供了各類(lèi)爬蟲(chóng)的基類(lèi),如BaseSpider、站點(diǎn)地圖爬蟲(chóng)等。最新版本提供了對web2.0爬蟲(chóng)的支持。
報廢意味著(zhù)碎片化。這個(gè) Python 爬蟲(chóng)框架叫做 Scrapy。
克勞利
地址:
高速爬取網(wǎng)站對應的內容,支持關(guān)系型和非關(guān)系型數據庫,數據可以導出為JSON、XML等。
波西亞
地址:
Portia 是一個(gè)用 Python 編寫(xiě)的開(kāi)源工具,無(wú)需任何編程知識即可直觀(guān)地抓取 網(wǎng)站 數據。無(wú)需下載或安裝任何東西,因為 Portia 在您的網(wǎng)絡(luò )瀏覽器中運行。
Portia 是一個(gè)由 scrapyhub 開(kāi)源的可視化爬蟲(chóng)規則編寫(xiě)工具。Portia 提供了一個(gè)可視化的網(wǎng)頁(yè),只需在頁(yè)面上簡(jiǎn)單的點(diǎn)擊并標記相應的待提取數據,無(wú)需任何編程知識即可完成爬蟲(chóng)規則的開(kāi)發(fā)。這些規則也可以在 Scrapy 中用于抓取頁(yè)面。
PySpider
地址:
PySpider:一個(gè)強大的網(wǎng)絡(luò )爬蟲(chóng)系統,由一個(gè)中國人編寫(xiě),具有強大的WebUI。用 Python 語(yǔ)言編寫(xiě),分布式架構,支持多種數據庫后端,強大的 WebUI 支持腳本編輯器、任務(wù)監視器、項目管理器和結果查看器。
抓
地址:
網(wǎng)絡(luò )爬蟲(chóng)框架(基于 pycurl/multicur)。
可樂(lè )
地址:
一個(gè)分布式爬蟲(chóng)框架。項目整體設計有點(diǎn)差,模塊間耦合度高,但值得借鑒。
3.PHP爬蟲(chóng)框架phpspider
地址:
phpspider 是一個(gè)爬蟲(chóng)開(kāi)發(fā)框架。使用該框架,無(wú)需了解爬蟲(chóng)底層技術(shù)實(shí)現,爬蟲(chóng)被網(wǎng)站屏蔽,有的網(wǎng)站需要登錄或驗證碼識別才能爬取等。幾行PHP代碼,可以創(chuàng )建自己的爬蟲(chóng),使用框架封裝的多進(jìn)程Worker類(lèi)庫,代碼更簡(jiǎn)潔,執行效率更高更快。
豆包
地址:
Beanbun是一個(gè)用PHP編寫(xiě)的多進(jìn)程網(wǎng)絡(luò )爬蟲(chóng)框架,具有良好的開(kāi)放性和高擴展性。
支持守護進(jìn)程和普通模式(守護進(jìn)程模式只支持Linux服務(wù)器)
默認情況下,Guzzle 用于爬行
分散式
支持內存、Redis等多種隊列方式
支持自定義URI過(guò)濾
支持廣度優(yōu)先和深度優(yōu)先兩種爬取方式
遵循 PSR-4 標準
爬取網(wǎng)頁(yè)分為多個(gè)步驟,每個(gè)步驟都支持自定義動(dòng)作(如添加代理、修改user-agent等)
一種靈活的擴展機制,可以輕松為框架創(chuàng )建插件:自定義隊列、自定義爬取方法……
PHP抓取
地址:
PHPCrawl 是一個(gè) PHP 開(kāi)源網(wǎng)絡(luò )檢索蜘蛛(爬蟲(chóng))類(lèi)庫。PHPCrawl 爬蟲(chóng)“Spider”的網(wǎng)站,提供有關(guān)網(wǎng)頁(yè)、鏈接、文件等的所有信息。
PHPCrawl povides 可以選擇性地指定爬蟲(chóng)的行為,例如采集的 URL、內容類(lèi)型、過(guò)濾器、cookie 處理等。
4.c#爬蟲(chóng)框架DotnetSpider
地址:
DotnetSpider是中國人開(kāi)源的一款跨平臺、高性能、輕量級的爬蟲(chóng)軟件,C#開(kāi)發(fā)。它是目前.Net開(kāi)源爬蟲(chóng)最好的爬蟲(chóng)之一。
網(wǎng)絡(luò )爬蟲(chóng)
地址:
NWebCrawler 是一個(gè)開(kāi)源的 C# 網(wǎng)絡(luò )爬蟲(chóng)更多 NWebCrawler
智能蜘蛛
地址:
SmartSpider爬蟲(chóng)引擎內核版本,全新的設計理念,真正的極簡(jiǎn)版。
阿博特
地址:
Abot 是一個(gè)開(kāi)源的 .net 爬蟲(chóng),它快速、易于使用和擴展。
網(wǎng)絡(luò )
地址:
這個(gè)俄羅斯天才寫(xiě)的開(kāi)源工具,為什么說(shuō)他厲害,因為他又實(shí)現了所有Http協(xié)議的底層,這有什么好處呢?只要你寫(xiě)一個(gè)爬蟲(chóng),就會(huì )遇到一個(gè)讓人抓狂的問(wèn)題,就是明知道你的Http請求頭和瀏覽器一模一樣,為什么不能得到你想要的數據。這時(shí)候如果使用HttpWebRequest,只能調試到GetRespone,無(wú)法調試底層字節流。所以,一定要有更深層次的底層組件,方便自己調試。
銳角
地址:
HTML 分析工具 AngleSharp HTML 分析工具簡(jiǎn)介 AngleSharp 簡(jiǎn)介 AngleSharp 是一個(gè)基于.NET (C#) 開(kāi)發(fā)的專(zhuān)門(mén)用于解析xHTML 源代碼的DLL 組件。
HtmlAgilityPack
地址:
HtmlAgilityPack 是一個(gè)用于 .NET 的 HTML 解析庫。支持使用 XPath 解析 HTML。命名空間:HtmlAgilityPack
查詢(xún)
地址:
CsQuery銳利的html代碼分析庫,用c#像jq處理html
5.C/C++爬蟲(chóng)框架開(kāi)源搜索引擎
地址:
基于 C/C++ 的網(wǎng)絡(luò )爬蟲(chóng)和搜索引擎。
蛛網(wǎng)
地址:
一個(gè)非常靈活、易于擴展的網(wǎng)絡(luò )爬蟲(chóng),可用作單點(diǎn)部署。
阿普頓
地址:
一組易于使用的爬蟲(chóng)框架,支持 CSS 選擇器。
袋熊
地址:
基于 Ruby 支持 DSL 的自然網(wǎng)絡(luò )爬蟲(chóng),可以輕松提取網(wǎng)頁(yè)正文數據。
蜘蛛
地址:
全站數據采集,支持無(wú)限網(wǎng)站鏈接地址采集。
拉爾賓
地址:
larbin 是一個(gè)開(kāi)源的網(wǎng)絡(luò )爬蟲(chóng)/網(wǎng)絡(luò )蜘蛛,由法國年輕的 Sébastien Ailleret 獨立開(kāi)發(fā),用 C++ 語(yǔ)言實(shí)現。larbin 的目的是能夠跟蹤頁(yè)面的 URL 進(jìn)行擴展爬取,最終為搜索引擎提供廣泛的數據源。larbin只是一個(gè)爬蟲(chóng),也就是說(shuō)larbin只爬網(wǎng)頁(yè),怎么解析是用戶(hù)自己做的。此外,larbin 沒(méi)有提供如何存儲到數據庫和建立索引。
larbin最初的設計也是本著(zhù)設計簡(jiǎn)單但可配置性高的原則,所以我們可以看到一個(gè)簡(jiǎn)單的larbin爬蟲(chóng)每天可以抓取500萬(wàn)個(gè)網(wǎng)頁(yè),效率很高。
使用larbin,我們可以輕松獲取/確定單個(gè)網(wǎng)站的所有鏈接,甚至可以鏡像一個(gè)網(wǎng)站;我們也可以用它來(lái)創(chuàng )建一個(gè)url列表組,例如所有網(wǎng)頁(yè)的url retrive后,xml鏈接獲取?;蛘?mp3,或者自定義 larbin,可以作為搜索引擎的信息來(lái)源。
四.總結
爬蟲(chóng)框架很多,有興趣可以自己寫(xiě)一些。我們不需要掌握每一個(gè)主流爬蟲(chóng)框架,只需要根據自己的語(yǔ)言編寫(xiě)能力,深入掌握一個(gè)爬蟲(chóng)框架即可。大多數爬蟲(chóng)框架的實(shí)現方式大致相同。
如果你是 python 開(kāi)發(fā)者,我推薦你學(xué)習流行的 scrapy,如果你是 java 開(kāi)發(fā)者,我推薦你學(xué)習 webmagic。
查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(主流爬蟲(chóng)框架簡(jiǎn)介-1.地址
)
一、前言
目前市面上的爬蟲(chóng)框架比較多,有不同語(yǔ)言、不同類(lèi)型的爬蟲(chóng)框架。然而,在開(kāi)展預研時(shí),很難選擇哪一項
框架是許多開(kāi)發(fā)人員特別頭疼的問(wèn)題。
本文主要總結了市面上主流開(kāi)發(fā)語(yǔ)言中的主流爬蟲(chóng)框架,以及爬蟲(chóng)框架的優(yōu)缺點(diǎn);希望對大家選擇合適的爬蟲(chóng)框架有所幫助。
二、主流語(yǔ)言爬蟲(chóng)框架列表 常用爬蟲(chóng)框架列表 JAVA PYTHON PHP C# C/C++
阿帕奇納奇2
刮擦
php蜘蛛
點(diǎn)網(wǎng)蜘蛛
開(kāi)源搜索引擎
網(wǎng)絡(luò )魔術(shù)
克勞利
豆包
網(wǎng)絡(luò )爬蟲(chóng)
蛛網(wǎng)
赫里特里克斯
波西亞
PHP抓取
智能蜘蛛
阿普頓
網(wǎng)絡(luò )采集器
PySpider
php硒
阿博特
袋熊
爬蟲(chóng)4j
抓
網(wǎng)絡(luò )
蜘蛛
蜘蛛俠
可樂(lè )
銳角
拉爾賓
SeimiCrawler
蟒蛇硒
HtmlAgilityPack
湯
查詢(xún)
java硒
htmlunit
三、主流爬蟲(chóng)框架介紹1.Java爬蟲(chóng)框架Apache Nutch2
地址:
Nutch 是一個(gè)搜索引擎的開(kāi)源 Java 實(shí)現。它提供了我們運行自己的搜索引擎所需的所有工具。包括全文搜索和網(wǎng)絡(luò )爬蟲(chóng)。
Nutch 致力于讓每個(gè)人都能輕松、廉價(jià)地配置世界級的網(wǎng)絡(luò )搜索引擎。為了實(shí)現這一雄心勃勃的目標,Nutch 必須能夠:
* 每月獲取數十億網(wǎng)頁(yè)
* 維護這些頁(yè)面的索引
* 每秒數以千計的索引文件搜索
簡(jiǎn)而言之,Nutch 支持分發(fā)。您可以通過(guò)配置網(wǎng)站地址、規則和采集的深度(通用爬蟲(chóng)或全網(wǎng)爬蟲(chóng))對網(wǎng)站執行采集,并提供完整的-文本搜索功能,可以對來(lái)自采集的海量數據進(jìn)行全文搜索;如果要完成站點(diǎn)所有內容的采集,而不關(guān)心采集和解析準確性(不是特定頁(yè)面來(lái)滿(mǎn)足特定字段內容采集的需要) ,建議您使用Apache Nutch。如果要為站點(diǎn)的指定內容版塊指定字段采集,建議使用垂直爬蟲(chóng)更加靈活。
webmgaic(推薦)
地址:
WebMagic 是一個(gè)簡(jiǎn)單靈活的 Java 爬蟲(chóng)框架?;赪ebMagic,您可以快速開(kāi)發(fā)一個(gè)高效且易于維護的爬蟲(chóng)。
特征:
快速入門(mén)的簡(jiǎn)單 API
模塊化結構,易于擴展
提供多線(xiàn)程和分布式支持
赫里特里克斯
地址:
Heritrix是java開(kāi)發(fā)的開(kāi)源網(wǎng)絡(luò )爬蟲(chóng),用戶(hù)可以使用它從互聯(lián)網(wǎng)上爬取想要的資源。它最好的地方在于其良好的擴展性,方便用戶(hù)實(shí)現自己的爬取邏輯。
網(wǎng)絡(luò )采集器
地址:
WebCollector是一個(gè)無(wú)需配置,方便二次開(kāi)發(fā)的JAVA爬蟲(chóng)框架(內核)。它提供了精簡(jiǎn)的API,只需少量代碼即可實(shí)現強大的爬蟲(chóng)。WebCollector-Hadoop 是支持分布式爬取的 WebCollector 的 Hadoop 版本。
爬蟲(chóng)4j
地址::
crawler4j 是一個(gè)基于 Java 的輕量級獨立開(kāi)源爬蟲(chóng)框架,最大的特點(diǎn)之一就是簡(jiǎn)單。此外,它還支持多線(xiàn)程,支持代理,并且可以過(guò)濾重復的URL
基本上,從將jar加載到項目中,只需修改示例代碼即可簡(jiǎn)單實(shí)現爬蟲(chóng)的所有功能,所有這些動(dòng)作不超過(guò)半小時(shí)。
蜘蛛俠
地址:
Spiderman 是一個(gè) Java 開(kāi)源 Web 數據提取工具。它能夠采集指定的網(wǎng)頁(yè)并從這些頁(yè)面中提取有用的數據。Spiderman主要使用XPath、正則表達式、表達式引擎等技術(shù)來(lái)實(shí)現數據提取。
SeimiCrawler
地址:
一個(gè)敏捷、獨立部署的分布式Java爬蟲(chóng)框架
SeimiCrawler 是一個(gè)強大、高效、敏捷的框架,支持分布式爬蟲(chóng)開(kāi)發(fā)。希望能夠最大程度的降低新手開(kāi)發(fā)高可用性能好的爬蟲(chóng)系統的門(mén)檻,提高爬蟲(chóng)系統開(kāi)發(fā)的開(kāi)發(fā)效率。在 SeimiCrawler 的世界里,大部分人只關(guān)心編寫(xiě)爬蟲(chóng)的業(yè)務(wù)邏輯,剩下的交給 Seimi 來(lái)處理。在設計思路上,SeimiCrawler 很大程度上受到了 Python 的爬蟲(chóng)框架 Scrapy 的啟發(fā),同時(shí)融合了 Java 語(yǔ)言本身的特點(diǎn)和 Spring 的特點(diǎn),希望在國內使用更高效的 XPath 來(lái)更方便、更廣泛地解析 HTML,所以SeimiCrawler默認的HTML解析器是JsoupXpath,
湯
地址:
jsoup 是一個(gè) Java HTML 解析器,可以直接解析一個(gè) URL 地址和 HTML 文本內容。它提供了一個(gè)非常省力的 API,用于通過(guò) DOM、CSS 和類(lèi)似 jQuery 的操作方法獲取和操作數據。
2.Python爬蟲(chóng)框架scrapy(推薦)
地址:
Scrapy,一個(gè)用 Python 開(kāi)發(fā)的快速、高級的屏幕抓取和網(wǎng)頁(yè)抓取框架,用于抓取網(wǎng)站并從頁(yè)面中提取結構化數據。Scrapy 用途廣泛,可用于數據挖掘、監控和自動(dòng)化測試。
Scrapy 的吸引力在于它是一個(gè)任何人都可以根據自己的需要輕松修改的框架。還提供了各類(lèi)爬蟲(chóng)的基類(lèi),如BaseSpider、站點(diǎn)地圖爬蟲(chóng)等。最新版本提供了對web2.0爬蟲(chóng)的支持。
報廢意味著(zhù)碎片化。這個(gè) Python 爬蟲(chóng)框架叫做 Scrapy。
克勞利
地址:
高速爬取網(wǎng)站對應的內容,支持關(guān)系型和非關(guān)系型數據庫,數據可以導出為JSON、XML等。
波西亞
地址:
Portia 是一個(gè)用 Python 編寫(xiě)的開(kāi)源工具,無(wú)需任何編程知識即可直觀(guān)地抓取 網(wǎng)站 數據。無(wú)需下載或安裝任何東西,因為 Portia 在您的網(wǎng)絡(luò )瀏覽器中運行。
Portia 是一個(gè)由 scrapyhub 開(kāi)源的可視化爬蟲(chóng)規則編寫(xiě)工具。Portia 提供了一個(gè)可視化的網(wǎng)頁(yè),只需在頁(yè)面上簡(jiǎn)單的點(diǎn)擊并標記相應的待提取數據,無(wú)需任何編程知識即可完成爬蟲(chóng)規則的開(kāi)發(fā)。這些規則也可以在 Scrapy 中用于抓取頁(yè)面。
PySpider
地址:
PySpider:一個(gè)強大的網(wǎng)絡(luò )爬蟲(chóng)系統,由一個(gè)中國人編寫(xiě),具有強大的WebUI。用 Python 語(yǔ)言編寫(xiě),分布式架構,支持多種數據庫后端,強大的 WebUI 支持腳本編輯器、任務(wù)監視器、項目管理器和結果查看器。
抓
地址:
網(wǎng)絡(luò )爬蟲(chóng)框架(基于 pycurl/multicur)。
可樂(lè )
地址:
一個(gè)分布式爬蟲(chóng)框架。項目整體設計有點(diǎn)差,模塊間耦合度高,但值得借鑒。
3.PHP爬蟲(chóng)框架phpspider
地址:
phpspider 是一個(gè)爬蟲(chóng)開(kāi)發(fā)框架。使用該框架,無(wú)需了解爬蟲(chóng)底層技術(shù)實(shí)現,爬蟲(chóng)被網(wǎng)站屏蔽,有的網(wǎng)站需要登錄或驗證碼識別才能爬取等。幾行PHP代碼,可以創(chuàng )建自己的爬蟲(chóng),使用框架封裝的多進(jìn)程Worker類(lèi)庫,代碼更簡(jiǎn)潔,執行效率更高更快。
豆包
地址:
Beanbun是一個(gè)用PHP編寫(xiě)的多進(jìn)程網(wǎng)絡(luò )爬蟲(chóng)框架,具有良好的開(kāi)放性和高擴展性。
支持守護進(jìn)程和普通模式(守護進(jìn)程模式只支持Linux服務(wù)器)
默認情況下,Guzzle 用于爬行
分散式
支持內存、Redis等多種隊列方式
支持自定義URI過(guò)濾
支持廣度優(yōu)先和深度優(yōu)先兩種爬取方式
遵循 PSR-4 標準
爬取網(wǎng)頁(yè)分為多個(gè)步驟,每個(gè)步驟都支持自定義動(dòng)作(如添加代理、修改user-agent等)
一種靈活的擴展機制,可以輕松為框架創(chuàng )建插件:自定義隊列、自定義爬取方法……
PHP抓取
地址:
PHPCrawl 是一個(gè) PHP 開(kāi)源網(wǎng)絡(luò )檢索蜘蛛(爬蟲(chóng))類(lèi)庫。PHPCrawl 爬蟲(chóng)“Spider”的網(wǎng)站,提供有關(guān)網(wǎng)頁(yè)、鏈接、文件等的所有信息。
PHPCrawl povides 可以選擇性地指定爬蟲(chóng)的行為,例如采集的 URL、內容類(lèi)型、過(guò)濾器、cookie 處理等。
4.c#爬蟲(chóng)框架DotnetSpider
地址:
DotnetSpider是中國人開(kāi)源的一款跨平臺、高性能、輕量級的爬蟲(chóng)軟件,C#開(kāi)發(fā)。它是目前.Net開(kāi)源爬蟲(chóng)最好的爬蟲(chóng)之一。
網(wǎng)絡(luò )爬蟲(chóng)
地址:
NWebCrawler 是一個(gè)開(kāi)源的 C# 網(wǎng)絡(luò )爬蟲(chóng)更多 NWebCrawler
智能蜘蛛
地址:
SmartSpider爬蟲(chóng)引擎內核版本,全新的設計理念,真正的極簡(jiǎn)版。
阿博特
地址:
Abot 是一個(gè)開(kāi)源的 .net 爬蟲(chóng),它快速、易于使用和擴展。
網(wǎng)絡(luò )
地址:
這個(gè)俄羅斯天才寫(xiě)的開(kāi)源工具,為什么說(shuō)他厲害,因為他又實(shí)現了所有Http協(xié)議的底層,這有什么好處呢?只要你寫(xiě)一個(gè)爬蟲(chóng),就會(huì )遇到一個(gè)讓人抓狂的問(wèn)題,就是明知道你的Http請求頭和瀏覽器一模一樣,為什么不能得到你想要的數據。這時(shí)候如果使用HttpWebRequest,只能調試到GetRespone,無(wú)法調試底層字節流。所以,一定要有更深層次的底層組件,方便自己調試。
銳角
地址:
HTML 分析工具 AngleSharp HTML 分析工具簡(jiǎn)介 AngleSharp 簡(jiǎn)介 AngleSharp 是一個(gè)基于.NET (C#) 開(kāi)發(fā)的專(zhuān)門(mén)用于解析xHTML 源代碼的DLL 組件。
HtmlAgilityPack
地址:
HtmlAgilityPack 是一個(gè)用于 .NET 的 HTML 解析庫。支持使用 XPath 解析 HTML。命名空間:HtmlAgilityPack
查詢(xún)
地址:
CsQuery銳利的html代碼分析庫,用c#像jq處理html
5.C/C++爬蟲(chóng)框架開(kāi)源搜索引擎
地址:
基于 C/C++ 的網(wǎng)絡(luò )爬蟲(chóng)和搜索引擎。
蛛網(wǎng)
地址:
一個(gè)非常靈活、易于擴展的網(wǎng)絡(luò )爬蟲(chóng),可用作單點(diǎn)部署。
阿普頓
地址:
一組易于使用的爬蟲(chóng)框架,支持 CSS 選擇器。
袋熊
地址:
基于 Ruby 支持 DSL 的自然網(wǎng)絡(luò )爬蟲(chóng),可以輕松提取網(wǎng)頁(yè)正文數據。
蜘蛛
地址:
全站數據采集,支持無(wú)限網(wǎng)站鏈接地址采集。
拉爾賓
地址:
larbin 是一個(gè)開(kāi)源的網(wǎng)絡(luò )爬蟲(chóng)/網(wǎng)絡(luò )蜘蛛,由法國年輕的 Sébastien Ailleret 獨立開(kāi)發(fā),用 C++ 語(yǔ)言實(shí)現。larbin 的目的是能夠跟蹤頁(yè)面的 URL 進(jìn)行擴展爬取,最終為搜索引擎提供廣泛的數據源。larbin只是一個(gè)爬蟲(chóng),也就是說(shuō)larbin只爬網(wǎng)頁(yè),怎么解析是用戶(hù)自己做的。此外,larbin 沒(méi)有提供如何存儲到數據庫和建立索引。
larbin最初的設計也是本著(zhù)設計簡(jiǎn)單但可配置性高的原則,所以我們可以看到一個(gè)簡(jiǎn)單的larbin爬蟲(chóng)每天可以抓取500萬(wàn)個(gè)網(wǎng)頁(yè),效率很高。
使用larbin,我們可以輕松獲取/確定單個(gè)網(wǎng)站的所有鏈接,甚至可以鏡像一個(gè)網(wǎng)站;我們也可以用它來(lái)創(chuàng )建一個(gè)url列表組,例如所有網(wǎng)頁(yè)的url retrive后,xml鏈接獲取?;蛘?mp3,或者自定義 larbin,可以作為搜索引擎的信息來(lái)源。
四.總結
爬蟲(chóng)框架很多,有興趣可以自己寫(xiě)一些。我們不需要掌握每一個(gè)主流爬蟲(chóng)框架,只需要根據自己的語(yǔ)言編寫(xiě)能力,深入掌握一個(gè)爬蟲(chóng)框架即可。大多數爬蟲(chóng)框架的實(shí)現方式大致相同。
如果你是 python 開(kāi)發(fā)者,我推薦你學(xué)習流行的 scrapy,如果你是 java 開(kāi)發(fā)者,我推薦你學(xué)習 webmagic。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,要么就是做網(wǎng)站后端的)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 62 次瀏覽 ? 2022-02-01 01:04
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,要么就是做網(wǎng)站后端的。所以你要懂爬蟲(chóng)??傮w算下來(lái)如果是不考慮網(wǎng)站架構的話(huà)。去304080找人測試/調試半小時(shí)足夠。
python講課視頻推薦量目前比較多的.我就不推薦老師了,不過(guò)推薦個(gè)平臺,網(wǎng)易云課堂的翁愷老師.
爬蟲(chóng)上黑客門(mén)泉,最近又有了神兵連.可以看看。
說(shuō)實(shí)話(huà),大部分mooc都有python入門(mén)課程,你去找找看。如果是想深入做爬蟲(chóng),學(xué)習爬蟲(chóng)知識和技術(shù)很久的話(huà),
python雖然前景廣闊,但目前真的沒(méi)必要非得去找視頻,python的書(shū)籍資料,以及一些比賽可以去參加啊,
只是要會(huì )寫(xiě)請求就行,點(diǎn)擊寫(xiě)個(gè)request沒(méi)問(wèn)題,搞些簡(jiǎn)單的測試自己寫(xiě)cookie來(lái)改隨機數字也可以,但是要想寫(xiě)的好必須要做一些性能優(yōu)化。如果不做性能優(yōu)化,我們的框架flask啥的就是放不下腳本的。python基礎只要認識字母表就行,你只會(huì )寫(xiě)基礎請求,別人咋用你就照葫蘆畫(huà)瓢。python入門(mén)的時(shí)候不要怕難,python要是真牛逼了,十幾萬(wàn)都不愁,畢竟最近這幾年python很火。
本科實(shí)驗室老師做得是類(lèi)似的情況,如果題主真要開(kāi)始這一行就往下看,直接了當的寫(xiě)請求,getposturl然后簡(jiǎn)單的測試,然后就是一堆的人肉命令服務(wù)器來(lái)接受請求。抓了之后再看看數據庫去record整理分析。目前水平有限,不敢隨便給意見(jiàn),但是看到很多黑是其實(shí)是遇到瓶頸后想死皮賴(lài)臉尋求希望,估計題主是一時(shí)沒(méi)有反應過(guò)來(lái)怎么去提高。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,要么就是做網(wǎng)站后端的)
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,要么就是做網(wǎng)站后端的。所以你要懂爬蟲(chóng)??傮w算下來(lái)如果是不考慮網(wǎng)站架構的話(huà)。去304080找人測試/調試半小時(shí)足夠。
python講課視頻推薦量目前比較多的.我就不推薦老師了,不過(guò)推薦個(gè)平臺,網(wǎng)易云課堂的翁愷老師.
爬蟲(chóng)上黑客門(mén)泉,最近又有了神兵連.可以看看。
說(shuō)實(shí)話(huà),大部分mooc都有python入門(mén)課程,你去找找看。如果是想深入做爬蟲(chóng),學(xué)習爬蟲(chóng)知識和技術(shù)很久的話(huà),
python雖然前景廣闊,但目前真的沒(méi)必要非得去找視頻,python的書(shū)籍資料,以及一些比賽可以去參加啊,
只是要會(huì )寫(xiě)請求就行,點(diǎn)擊寫(xiě)個(gè)request沒(méi)問(wèn)題,搞些簡(jiǎn)單的測試自己寫(xiě)cookie來(lái)改隨機數字也可以,但是要想寫(xiě)的好必須要做一些性能優(yōu)化。如果不做性能優(yōu)化,我們的框架flask啥的就是放不下腳本的。python基礎只要認識字母表就行,你只會(huì )寫(xiě)基礎請求,別人咋用你就照葫蘆畫(huà)瓢。python入門(mén)的時(shí)候不要怕難,python要是真牛逼了,十幾萬(wàn)都不愁,畢竟最近這幾年python很火。
本科實(shí)驗室老師做得是類(lèi)似的情況,如果題主真要開(kāi)始這一行就往下看,直接了當的寫(xiě)請求,getposturl然后簡(jiǎn)單的測試,然后就是一堆的人肉命令服務(wù)器來(lái)接受請求。抓了之后再看看數據庫去record整理分析。目前水平有限,不敢隨便給意見(jiàn),但是看到很多黑是其實(shí)是遇到瓶頸后想死皮賴(lài)臉尋求希望,估計題主是一時(shí)沒(méi)有反應過(guò)來(lái)怎么去提高。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(a爬蟲(chóng)語(yǔ)言選擇方案-上海怡健醫學(xué)())
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 51 次瀏覽 ? 2022-01-29 04:03
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據并處理得到pandas數據整理存入數據庫a)針對不同的站點(diǎn)抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據;b)有些網(wǎng)站提供了python爬蟲(chóng)接口,例如,新浪博客類(lèi),這種網(wǎng)站并沒(méi)有提供python爬蟲(chóng)接口,所以需要采用“xpath”來(lái)解析數據。
a爬蟲(chóng)語(yǔ)言選擇方案:cpicker爬蟲(chóng)scrapy爬蟲(chóng)d)java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:douban頁(yè)面解析:在openresty虛擬機上搭建python爬蟲(chóng)示例數據庫有:jdbc、sqlite、mysql-redis四種方式數據庫(數據格式):數據庫選擇:本次頁(yè)面數據處理為pandas數據庫存儲:douban.pymysql.postgresql數據庫:mysql、sqlite、sqlite3圖片網(wǎng)站:b.針對不同站點(diǎn)抓取抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據。
a)針對不同的站點(diǎn)抓取抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據;b)有些網(wǎng)站提供了python爬蟲(chóng)接口,例如,新浪博客類(lèi),這種網(wǎng)站并沒(méi)有提供python爬蟲(chóng)接口,所以需要采用“xpath”來(lái)解析數據。a爬蟲(chóng)語(yǔ)言選擇方案:cpicker爬蟲(chóng)scrapy爬蟲(chóng)d)java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:方案:java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(a爬蟲(chóng)語(yǔ)言選擇方案-上海怡健醫學(xué)())
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據并處理得到pandas數據整理存入數據庫a)針對不同的站點(diǎn)抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據;b)有些網(wǎng)站提供了python爬蟲(chóng)接口,例如,新浪博客類(lèi),這種網(wǎng)站并沒(méi)有提供python爬蟲(chóng)接口,所以需要采用“xpath”來(lái)解析數據。
a爬蟲(chóng)語(yǔ)言選擇方案:cpicker爬蟲(chóng)scrapy爬蟲(chóng)d)java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:douban頁(yè)面解析:在openresty虛擬機上搭建python爬蟲(chóng)示例數據庫有:jdbc、sqlite、mysql-redis四種方式數據庫(數據格式):數據庫選擇:本次頁(yè)面數據處理為pandas數據庫存儲:douban.pymysql.postgresql數據庫:mysql、sqlite、sqlite3圖片網(wǎng)站:b.針對不同站點(diǎn)抓取抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據。
a)針對不同的站點(diǎn)抓取抓取得到的頁(yè)面數據格式會(huì )不同,所以要采用不同的方法來(lái)對數據處理,即需要通過(guò)分詞、去重等方法來(lái)處理數據;b)有些網(wǎng)站提供了python爬蟲(chóng)接口,例如,新浪博客類(lèi),這種網(wǎng)站并沒(méi)有提供python爬蟲(chóng)接口,所以需要采用“xpath”來(lái)解析數據。a爬蟲(chóng)語(yǔ)言選擇方案:cpicker爬蟲(chóng)scrapy爬蟲(chóng)d)java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:方案:java爬蟲(chóng)中對頁(yè)面信息分詞與去重如下:。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(如何用c語(yǔ)言去抓取網(wǎng)頁(yè)數據?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 59 次瀏覽 ? 2022-01-26 22:01
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,一般是無(wú)序列表,有序列表就是典型的有順序的,有序列表可以說(shuō)是無(wú)序的了,就是從a開(kāi)始,全部都是編號為1的數據。通過(guò)c語(yǔ)言寫(xiě)網(wǎng)頁(yè)爬蟲(chóng)的同學(xué),可能也見(jiàn)過(guò)這樣的有序網(wǎng)頁(yè)的html格式。常用的抓取python網(wǎng)頁(yè)爬蟲(chóng),最常用的方法之一,就是用mongoose實(shí)現。我個(gè)人在學(xué)習的時(shí)候,研究的是如何用c語(yǔ)言去抓取文本數據,這里說(shuō)的文本數據,是特指網(wǎng)頁(yè)中自帶的數據,主要是intel歷史ip之類(lèi)的數據。
我們平時(shí)爬取網(wǎng)頁(yè)文本數據,爬取新聞數據,其實(shí)都是從網(wǎng)頁(yè)的excel表中查詢(xún)的。那么如何用c語(yǔ)言去抓取html表格數據呢?其實(shí)也很簡(jiǎn)單,只要簡(jiǎn)單的帶個(gè)簡(jiǎn)單循環(huán)的循環(huán)就可以了。首先我們要知道,html格式包含了什么,簡(jiǎn)單來(lái)說(shuō)就是在互聯(lián)網(wǎng)上,只要html中出現一個(gè)特定的網(wǎng)址,就可以在瀏覽器上訪(fǎng)問(wèn)到對應的網(wǎng)頁(yè)數據。
一般的,在瀏覽器瀏覽的時(shí)候,經(jīng)常會(huì )碰到這樣的網(wǎng)址,即/#/doctype/none-transform/plain/text/html/xhtml/1.0///get.html。這樣的網(wǎng)址,就代表了對應的網(wǎng)頁(yè)文本,網(wǎng)頁(yè)里面的頁(yè)面鏈接,可以在瀏覽器里面查到。因此,我們用c語(yǔ)言去抓取這樣的網(wǎng)址,就會(huì )獲得對應的頁(yè)面鏈接。
雖然大家會(huì )發(fā)現,html的網(wǎng)址還可以自定義內容,但是,這種情況實(shí)在是不常見(jiàn),我們也不一定能夠自定義。所以,我們可以說(shuō),在一定條件下,能獲取到網(wǎng)頁(yè)數據的網(wǎng)址,就可以獲取對應的頁(yè)面數據。經(jīng)過(guò)實(shí)踐,我發(fā)現非常有限,很難有可以自定義頁(yè)面的網(wǎng)址,這是無(wú)法獲取自定義的頁(yè)面數據的原因。所以我們下面來(lái)說(shuō)明,能自定義的頁(yè)面網(wǎng)址,可以在哪些有關(guān)html的框架中找到。
在我正式的寫(xiě)開(kāi)發(fā)的時(shí)候,我使用python來(lái)做項目。為了自己寫(xiě)好代碼,需要編寫(xiě)各種的基礎代碼,一方面是測試不同的包可以實(shí)現同樣的功能,但另一方面,就是不斷給自己編寫(xiě)各種的命令行,來(lái)讓自己的python理解起來(lái)更加高效,本文就是為了后者而寫(xiě)的。在編寫(xiě)一些命令行上的命令的時(shí)候,可能會(huì )感覺(jué)特別不爽,因為它們經(jīng)常會(huì )讓你碰到一些很痛苦的東西。
比如說(shuō)命令行中有一個(gè)清除內存的命令,我經(jīng)常要寫(xiě)自己不需要的shell語(yǔ)句,寫(xiě)各種的set然后賦值,我對于這些命令肯定有一些抵觸。但如果把它對應在python中,我直接將對應的命令寫(xiě)進(jìn)tab鍵里,就可以在python中直接寫(xiě)內存了。有時(shí),需要寫(xiě)一些命令行注釋?zhuān)倚枰獙?xiě)上多個(gè)tab鍵,后面加上一個(gè)大括號,來(lái)表示,我在這里沒(méi)有做,就可以被注釋掉。另外,我還經(jīng)常為了避免python代碼遇到一些復雜的shell語(yǔ)句,需要多寫(xiě)一個(gè)tab鍵來(lái)啟動(dòng)其它的。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(如何用c語(yǔ)言去抓取網(wǎng)頁(yè)數據?(圖))
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據,一般是無(wú)序列表,有序列表就是典型的有順序的,有序列表可以說(shuō)是無(wú)序的了,就是從a開(kāi)始,全部都是編號為1的數據。通過(guò)c語(yǔ)言寫(xiě)網(wǎng)頁(yè)爬蟲(chóng)的同學(xué),可能也見(jiàn)過(guò)這樣的有序網(wǎng)頁(yè)的html格式。常用的抓取python網(wǎng)頁(yè)爬蟲(chóng),最常用的方法之一,就是用mongoose實(shí)現。我個(gè)人在學(xué)習的時(shí)候,研究的是如何用c語(yǔ)言去抓取文本數據,這里說(shuō)的文本數據,是特指網(wǎng)頁(yè)中自帶的數據,主要是intel歷史ip之類(lèi)的數據。
我們平時(shí)爬取網(wǎng)頁(yè)文本數據,爬取新聞數據,其實(shí)都是從網(wǎng)頁(yè)的excel表中查詢(xún)的。那么如何用c語(yǔ)言去抓取html表格數據呢?其實(shí)也很簡(jiǎn)單,只要簡(jiǎn)單的帶個(gè)簡(jiǎn)單循環(huán)的循環(huán)就可以了。首先我們要知道,html格式包含了什么,簡(jiǎn)單來(lái)說(shuō)就是在互聯(lián)網(wǎng)上,只要html中出現一個(gè)特定的網(wǎng)址,就可以在瀏覽器上訪(fǎng)問(wèn)到對應的網(wǎng)頁(yè)數據。
一般的,在瀏覽器瀏覽的時(shí)候,經(jīng)常會(huì )碰到這樣的網(wǎng)址,即/#/doctype/none-transform/plain/text/html/xhtml/1.0///get.html。這樣的網(wǎng)址,就代表了對應的網(wǎng)頁(yè)文本,網(wǎng)頁(yè)里面的頁(yè)面鏈接,可以在瀏覽器里面查到。因此,我們用c語(yǔ)言去抓取這樣的網(wǎng)址,就會(huì )獲得對應的頁(yè)面鏈接。
雖然大家會(huì )發(fā)現,html的網(wǎng)址還可以自定義內容,但是,這種情況實(shí)在是不常見(jiàn),我們也不一定能夠自定義。所以,我們可以說(shuō),在一定條件下,能獲取到網(wǎng)頁(yè)數據的網(wǎng)址,就可以獲取對應的頁(yè)面數據。經(jīng)過(guò)實(shí)踐,我發(fā)現非常有限,很難有可以自定義頁(yè)面的網(wǎng)址,這是無(wú)法獲取自定義的頁(yè)面數據的原因。所以我們下面來(lái)說(shuō)明,能自定義的頁(yè)面網(wǎng)址,可以在哪些有關(guān)html的框架中找到。
在我正式的寫(xiě)開(kāi)發(fā)的時(shí)候,我使用python來(lái)做項目。為了自己寫(xiě)好代碼,需要編寫(xiě)各種的基礎代碼,一方面是測試不同的包可以實(shí)現同樣的功能,但另一方面,就是不斷給自己編寫(xiě)各種的命令行,來(lái)讓自己的python理解起來(lái)更加高效,本文就是為了后者而寫(xiě)的。在編寫(xiě)一些命令行上的命令的時(shí)候,可能會(huì )感覺(jué)特別不爽,因為它們經(jīng)常會(huì )讓你碰到一些很痛苦的東西。
比如說(shuō)命令行中有一個(gè)清除內存的命令,我經(jīng)常要寫(xiě)自己不需要的shell語(yǔ)句,寫(xiě)各種的set然后賦值,我對于這些命令肯定有一些抵觸。但如果把它對應在python中,我直接將對應的命令寫(xiě)進(jìn)tab鍵里,就可以在python中直接寫(xiě)內存了。有時(shí),需要寫(xiě)一些命令行注釋?zhuān)倚枰獙?xiě)上多個(gè)tab鍵,后面加上一個(gè)大括號,來(lái)表示,我在這里沒(méi)有做,就可以被注釋掉。另外,我還經(jīng)常為了避免python代碼遇到一些復雜的shell語(yǔ)句,需要多寫(xiě)一個(gè)tab鍵來(lái)啟動(dòng)其它的。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(跳出細節信息,只有極少數是自己關(guān)心的(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-01-26 11:02
使用的包主要有:
Requests 具有良好的樹(shù)狀分析特性,可以省去正則表達式帶來(lái)的麻煩。打算學(xué)習urllib,熟悉爬蟲(chóng)的一般特性。如果加載成功,則說(shuō)明對應的包已經(jīng)安裝完畢。
C-程序管理
運行—>配置,設置.py文件的存放路徑:
三、頁(yè)面爬?。ㄒ韵禄趐ython2.7,3.5類(lèi)似)
跳出細節,先想想爬取需要哪些操作:
第一步:爬取頁(yè)面信息
打開(kāi)一個(gè)網(wǎng)頁(yè)的過(guò)程可以簡(jiǎn)化為:HTTP是用戶(hù)發(fā)出的請求—>對方返回協(xié)議—>頁(yè)面被解析顯示。
對于景觀(guān) 網(wǎng)站,使用基本的 python 爬取代碼:
import urllib2
def download(url):
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
url = 'http://www.onlytease.com/'
page = download(url)
print page
關(guān)于解碼信息,打開(kāi)網(wǎng)頁(yè)按F12,可以在頭部下拉列表中看到編碼方式,解碼與之對應。
至此,已經(jīng)實(shí)現了基礎網(wǎng)頁(yè)的爬取功能。然而,只有少數整頁(yè)關(guān)注自己?;A框架的搭建只剩下一個(gè)問(wèn)題:如何爬取你想要的內容。
第二步:定位目標信息
打開(kāi)任意網(wǎng)頁(yè)(以chrome為例),選擇感興趣的內容,右鍵:勾選(或快捷鍵:Crtl + shift + I),即可查看對應詳情:
例如選擇一張圖片:
查看電腦User-agent的方式有很多種,可以直接登錄網(wǎng)站。
這是人類(lèi)觀(guān)察的一種方式。如果要自動(dòng)定位目標信息,可以使用正則表達式、beautifulsoup等工具。請參閱此 文章 以了解常見(jiàn)的正則表達式。
第三步:編寫(xiě)目標內容
拋開(kāi)前兩步,以圖片為例,大家可以在網(wǎng)上搜索python網(wǎng)頁(yè)圖片下載??淳唧w操作,文本/壓縮文件等。
url = 'http://pics.sc.chinaz.com/files/pic/pic9/201705/bpic1322.jpg'
f = open('1.jpg',"wb") #命名并打開(kāi)文件
req = urllib2.urlopen(url)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
這樣,網(wǎng)上的圖片進(jìn)入本地:
爬取小圖:
代碼:
import urllib2
import re
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
#Step2:獲取目標信息鏈接,我要的是jpg的鏈接
url = 'http://sc.chinaz.com/tupian/fengjingtupian.html'
page = download(url)
imglist = re.findall('src2="(.*?)"',page) #re.findall() 方法讀取html 中包含 imgre(正則表達式)的 數據
#Step3:文件保存至本地
i = 1
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
req = urllib2.urlopen(imgname)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
在包里:
為什么是src2而不是src,把下載的文本復制到txt文件,搜索.jpg,
我看到是src2,但是網(wǎng)頁(yè)是src:
以上爬取的是一頁(yè)圖片。如果你想得到總數怎么辦?您可以通過(guò)正則表達式匹配和計算總頁(yè)數??纯此?br /> 打開(kāi)網(wǎng)站,一共找到2217頁(yè):
除了第一頁(yè)有點(diǎn)不同:
其他人跟隨等等:
好的,現在進(jìn)一步改進(jìn)代碼:
import urllib2
import re
import numpy as np
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
urllen = 2217
tag = np.arange(1,urllen+1)
base = 'http://sc.chinaz.com/tupian/'
i = 1
for j in tag:
if j==1:
url = base+'index.html'
else:
url = base+'index_'+str(j)+'.html'
page = download(url)
imglist = re.findall('src2="(.*?)"',page) #re.findall() 方法讀取html的.jpg鏈接
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
req = urllib2.urlopen(imgname)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
f.close()
已成功下載:
有一個(gè)問(wèn)題:
未設置超時(shí)參數。結果,當網(wǎng)絡(luò )環(huán)境不好的時(shí)候,經(jīng)常會(huì )出現read()方法沒(méi)有響應的問(wèn)題。程序卡在 read() 方法中。為 urlopen 添加超時(shí)是可以的。設置 timeout 后超時(shí)后,會(huì )在讀取超時(shí)時(shí)拋出 socket.timeout 異常。如果希望程序穩定,需要在urlopen中加入異常處理,出現異常時(shí)重試。
修改這句話(huà):
html = urllib2.urlopen(request,timeout=2).read()
問(wèn)題解決了。
但是還有其他錯誤:
參考下圖,添加異常處理,問(wèn)題解決。
四、渲染動(dòng)態(tài)網(wǎng)頁(yè)抓取
python工具包可以在這里下載。安裝selenium工具包,安裝好,在python2中單獨下載:cssselect,顧名思義,css+select就是第一個(gè)css樣式選擇。
這里只記錄應用,偷懶:使用selenium+phantomjs的爬取方式。
phantomjs簡(jiǎn)介:
PhantomJS 是一個(gè)基于 WebKit 的服務(wù)器端 JavaScript API。它完全支持沒(méi)有瀏覽器支持的 Web,并且速度很快并且原生支持各種 Web 標準:DOM 操作、CSS 選擇器、JSON、Canvas 和 SVG。PhantomJS 可用于頁(yè)面自動(dòng)化、網(wǎng)絡(luò )監控、網(wǎng)頁(yè)截圖和 UI 測試。
很多網(wǎng)頁(yè)不會(huì )一次加載全部?jì)热?,如果每次都刷新?yè)面也不理想,所以借助動(dòng)態(tài)加載,可以看到只有這部分內容加載到了哪里。Phantomjs可以在不打開(kāi)瀏覽器的情況下獲取加載后的網(wǎng)頁(yè)內容,這樣可以通過(guò)urllib2.請求操作讀取網(wǎng)頁(yè)的全部?jì)热?,而不是?dòng)態(tài)加載的內容.
注意兩點(diǎn):
1-phantomjs的\bin需要在環(huán)境變量PATH中添加絕對路徑;
2-在代碼中:在路徑前添加 r
browser = webdriver.PhantomJS(executable_path=r"C:\Users\Nobleding\Anaconda3\Lib\site-packages\phantomjs-2.1.1-windows\bin\phantomjs.exe")
#coding=utf-8
from selenium import webdriver
import re
import urllib2
browser = webdriver.PhantomJS(executable_path=r"C:\Users\Nobleding\Anaconda3\Lib\site-packages\phantomjs-2.1.1-windows\bin\phantomjs.exe")
browser.implicitly_wait(50)
#browser.get("https://www.baidu.com/")
urllink = "網(wǎng)址名稱(chēng)"
browser.get(urllink)
page = browser.execute_script("return document.documentElement.outerHTML")
imglist = re.findall('src=(.*?).jpg', page) #re.findall() 方法讀取html的.jpg鏈接
i=1
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
try:
imglink = imgname+'.jpg'
n = len(imglink)
req = urllib2.urlopen(imglink[1:n],timeout = 3)
except urllib2.URLError, e:
print 'error:', e.reason
continue
except socket.error as e:
continue
except socket.timeout as e:
continue
except urllib2.HTTPError:
continue
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
f.close()
基于urllib2/urllib3/urllib,經(jīng)常報超時(shí)錯誤。直接使用requests更直接,不再報超時(shí)錯誤:
<p># -*- coding: utf-8 -*-
"""
Created on Sun May 07 09:48:39 2017
@author: Nobleding
"""
import requests
import re
import socket
import numpy as np
import urllib
from socket import timeout
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
# request = requests.Request(url,headers = headers)
try:
htmll = requests.get(url,headers=header)
html = htmll.text
# except requests.URLError:
# print ('error:')
# html = None
except socket.error as e:
html = None
except socket.timeout as e:
html = None
except urllib.request.HTTPError:
html = None
return html
urlmain =網(wǎng)址
pagemain = download(urlmain)
#pagemain = pagemain.decode('utf-8')
imglistmain = re.findall(' 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(跳出細節信息,只有極少數是自己關(guān)心的(組圖))
使用的包主要有:
Requests 具有良好的樹(shù)狀分析特性,可以省去正則表達式帶來(lái)的麻煩。打算學(xué)習urllib,熟悉爬蟲(chóng)的一般特性。如果加載成功,則說(shuō)明對應的包已經(jīng)安裝完畢。

C-程序管理
運行—>配置,設置.py文件的存放路徑:

三、頁(yè)面爬?。ㄒ韵禄趐ython2.7,3.5類(lèi)似)
跳出細節,先想想爬取需要哪些操作:
第一步:爬取頁(yè)面信息
打開(kāi)一個(gè)網(wǎng)頁(yè)的過(guò)程可以簡(jiǎn)化為:HTTP是用戶(hù)發(fā)出的請求—>對方返回協(xié)議—>頁(yè)面被解析顯示。
對于景觀(guān) 網(wǎng)站,使用基本的 python 爬取代碼:
import urllib2
def download(url):
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
url = 'http://www.onlytease.com/'
page = download(url)
print page
關(guān)于解碼信息,打開(kāi)網(wǎng)頁(yè)按F12,可以在頭部下拉列表中看到編碼方式,解碼與之對應。

至此,已經(jīng)實(shí)現了基礎網(wǎng)頁(yè)的爬取功能。然而,只有少數整頁(yè)關(guān)注自己?;A框架的搭建只剩下一個(gè)問(wèn)題:如何爬取你想要的內容。
第二步:定位目標信息
打開(kāi)任意網(wǎng)頁(yè)(以chrome為例),選擇感興趣的內容,右鍵:勾選(或快捷鍵:Crtl + shift + I),即可查看對應詳情:
例如選擇一張圖片:

查看電腦User-agent的方式有很多種,可以直接登錄網(wǎng)站。
這是人類(lèi)觀(guān)察的一種方式。如果要自動(dòng)定位目標信息,可以使用正則表達式、beautifulsoup等工具。請參閱此 文章 以了解常見(jiàn)的正則表達式。
第三步:編寫(xiě)目標內容
拋開(kāi)前兩步,以圖片為例,大家可以在網(wǎng)上搜索python網(wǎng)頁(yè)圖片下載??淳唧w操作,文本/壓縮文件等。
url = 'http://pics.sc.chinaz.com/files/pic/pic9/201705/bpic1322.jpg'
f = open('1.jpg',"wb") #命名并打開(kāi)文件
req = urllib2.urlopen(url)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
這樣,網(wǎng)上的圖片進(jìn)入本地:

爬取小圖:

代碼:
import urllib2
import re
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
#Step2:獲取目標信息鏈接,我要的是jpg的鏈接
url = 'http://sc.chinaz.com/tupian/fengjingtupian.html'
page = download(url)
imglist = re.findall('src2="(.*?)"',page) #re.findall() 方法讀取html 中包含 imgre(正則表達式)的 數據
#Step3:文件保存至本地
i = 1
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
req = urllib2.urlopen(imgname)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
在包里:

為什么是src2而不是src,把下載的文本復制到txt文件,搜索.jpg,

我看到是src2,但是網(wǎng)頁(yè)是src:

以上爬取的是一頁(yè)圖片。如果你想得到總數怎么辦?您可以通過(guò)正則表達式匹配和計算總頁(yè)數??纯此?br /> 打開(kāi)網(wǎng)站,一共找到2217頁(yè):

除了第一頁(yè)有點(diǎn)不同:

其他人跟隨等等:

好的,現在進(jìn)一步改進(jìn)代碼:
import urllib2
import re
import numpy as np
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
request = urllib2.Request(url,headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print 'error:', e.reason
html = None
return html
urllen = 2217
tag = np.arange(1,urllen+1)
base = 'http://sc.chinaz.com/tupian/'
i = 1
for j in tag:
if j==1:
url = base+'index.html'
else:
url = base+'index_'+str(j)+'.html'
page = download(url)
imglist = re.findall('src2="(.*?)"',page) #re.findall() 方法讀取html的.jpg鏈接
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
req = urllib2.urlopen(imgname)
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
f.close()
已成功下載:

有一個(gè)問(wèn)題:
未設置超時(shí)參數。結果,當網(wǎng)絡(luò )環(huán)境不好的時(shí)候,經(jīng)常會(huì )出現read()方法沒(méi)有響應的問(wèn)題。程序卡在 read() 方法中。為 urlopen 添加超時(shí)是可以的。設置 timeout 后超時(shí)后,會(huì )在讀取超時(shí)時(shí)拋出 socket.timeout 異常。如果希望程序穩定,需要在urlopen中加入異常處理,出現異常時(shí)重試。
修改這句話(huà):
html = urllib2.urlopen(request,timeout=2).read()
問(wèn)題解決了。
但是還有其他錯誤:

參考下圖,添加異常處理,問(wèn)題解決。
四、渲染動(dòng)態(tài)網(wǎng)頁(yè)抓取
python工具包可以在這里下載。安裝selenium工具包,安裝好,在python2中單獨下載:cssselect,顧名思義,css+select就是第一個(gè)css樣式選擇。
這里只記錄應用,偷懶:使用selenium+phantomjs的爬取方式。
phantomjs簡(jiǎn)介:
PhantomJS 是一個(gè)基于 WebKit 的服務(wù)器端 JavaScript API。它完全支持沒(méi)有瀏覽器支持的 Web,并且速度很快并且原生支持各種 Web 標準:DOM 操作、CSS 選擇器、JSON、Canvas 和 SVG。PhantomJS 可用于頁(yè)面自動(dòng)化、網(wǎng)絡(luò )監控、網(wǎng)頁(yè)截圖和 UI 測試。
很多網(wǎng)頁(yè)不會(huì )一次加載全部?jì)热?,如果每次都刷新?yè)面也不理想,所以借助動(dòng)態(tài)加載,可以看到只有這部分內容加載到了哪里。Phantomjs可以在不打開(kāi)瀏覽器的情況下獲取加載后的網(wǎng)頁(yè)內容,這樣可以通過(guò)urllib2.請求操作讀取網(wǎng)頁(yè)的全部?jì)热?,而不是?dòng)態(tài)加載的內容.
注意兩點(diǎn):
1-phantomjs的\bin需要在環(huán)境變量PATH中添加絕對路徑;
2-在代碼中:在路徑前添加 r
browser = webdriver.PhantomJS(executable_path=r"C:\Users\Nobleding\Anaconda3\Lib\site-packages\phantomjs-2.1.1-windows\bin\phantomjs.exe")
#coding=utf-8
from selenium import webdriver
import re
import urllib2
browser = webdriver.PhantomJS(executable_path=r"C:\Users\Nobleding\Anaconda3\Lib\site-packages\phantomjs-2.1.1-windows\bin\phantomjs.exe")
browser.implicitly_wait(50)
#browser.get("https://www.baidu.com/")
urllink = "網(wǎng)址名稱(chēng)"
browser.get(urllink)
page = browser.execute_script("return document.documentElement.outerHTML")
imglist = re.findall('src=(.*?).jpg', page) #re.findall() 方法讀取html的.jpg鏈接
i=1
for imgname in imglist:
f = open('.\\sightsee\\'+str(i)+'.jpg',"wb") #命名并打開(kāi)文件
print i
i = i+1
try:
imglink = imgname+'.jpg'
n = len(imglink)
req = urllib2.urlopen(imglink[1:n],timeout = 3)
except urllib2.URLError, e:
print 'error:', e.reason
continue
except socket.error as e:
continue
except socket.timeout as e:
continue
except urllib2.HTTPError:
continue
buf = req.read() #讀出文件
f.write(buf) #寫(xiě)入文件
f.close()
基于urllib2/urllib3/urllib,經(jīng)常報超時(shí)錯誤。直接使用requests更直接,不再報超時(shí)錯誤:
<p># -*- coding: utf-8 -*-
"""
Created on Sun May 07 09:48:39 2017
@author: Nobleding
"""
import requests
import re
import socket
import numpy as np
import urllib
from socket import timeout
def download(url): #Step1:讀取網(wǎng)頁(yè)內容
header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
# request = requests.Request(url,headers = headers)
try:
htmll = requests.get(url,headers=header)
html = htmll.text
# except requests.URLError:
# print ('error:')
# html = None
except socket.error as e:
html = None
except socket.timeout as e:
html = None
except urllib.request.HTTPError:
html = None
return html
urlmain =網(wǎng)址
pagemain = download(urlmain)
#pagemain = pagemain.decode('utf-8')
imglistmain = re.findall('
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(爬蟲(chóng)在數據分析領(lǐng)域的應用,如何幫助我們提升數據分析質(zhì)量)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 115 次瀏覽 ? 2022-01-25 10:10
在當今信息化和數字化的時(shí)代,人們離不開(kāi)網(wǎng)絡(luò )搜索,但想想看,在搜索過(guò)程中,你真的可以得到相關(guān)信息,因為有人在幫你過(guò)濾相關(guān)內容,呈現在你面前。
就像在餐館里一樣,你點(diǎn)了土豆然后得到它們,因為有人幫你在土豆、蘿卜、西紅柿等中找到它們,然后有人把它們帶到你的餐桌上。在網(wǎng)上,這兩個(gè)動(dòng)作是一個(gè)叫爬蟲(chóng)的同學(xué)為你實(shí)現的。
也就是說(shuō),沒(méi)有爬蟲(chóng),就沒(méi)有今天的檢索,就無(wú)法準確查找信息和高效獲取數據。今天DataHunter就來(lái)談?wù)勁老x(chóng)在數據分析領(lǐng)域的應用,以及它如何幫助我們提高數據分析的質(zhì)量。
一、數據時(shí)代,爬蟲(chóng)的本質(zhì)是提高效率
網(wǎng)絡(luò )爬蟲(chóng),又稱(chēng)網(wǎng)絡(luò )機器人,可以代替人自動(dòng)瀏覽網(wǎng)絡(luò )信息,采集和組織數據。
它是一個(gè)程序,其基本原理是向網(wǎng)站/網(wǎng)絡(luò )發(fā)起請求,獲取資源后分析提取有用數據。從技術(shù)上講,就是通過(guò)程序模擬瀏覽器請求站點(diǎn)的行為,將站點(diǎn)返回的HTML代碼/JSON數據/二進(jìn)制數據(圖片、視頻)爬取到本地,然后提取您需要的數據并將其存儲以供使用。
每個(gè)程序都有自己的規則,網(wǎng)絡(luò )爬蟲(chóng)也不例外。它穿梭于世界各地的各種網(wǎng)站之間,根據人們強加的規則將采集信息。我們稱(chēng)這些規則為網(wǎng)絡(luò )爬蟲(chóng)算法。規則是人定的,是人根據自己的目的和需要設計的。因此,根據用戶(hù)的目的,爬蟲(chóng)可以有不同的功能。但所有爬蟲(chóng)的本質(zhì)是方便人們在海量的互聯(lián)網(wǎng)信息中找到并下載自己想要的信息類(lèi)型,從而提高信息獲取效率。
二、爬蟲(chóng)的應用:搜索并幫助企業(yè)做強業(yè)務(wù)
1.搜索引擎:爬取網(wǎng)站為網(wǎng)絡(luò )用戶(hù)提供便利
在互聯(lián)網(wǎng)的早期,能夠提供全球范圍內信息的網(wǎng)站并不多,用戶(hù)也不多。Internet 只是文件傳輸協(xié)議 (FTP) 站點(diǎn)的集合,用戶(hù)可以導航這些站點(diǎn)以查找特定的共享文件,并查找和組合 Internet 上可用的分布式數據,創(chuàng )建了一個(gè)稱(chēng)為網(wǎng)絡(luò )爬蟲(chóng)的自動(dòng)化程序 /Robot,它可以爬取網(wǎng)絡(luò )上的所有網(wǎng)頁(yè),然后將所有頁(yè)面的內容復制到數據庫中進(jìn)行索引。這也是最早的搜索引擎。
如今,隨著(zhù)互聯(lián)網(wǎng)的飛速發(fā)展,我們可以在任何搜索引擎中看到來(lái)自世界各地各種網(wǎng)站的信息。百度搜索引擎的爬蟲(chóng)叫百度蜘蛛,360的爬蟲(chóng)叫360Spider,搜狗的爬蟲(chóng)叫搜狗蜘蛛,必應的爬蟲(chóng)叫Bingbot。搜索引擎離不開(kāi)爬蟲(chóng)。
比如百度蜘蛛每天都會(huì )抓取大量的互聯(lián)網(wǎng)信息,抓取優(yōu)質(zhì)信息和收錄。當用戶(hù)在百度搜索引擎上搜索對應的關(guān)鍵詞時(shí),百度會(huì )對關(guān)鍵詞進(jìn)行分析處理,從收錄的網(wǎng)頁(yè)中找出相關(guān)網(wǎng)頁(yè),按照一定的排名規則和結果展示給用戶(hù),工作原理如圖?,F在,我們可以大膽地說(shuō),你每天都在免費享受爬蟲(chóng)的好處。
2.企業(yè):監控輿情,高效獲取有價(jià)值信息
我們說(shuō)過(guò)爬蟲(chóng)的本質(zhì)是提高效率,而爬蟲(chóng)的規則是由人決定的;那么企業(yè)就可以根據自己的業(yè)務(wù)需求設計爬蟲(chóng),第一時(shí)間獲取網(wǎng)絡(luò )上的相關(guān)信息,進(jìn)行清理整合。
做大數據時(shí)代的數據分析,首先要有數據源,網(wǎng)絡(luò )爬蟲(chóng)可以讓我們獲取更多的數據源,同時(shí)根據我們的目的進(jìn)行采集,從而去除很多的無(wú)關(guān)數據。
例如,在進(jìn)行大數據分析或數據挖掘時(shí),可以從一些提供數據統計的網(wǎng)站s,或者從某些文檔或內部資料中獲取數據源。但是,這些獲取數據的方式有時(shí)很難滿(mǎn)足我們的數據需求。此時(shí),我們可以利用爬蟲(chóng)技術(shù)從互聯(lián)網(wǎng)上自動(dòng)獲取更多我們感興趣的數據內容,從而進(jìn)行更深入的數據分析,獲取更多有價(jià)值的信息。
此外,網(wǎng)絡(luò )爬蟲(chóng)還可用于財務(wù)分析,對財務(wù)數據進(jìn)行采集進(jìn)行投資分析;可應用于輿情監測分析、精準客戶(hù)精準營(yíng)銷(xiāo)等各個(gè)領(lǐng)域。
三、企業(yè)常用的4種網(wǎng)絡(luò )爬蟲(chóng)
網(wǎng)絡(luò )爬蟲(chóng)根據實(shí)現的技術(shù)和結構可以分為一般網(wǎng)絡(luò )爬蟲(chóng)、聚焦網(wǎng)絡(luò )爬蟲(chóng)、增量網(wǎng)絡(luò )爬蟲(chóng)和深度網(wǎng)絡(luò )爬蟲(chóng)。但由于網(wǎng)絡(luò )環(huán)境復雜,實(shí)際的網(wǎng)絡(luò )爬蟲(chóng)通常是這幾種爬蟲(chóng)的組合。
1.萬(wàn)能網(wǎng)絡(luò )爬蟲(chóng)
通用網(wǎng)絡(luò )爬蟲(chóng)也稱(chēng)為全網(wǎng)絡(luò )爬蟲(chóng)。顧名思義,要爬取的目標資源在整個(gè)互聯(lián)網(wǎng)上,要爬取的目標數據是巨大的,爬取的范圍也很大。正是因為爬取的數據是海量數據,所以對于這種爬蟲(chóng)來(lái)說(shuō),對爬取的性能要求是非常高的。這種網(wǎng)絡(luò )爬蟲(chóng)主要用于大型搜索引擎,具有很高的應用價(jià)值。
一般的網(wǎng)絡(luò )爬蟲(chóng)主要由初始URL采集、URL隊列、頁(yè)面爬取模塊、頁(yè)面分析模塊、頁(yè)面數據庫、鏈接過(guò)濾模塊等組成。一般網(wǎng)絡(luò )爬蟲(chóng)在爬取時(shí)會(huì )采用一定的爬取策略,主要包括深度優(yōu)先爬取策略和廣度優(yōu)先爬取策略。具體細節將在后面介紹。
2.專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng)
聚焦網(wǎng)絡(luò )爬蟲(chóng),也稱(chēng)為主題網(wǎng)絡(luò )爬蟲(chóng),是根據預先定義的主題有選擇地爬取網(wǎng)頁(yè)的爬蟲(chóng)。聚焦網(wǎng)絡(luò )爬蟲(chóng)主要用于爬取特定信息,主要為特定類(lèi)型的人提供服務(wù)。
聚焦網(wǎng)絡(luò )爬蟲(chóng)也是由初始URL集合、URL隊列、頁(yè)面爬取模塊、頁(yè)面分析模塊、頁(yè)面數據庫、鏈接過(guò)濾模塊、內容評價(jià)模塊、鏈接評價(jià)模塊等組成。內容評估模塊和鏈接評估模塊可以根據鏈接和內容的重要性確定優(yōu)先訪(fǎng)問(wèn)哪些頁(yè)面。專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng)的爬取策略主要有四種,如圖:
由于專(zhuān)注的網(wǎng)絡(luò )爬蟲(chóng)可以有目的地根據相應的主題進(jìn)行爬取,在實(shí)際應用過(guò)程中可以節省大量的服務(wù)器資源和寬帶資源,因此具有很強的實(shí)用性。這里我們以網(wǎng)絡(luò )爬蟲(chóng)為例來(lái)了解爬蟲(chóng)運行的工作原理和過(guò)程。
如圖所示,焦點(diǎn)網(wǎng)絡(luò )爬蟲(chóng)有一個(gè)控制中心,負責管理和監控整個(gè)爬蟲(chóng)系統,包括控制用戶(hù)交互、初始化爬蟲(chóng)、確定主題、協(xié)調各個(gè)模塊之間的工作以及控制整個(gè)爬蟲(chóng)系統。爬行過(guò)程。等等:
(1)控制中心將初始URL集合傳遞給URL隊列,頁(yè)面爬取模塊會(huì )從URL隊列中讀取第一批URL列表;
(2)根據這些URL地址,從網(wǎng)上爬取對應的頁(yè)面;爬取后,將爬取的內容發(fā)送到頁(yè)面數據庫進(jìn)行存儲;
(3)在爬取過(guò)程中,會(huì )爬取一些新的URL,此時(shí)需要使用鏈接過(guò)濾模塊,根據指定的主題過(guò)濾掉不相關(guān)的鏈接,然后使用鏈接評價(jià)模塊進(jìn)行根據主題剩余的URL鏈接?;蛘邇热菰u估模塊進(jìn)行優(yōu)先排序,完成后將新的URL地址傳遞給URL隊列,供頁(yè)面爬取模塊使用;
?。?)在頁(yè)面庫中爬取并存入頁(yè)面后,需要使用頁(yè)面分析模塊根據主題對爬取的頁(yè)面進(jìn)行分析處理,并根據處理結果建立索引庫。當用戶(hù)檢索到相應的信息,就可以從索引數據庫中進(jìn)行相應的檢索,得到相應的結果。
3.增量網(wǎng)絡(luò )爬蟲(chóng)
這里的“incremental”對應于增量更新,意思是在更新過(guò)程中只更新變化的地方,不變的地方不更新。
增量網(wǎng)絡(luò )爬蟲(chóng),在爬取網(wǎng)頁(yè)時(shí),只爬取內容發(fā)生變化的網(wǎng)頁(yè)或新生成的網(wǎng)頁(yè),不會(huì )爬取內容未發(fā)生變化的網(wǎng)頁(yè)。增量網(wǎng)絡(luò )爬蟲(chóng)可以在一定程度上保證爬取的頁(yè)面盡可能的新。
4.深網(wǎng)爬蟲(chóng)
在互聯(lián)網(wǎng)中,網(wǎng)頁(yè)根據存在的程度可以分為表層頁(yè)面和深層頁(yè)面。表面頁(yè)面是指無(wú)需提交表單,使用靜態(tài)鏈接即可到達的靜態(tài)頁(yè)面;而深頁(yè)是提交某個(gè)關(guān)鍵詞后才能獲得的頁(yè)面。在 Internet 中,深層頁(yè)面的數量通常遠大于表面頁(yè)面的數量。
深網(wǎng)爬蟲(chóng)可以爬取互聯(lián)網(wǎng)中的深層頁(yè)面,而要爬取深層頁(yè)面,就需要想辦法自動(dòng)填寫(xiě)相應的表格。深網(wǎng)爬蟲(chóng)主要由 URL 列表、LVS 列表(LVS 指標簽/值集合,即填充表單的數據源)、爬取控制器、解析器、LVS 控制器、表單分析器、表單處理器、響應分析器和其他部分。
四、網(wǎng)絡(luò )爬蟲(chóng)的爬取策略
前面我們說(shuō)過(guò),網(wǎng)絡(luò )爬蟲(chóng)算法是基于人對采集信息施加的規則,由于網(wǎng)絡(luò )環(huán)境復雜,算法也多種多樣,也就是爬取策略。這里主要介紹爬取的順序和頻率。
1.爬取順序
網(wǎng)絡(luò )爬蟲(chóng)在爬取過(guò)程中,可能會(huì )出現在爬取的URL列表中的多個(gè)URL地址,因此爬蟲(chóng)會(huì )依次對這些URL地址進(jìn)行爬取。
與一般的網(wǎng)絡(luò )爬蟲(chóng)相比,爬取的順序并不那么重要。但專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng),爬取的順序與服務(wù)器資源和寬帶資源有關(guān),所以非常重要,一般由爬取策略決定。爬取策略主要包括深度優(yōu)先爬取策略、廣度優(yōu)先爬取策略、大站點(diǎn)優(yōu)先策略、反鏈策略等爬取策略。
如圖,假設有一個(gè)網(wǎng)站,ABCDEFG為站點(diǎn)下的網(wǎng)頁(yè),網(wǎng)頁(yè)的層次結構如圖所示。如果此時(shí)網(wǎng)頁(yè)ABCDEFG都在爬取隊列中,那么根據不同的爬取策略,爬取的順序是不同的。
深度優(yōu)先爬取策略:A→D→E→B→C→F→G
廣度優(yōu)先爬取策略:A→B→C→D→E→F→G
除了以上兩種爬取策略外,還可以使用大站點(diǎn)爬取策略??梢愿鶕鄳W(wǎng)頁(yè)所屬的站點(diǎn)進(jìn)行分類(lèi)。如果某個(gè)網(wǎng)站有大量的網(wǎng)頁(yè),則稱(chēng)為大站點(diǎn)。按照這個(gè)策略,網(wǎng)站擁有的網(wǎng)頁(yè)越多,則越大,優(yōu)先抓取該網(wǎng)頁(yè)在大站點(diǎn)中的URL地址。
此外,還有反向鏈接策略。一個(gè)網(wǎng)頁(yè)的反向鏈接數是指該網(wǎng)頁(yè)被其他網(wǎng)頁(yè)指向的次數。這個(gè)次數代表了該網(wǎng)頁(yè)在一定程度上被其他網(wǎng)頁(yè)推薦的次數。因此,如果按照反向鏈接策略進(jìn)行爬取,那么哪個(gè)網(wǎng)頁(yè)的反向鏈接多,就會(huì )先爬到哪個(gè)頁(yè)面。
但是,在實(shí)際情況中,如果一個(gè)網(wǎng)頁(yè)的優(yōu)先級只是簡(jiǎn)單地由反向鏈接策略來(lái)決定的話(huà),就可能會(huì )出現很多作弊的情況。因此,采用反向鏈接策略需要考慮可靠反向鏈接的數量。除了以上的爬取策略,實(shí)踐中還有很多其他的爬取策略,比如OPIC策略、Partial PageRank策略等等。
2.爬取頻率
網(wǎng)站 網(wǎng)頁(yè)經(jīng)常更新。作為爬蟲(chóng),網(wǎng)站的更新頻率越接近爬蟲(chóng)訪(fǎng)問(wèn)網(wǎng)站的頻率,效果越好。當然,在爬蟲(chóng)服務(wù)器資源有限的情況下,爬蟲(chóng)還需要根據相應的策略,讓不同的網(wǎng)頁(yè)有不同的更新優(yōu)先級。優(yōu)先級高的網(wǎng)頁(yè)會(huì )更新得更快,爬取響應也會(huì )更快。常見(jiàn)的網(wǎng)頁(yè)更新策略有以下三種:
(1)用戶(hù)體驗策略:大部分用戶(hù)使用搜索引擎查詢(xún)某個(gè)關(guān)鍵詞時(shí),只會(huì )關(guān)注排名靠前的網(wǎng)頁(yè)。因此,當爬蟲(chóng)服務(wù)器資源有限時(shí),爬蟲(chóng)會(huì )優(yōu)先更新排名靠前的頁(yè)面。
(2)歷史數據策略:是指根據某個(gè)網(wǎng)頁(yè)的歷史更新數據,通過(guò)泊松過(guò)程建模等手段,預測該網(wǎng)頁(yè)下次更新時(shí)間,從而確定下一次更新時(shí)間的能力。 time 抓取網(wǎng)頁(yè)所用的時(shí)間。
(3)聚類(lèi)分析策略:網(wǎng)頁(yè)可能有不同的內容,但一般來(lái)說(shuō),屬性相似的網(wǎng)頁(yè)更新頻率相似,所以可以對大量的網(wǎng)頁(yè)進(jìn)行聚類(lèi)。爬取的頻率根據設置同類(lèi)型網(wǎng)頁(yè)的平均更新值。
五、網(wǎng)絡(luò )爬蟲(chóng)的實(shí)現技術(shù)
對于實(shí)現技術(shù),本文不展開(kāi),只為有興趣的同學(xué)提供幾種常用語(yǔ)言:Python、Java、PHP、Node.JS、C++、Go語(yǔ)言(另外還有很多開(kāi)發(fā)語(yǔ)言用于網(wǎng)絡(luò )爬蟲(chóng))。
Python:爬蟲(chóng)框架非常豐富,多線(xiàn)程處理能力強,而且易學(xué),代碼簡(jiǎn)潔,優(yōu)點(diǎn)很多。
Java:適合開(kāi)發(fā)大型爬蟲(chóng)項目。
PHP:后端處理能力很強,代碼很簡(jiǎn)潔,模塊豐富,但是并發(fā)能力比較弱。
Node.JS:支持高并發(fā)和多線(xiàn)程。
C++:運行速度快,適合開(kāi)發(fā)大型爬蟲(chóng)項目,成本高。
Go語(yǔ)言:同樣的高并發(fā)能力很強。
六、總結
說(shuō)到爬蟲(chóng),很多人認為它們是網(wǎng)絡(luò )世界中不可能存在的灰色地帶。恭喜你,看完這篇文章,你比很多人都知道。
因為爬蟲(chóng)分為良性爬蟲(chóng)和惡意爬蟲(chóng),比如搜索引擎爬蟲(chóng)。Goodwill爬蟲(chóng)嚴格遵守Robots協(xié)議規范爬取網(wǎng)頁(yè)數據(如URL),它的存在可以增加網(wǎng)站的曝光度,給網(wǎng)站帶來(lái)流量;
惡意爬蟲(chóng),無(wú)視Robots協(xié)議,肆意爬取網(wǎng)站中一些深度不情愿的數據,包括個(gè)人隱私或商業(yè)機密等重要信息。而惡意爬蟲(chóng)的用戶(hù)想要多次大量地從網(wǎng)站獲取信息,所以通常會(huì )在目標網(wǎng)站上投放大量爬蟲(chóng)。如果大量爬蟲(chóng)同時(shí)訪(fǎng)問(wèn)網(wǎng)站,很容易導致網(wǎng)站服務(wù)器超載或崩潰,導致網(wǎng)站算子丟失。
據統計,2017年我國42.2%的互聯(lián)網(wǎng)流量是由網(wǎng)絡(luò )機器人創(chuàng )造的,其中惡意機器(主要是惡意爬蟲(chóng))占21.80%。我們應該合法合理地使用網(wǎng)絡(luò )爬蟲(chóng),這樣才能用科技為企業(yè)帶來(lái)長(cháng)遠發(fā)展,用科學(xué)為社會(huì )創(chuàng )造更高的價(jià)值。
關(guān)于數據獵人
DataHunter是一家專(zhuān)業(yè)的數據分析和商業(yè)智能服務(wù)商,注冊于2014年,團隊核心成員來(lái)自IBM、Oracle、SAP等知名企業(yè),深耕大數據分析領(lǐng)域和擁有十余年豐富的企業(yè)服務(wù)經(jīng)驗。
DataHunter的核心產(chǎn)品Data Analytics智能數據分析平臺和數據大屏設計配置工具Data MAX在行業(yè)中形成了自己的獨特優(yōu)勢,在各行業(yè)積累了眾多標桿客戶(hù)和成功案例.
自成立以來(lái),DataHunter一直致力于為客戶(hù)提供實(shí)時(shí)、高效、智能的數據分析與展示解決方案,幫助企業(yè)查看和分析數據,改善業(yè)務(wù),成為最值得信賴(lài)的數據業(yè)務(wù)公司。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(爬蟲(chóng)在數據分析領(lǐng)域的應用,如何幫助我們提升數據分析質(zhì)量)
在當今信息化和數字化的時(shí)代,人們離不開(kāi)網(wǎng)絡(luò )搜索,但想想看,在搜索過(guò)程中,你真的可以得到相關(guān)信息,因為有人在幫你過(guò)濾相關(guān)內容,呈現在你面前。

就像在餐館里一樣,你點(diǎn)了土豆然后得到它們,因為有人幫你在土豆、蘿卜、西紅柿等中找到它們,然后有人把它們帶到你的餐桌上。在網(wǎng)上,這兩個(gè)動(dòng)作是一個(gè)叫爬蟲(chóng)的同學(xué)為你實(shí)現的。
也就是說(shuō),沒(méi)有爬蟲(chóng),就沒(méi)有今天的檢索,就無(wú)法準確查找信息和高效獲取數據。今天DataHunter就來(lái)談?wù)勁老x(chóng)在數據分析領(lǐng)域的應用,以及它如何幫助我們提高數據分析的質(zhì)量。
一、數據時(shí)代,爬蟲(chóng)的本質(zhì)是提高效率
網(wǎng)絡(luò )爬蟲(chóng),又稱(chēng)網(wǎng)絡(luò )機器人,可以代替人自動(dòng)瀏覽網(wǎng)絡(luò )信息,采集和組織數據。
它是一個(gè)程序,其基本原理是向網(wǎng)站/網(wǎng)絡(luò )發(fā)起請求,獲取資源后分析提取有用數據。從技術(shù)上講,就是通過(guò)程序模擬瀏覽器請求站點(diǎn)的行為,將站點(diǎn)返回的HTML代碼/JSON數據/二進(jìn)制數據(圖片、視頻)爬取到本地,然后提取您需要的數據并將其存儲以供使用。

每個(gè)程序都有自己的規則,網(wǎng)絡(luò )爬蟲(chóng)也不例外。它穿梭于世界各地的各種網(wǎng)站之間,根據人們強加的規則將采集信息。我們稱(chēng)這些規則為網(wǎng)絡(luò )爬蟲(chóng)算法。規則是人定的,是人根據自己的目的和需要設計的。因此,根據用戶(hù)的目的,爬蟲(chóng)可以有不同的功能。但所有爬蟲(chóng)的本質(zhì)是方便人們在海量的互聯(lián)網(wǎng)信息中找到并下載自己想要的信息類(lèi)型,從而提高信息獲取效率。
二、爬蟲(chóng)的應用:搜索并幫助企業(yè)做強業(yè)務(wù)
1.搜索引擎:爬取網(wǎng)站為網(wǎng)絡(luò )用戶(hù)提供便利
在互聯(lián)網(wǎng)的早期,能夠提供全球范圍內信息的網(wǎng)站并不多,用戶(hù)也不多。Internet 只是文件傳輸協(xié)議 (FTP) 站點(diǎn)的集合,用戶(hù)可以導航這些站點(diǎn)以查找特定的共享文件,并查找和組合 Internet 上可用的分布式數據,創(chuàng )建了一個(gè)稱(chēng)為網(wǎng)絡(luò )爬蟲(chóng)的自動(dòng)化程序 /Robot,它可以爬取網(wǎng)絡(luò )上的所有網(wǎng)頁(yè),然后將所有頁(yè)面的內容復制到數據庫中進(jìn)行索引。這也是最早的搜索引擎。

如今,隨著(zhù)互聯(lián)網(wǎng)的飛速發(fā)展,我們可以在任何搜索引擎中看到來(lái)自世界各地各種網(wǎng)站的信息。百度搜索引擎的爬蟲(chóng)叫百度蜘蛛,360的爬蟲(chóng)叫360Spider,搜狗的爬蟲(chóng)叫搜狗蜘蛛,必應的爬蟲(chóng)叫Bingbot。搜索引擎離不開(kāi)爬蟲(chóng)。
比如百度蜘蛛每天都會(huì )抓取大量的互聯(lián)網(wǎng)信息,抓取優(yōu)質(zhì)信息和收錄。當用戶(hù)在百度搜索引擎上搜索對應的關(guān)鍵詞時(shí),百度會(huì )對關(guān)鍵詞進(jìn)行分析處理,從收錄的網(wǎng)頁(yè)中找出相關(guān)網(wǎng)頁(yè),按照一定的排名規則和結果展示給用戶(hù),工作原理如圖?,F在,我們可以大膽地說(shuō),你每天都在免費享受爬蟲(chóng)的好處。

2.企業(yè):監控輿情,高效獲取有價(jià)值信息
我們說(shuō)過(guò)爬蟲(chóng)的本質(zhì)是提高效率,而爬蟲(chóng)的規則是由人決定的;那么企業(yè)就可以根據自己的業(yè)務(wù)需求設計爬蟲(chóng),第一時(shí)間獲取網(wǎng)絡(luò )上的相關(guān)信息,進(jìn)行清理整合。
做大數據時(shí)代的數據分析,首先要有數據源,網(wǎng)絡(luò )爬蟲(chóng)可以讓我們獲取更多的數據源,同時(shí)根據我們的目的進(jìn)行采集,從而去除很多的無(wú)關(guān)數據。

例如,在進(jìn)行大數據分析或數據挖掘時(shí),可以從一些提供數據統計的網(wǎng)站s,或者從某些文檔或內部資料中獲取數據源。但是,這些獲取數據的方式有時(shí)很難滿(mǎn)足我們的數據需求。此時(shí),我們可以利用爬蟲(chóng)技術(shù)從互聯(lián)網(wǎng)上自動(dòng)獲取更多我們感興趣的數據內容,從而進(jìn)行更深入的數據分析,獲取更多有價(jià)值的信息。
此外,網(wǎng)絡(luò )爬蟲(chóng)還可用于財務(wù)分析,對財務(wù)數據進(jìn)行采集進(jìn)行投資分析;可應用于輿情監測分析、精準客戶(hù)精準營(yíng)銷(xiāo)等各個(gè)領(lǐng)域。
三、企業(yè)常用的4種網(wǎng)絡(luò )爬蟲(chóng)
網(wǎng)絡(luò )爬蟲(chóng)根據實(shí)現的技術(shù)和結構可以分為一般網(wǎng)絡(luò )爬蟲(chóng)、聚焦網(wǎng)絡(luò )爬蟲(chóng)、增量網(wǎng)絡(luò )爬蟲(chóng)和深度網(wǎng)絡(luò )爬蟲(chóng)。但由于網(wǎng)絡(luò )環(huán)境復雜,實(shí)際的網(wǎng)絡(luò )爬蟲(chóng)通常是這幾種爬蟲(chóng)的組合。
1.萬(wàn)能網(wǎng)絡(luò )爬蟲(chóng)
通用網(wǎng)絡(luò )爬蟲(chóng)也稱(chēng)為全網(wǎng)絡(luò )爬蟲(chóng)。顧名思義,要爬取的目標資源在整個(gè)互聯(lián)網(wǎng)上,要爬取的目標數據是巨大的,爬取的范圍也很大。正是因為爬取的數據是海量數據,所以對于這種爬蟲(chóng)來(lái)說(shuō),對爬取的性能要求是非常高的。這種網(wǎng)絡(luò )爬蟲(chóng)主要用于大型搜索引擎,具有很高的應用價(jià)值。

一般的網(wǎng)絡(luò )爬蟲(chóng)主要由初始URL采集、URL隊列、頁(yè)面爬取模塊、頁(yè)面分析模塊、頁(yè)面數據庫、鏈接過(guò)濾模塊等組成。一般網(wǎng)絡(luò )爬蟲(chóng)在爬取時(shí)會(huì )采用一定的爬取策略,主要包括深度優(yōu)先爬取策略和廣度優(yōu)先爬取策略。具體細節將在后面介紹。
2.專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng)
聚焦網(wǎng)絡(luò )爬蟲(chóng),也稱(chēng)為主題網(wǎng)絡(luò )爬蟲(chóng),是根據預先定義的主題有選擇地爬取網(wǎng)頁(yè)的爬蟲(chóng)。聚焦網(wǎng)絡(luò )爬蟲(chóng)主要用于爬取特定信息,主要為特定類(lèi)型的人提供服務(wù)。
聚焦網(wǎng)絡(luò )爬蟲(chóng)也是由初始URL集合、URL隊列、頁(yè)面爬取模塊、頁(yè)面分析模塊、頁(yè)面數據庫、鏈接過(guò)濾模塊、內容評價(jià)模塊、鏈接評價(jià)模塊等組成。內容評估模塊和鏈接評估模塊可以根據鏈接和內容的重要性確定優(yōu)先訪(fǎng)問(wèn)哪些頁(yè)面。專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng)的爬取策略主要有四種,如圖:

由于專(zhuān)注的網(wǎng)絡(luò )爬蟲(chóng)可以有目的地根據相應的主題進(jìn)行爬取,在實(shí)際應用過(guò)程中可以節省大量的服務(wù)器資源和寬帶資源,因此具有很強的實(shí)用性。這里我們以網(wǎng)絡(luò )爬蟲(chóng)為例來(lái)了解爬蟲(chóng)運行的工作原理和過(guò)程。

如圖所示,焦點(diǎn)網(wǎng)絡(luò )爬蟲(chóng)有一個(gè)控制中心,負責管理和監控整個(gè)爬蟲(chóng)系統,包括控制用戶(hù)交互、初始化爬蟲(chóng)、確定主題、協(xié)調各個(gè)模塊之間的工作以及控制整個(gè)爬蟲(chóng)系統。爬行過(guò)程。等等:
(1)控制中心將初始URL集合傳遞給URL隊列,頁(yè)面爬取模塊會(huì )從URL隊列中讀取第一批URL列表;
(2)根據這些URL地址,從網(wǎng)上爬取對應的頁(yè)面;爬取后,將爬取的內容發(fā)送到頁(yè)面數據庫進(jìn)行存儲;
(3)在爬取過(guò)程中,會(huì )爬取一些新的URL,此時(shí)需要使用鏈接過(guò)濾模塊,根據指定的主題過(guò)濾掉不相關(guān)的鏈接,然后使用鏈接評價(jià)模塊進(jìn)行根據主題剩余的URL鏈接?;蛘邇热菰u估模塊進(jìn)行優(yōu)先排序,完成后將新的URL地址傳遞給URL隊列,供頁(yè)面爬取模塊使用;
?。?)在頁(yè)面庫中爬取并存入頁(yè)面后,需要使用頁(yè)面分析模塊根據主題對爬取的頁(yè)面進(jìn)行分析處理,并根據處理結果建立索引庫。當用戶(hù)檢索到相應的信息,就可以從索引數據庫中進(jìn)行相應的檢索,得到相應的結果。
3.增量網(wǎng)絡(luò )爬蟲(chóng)
這里的“incremental”對應于增量更新,意思是在更新過(guò)程中只更新變化的地方,不變的地方不更新。
增量網(wǎng)絡(luò )爬蟲(chóng),在爬取網(wǎng)頁(yè)時(shí),只爬取內容發(fā)生變化的網(wǎng)頁(yè)或新生成的網(wǎng)頁(yè),不會(huì )爬取內容未發(fā)生變化的網(wǎng)頁(yè)。增量網(wǎng)絡(luò )爬蟲(chóng)可以在一定程度上保證爬取的頁(yè)面盡可能的新。
4.深網(wǎng)爬蟲(chóng)
在互聯(lián)網(wǎng)中,網(wǎng)頁(yè)根據存在的程度可以分為表層頁(yè)面和深層頁(yè)面。表面頁(yè)面是指無(wú)需提交表單,使用靜態(tài)鏈接即可到達的靜態(tài)頁(yè)面;而深頁(yè)是提交某個(gè)關(guān)鍵詞后才能獲得的頁(yè)面。在 Internet 中,深層頁(yè)面的數量通常遠大于表面頁(yè)面的數量。

深網(wǎng)爬蟲(chóng)可以爬取互聯(lián)網(wǎng)中的深層頁(yè)面,而要爬取深層頁(yè)面,就需要想辦法自動(dòng)填寫(xiě)相應的表格。深網(wǎng)爬蟲(chóng)主要由 URL 列表、LVS 列表(LVS 指標簽/值集合,即填充表單的數據源)、爬取控制器、解析器、LVS 控制器、表單分析器、表單處理器、響應分析器和其他部分。
四、網(wǎng)絡(luò )爬蟲(chóng)的爬取策略
前面我們說(shuō)過(guò),網(wǎng)絡(luò )爬蟲(chóng)算法是基于人對采集信息施加的規則,由于網(wǎng)絡(luò )環(huán)境復雜,算法也多種多樣,也就是爬取策略。這里主要介紹爬取的順序和頻率。
1.爬取順序
網(wǎng)絡(luò )爬蟲(chóng)在爬取過(guò)程中,可能會(huì )出現在爬取的URL列表中的多個(gè)URL地址,因此爬蟲(chóng)會(huì )依次對這些URL地址進(jìn)行爬取。
與一般的網(wǎng)絡(luò )爬蟲(chóng)相比,爬取的順序并不那么重要。但專(zhuān)注于網(wǎng)絡(luò )爬蟲(chóng),爬取的順序與服務(wù)器資源和寬帶資源有關(guān),所以非常重要,一般由爬取策略決定。爬取策略主要包括深度優(yōu)先爬取策略、廣度優(yōu)先爬取策略、大站點(diǎn)優(yōu)先策略、反鏈策略等爬取策略。

如圖,假設有一個(gè)網(wǎng)站,ABCDEFG為站點(diǎn)下的網(wǎng)頁(yè),網(wǎng)頁(yè)的層次結構如圖所示。如果此時(shí)網(wǎng)頁(yè)ABCDEFG都在爬取隊列中,那么根據不同的爬取策略,爬取的順序是不同的。
深度優(yōu)先爬取策略:A→D→E→B→C→F→G
廣度優(yōu)先爬取策略:A→B→C→D→E→F→G
除了以上兩種爬取策略外,還可以使用大站點(diǎn)爬取策略??梢愿鶕鄳W(wǎng)頁(yè)所屬的站點(diǎn)進(jìn)行分類(lèi)。如果某個(gè)網(wǎng)站有大量的網(wǎng)頁(yè),則稱(chēng)為大站點(diǎn)。按照這個(gè)策略,網(wǎng)站擁有的網(wǎng)頁(yè)越多,則越大,優(yōu)先抓取該網(wǎng)頁(yè)在大站點(diǎn)中的URL地址。
此外,還有反向鏈接策略。一個(gè)網(wǎng)頁(yè)的反向鏈接數是指該網(wǎng)頁(yè)被其他網(wǎng)頁(yè)指向的次數。這個(gè)次數代表了該網(wǎng)頁(yè)在一定程度上被其他網(wǎng)頁(yè)推薦的次數。因此,如果按照反向鏈接策略進(jìn)行爬取,那么哪個(gè)網(wǎng)頁(yè)的反向鏈接多,就會(huì )先爬到哪個(gè)頁(yè)面。
但是,在實(shí)際情況中,如果一個(gè)網(wǎng)頁(yè)的優(yōu)先級只是簡(jiǎn)單地由反向鏈接策略來(lái)決定的話(huà),就可能會(huì )出現很多作弊的情況。因此,采用反向鏈接策略需要考慮可靠反向鏈接的數量。除了以上的爬取策略,實(shí)踐中還有很多其他的爬取策略,比如OPIC策略、Partial PageRank策略等等。
2.爬取頻率
網(wǎng)站 網(wǎng)頁(yè)經(jīng)常更新。作為爬蟲(chóng),網(wǎng)站的更新頻率越接近爬蟲(chóng)訪(fǎng)問(wèn)網(wǎng)站的頻率,效果越好。當然,在爬蟲(chóng)服務(wù)器資源有限的情況下,爬蟲(chóng)還需要根據相應的策略,讓不同的網(wǎng)頁(yè)有不同的更新優(yōu)先級。優(yōu)先級高的網(wǎng)頁(yè)會(huì )更新得更快,爬取響應也會(huì )更快。常見(jiàn)的網(wǎng)頁(yè)更新策略有以下三種:

(1)用戶(hù)體驗策略:大部分用戶(hù)使用搜索引擎查詢(xún)某個(gè)關(guān)鍵詞時(shí),只會(huì )關(guān)注排名靠前的網(wǎng)頁(yè)。因此,當爬蟲(chóng)服務(wù)器資源有限時(shí),爬蟲(chóng)會(huì )優(yōu)先更新排名靠前的頁(yè)面。
(2)歷史數據策略:是指根據某個(gè)網(wǎng)頁(yè)的歷史更新數據,通過(guò)泊松過(guò)程建模等手段,預測該網(wǎng)頁(yè)下次更新時(shí)間,從而確定下一次更新時(shí)間的能力。 time 抓取網(wǎng)頁(yè)所用的時(shí)間。
(3)聚類(lèi)分析策略:網(wǎng)頁(yè)可能有不同的內容,但一般來(lái)說(shuō),屬性相似的網(wǎng)頁(yè)更新頻率相似,所以可以對大量的網(wǎng)頁(yè)進(jìn)行聚類(lèi)。爬取的頻率根據設置同類(lèi)型網(wǎng)頁(yè)的平均更新值。
五、網(wǎng)絡(luò )爬蟲(chóng)的實(shí)現技術(shù)
對于實(shí)現技術(shù),本文不展開(kāi),只為有興趣的同學(xué)提供幾種常用語(yǔ)言:Python、Java、PHP、Node.JS、C++、Go語(yǔ)言(另外還有很多開(kāi)發(fā)語(yǔ)言用于網(wǎng)絡(luò )爬蟲(chóng))。
Python:爬蟲(chóng)框架非常豐富,多線(xiàn)程處理能力強,而且易學(xué),代碼簡(jiǎn)潔,優(yōu)點(diǎn)很多。
Java:適合開(kāi)發(fā)大型爬蟲(chóng)項目。
PHP:后端處理能力很強,代碼很簡(jiǎn)潔,模塊豐富,但是并發(fā)能力比較弱。
Node.JS:支持高并發(fā)和多線(xiàn)程。
C++:運行速度快,適合開(kāi)發(fā)大型爬蟲(chóng)項目,成本高。
Go語(yǔ)言:同樣的高并發(fā)能力很強。
六、總結
說(shuō)到爬蟲(chóng),很多人認為它們是網(wǎng)絡(luò )世界中不可能存在的灰色地帶。恭喜你,看完這篇文章,你比很多人都知道。
因為爬蟲(chóng)分為良性爬蟲(chóng)和惡意爬蟲(chóng),比如搜索引擎爬蟲(chóng)。Goodwill爬蟲(chóng)嚴格遵守Robots協(xié)議規范爬取網(wǎng)頁(yè)數據(如URL),它的存在可以增加網(wǎng)站的曝光度,給網(wǎng)站帶來(lái)流量;

惡意爬蟲(chóng),無(wú)視Robots協(xié)議,肆意爬取網(wǎng)站中一些深度不情愿的數據,包括個(gè)人隱私或商業(yè)機密等重要信息。而惡意爬蟲(chóng)的用戶(hù)想要多次大量地從網(wǎng)站獲取信息,所以通常會(huì )在目標網(wǎng)站上投放大量爬蟲(chóng)。如果大量爬蟲(chóng)同時(shí)訪(fǎng)問(wèn)網(wǎng)站,很容易導致網(wǎng)站服務(wù)器超載或崩潰,導致網(wǎng)站算子丟失。
據統計,2017年我國42.2%的互聯(lián)網(wǎng)流量是由網(wǎng)絡(luò )機器人創(chuàng )造的,其中惡意機器(主要是惡意爬蟲(chóng))占21.80%。我們應該合法合理地使用網(wǎng)絡(luò )爬蟲(chóng),這樣才能用科技為企業(yè)帶來(lái)長(cháng)遠發(fā)展,用科學(xué)為社會(huì )創(chuàng )造更高的價(jià)值。
關(guān)于數據獵人
DataHunter是一家專(zhuān)業(yè)的數據分析和商業(yè)智能服務(wù)商,注冊于2014年,團隊核心成員來(lái)自IBM、Oracle、SAP等知名企業(yè),深耕大數據分析領(lǐng)域和擁有十余年豐富的企業(yè)服務(wù)經(jīng)驗。
DataHunter的核心產(chǎn)品Data Analytics智能數據分析平臺和數據大屏設計配置工具Data MAX在行業(yè)中形成了自己的獨特優(yōu)勢,在各行業(yè)積累了眾多標桿客戶(hù)和成功案例.

自成立以來(lái),DataHunter一直致力于為客戶(hù)提供實(shí)時(shí)、高效、智能的數據分析與展示解決方案,幫助企業(yè)查看和分析數據,改善業(yè)務(wù),成為最值得信賴(lài)的數據業(yè)務(wù)公司。
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(幾個(gè)適合新入門(mén)學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè),總有一款適合你!)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 67 次瀏覽 ? 2022-01-22 19:16
推薦幾個(gè)適合初學(xué)者學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè)??傆幸豢钸m合你!
廢話(huà)不多說(shuō),直接上干貨吧!
今日頭條圖集:抓包獲取json數據
打開(kāi)今日頭條首頁(yè),搜索小姐姐,或者其他你感興趣的內容,然后點(diǎn)擊圖庫
動(dòng)態(tài)加載的json數據出來(lái),沒(méi)有反爬,注意如果不想抓取內容中的圖片,只能抓取縮略圖,也就是本頁(yè)顯示的圖片,在json數據中的image_list,注意,把url中的list改成origin,就是大圖了!代碼顯示如下
Python學(xué)習交流群542110741
圖片地址全部出!
全書(shū)網(wǎng):直接源碼匹配相關(guān)內容
直接搜索全書(shū),打開(kāi)首頁(yè),找到一本小說(shuō),比如《盜墓筆記》,點(diǎn)擊跳轉網(wǎng)頁(yè),點(diǎn)擊開(kāi)始閱讀,所有章節出現,小說(shuō)內容、網(wǎng)頁(yè)內容和進(jìn)入章節后出現代碼。如下:
Python學(xué)習交流群542110741
80本電子書(shū):匹配地址直接下載壓縮文件
80 與上面的全書(shū)網(wǎng)類(lèi)似,但它本身提供了下載功能,可以直接構造下載文件、頁(yè)面截圖和帶有小說(shuō)ID和名稱(chēng)的代碼:
Python學(xué)習交流群542110741
其他類(lèi)似網(wǎng)站
類(lèi)似的網(wǎng)站還有:美子圖、美拓、筆趣閣、九九等,連百度圖片也可以通過(guò)抓包獲取數據!
以上代碼都是手寫(xiě)的,沒(méi)有排版。如果你有興趣,你可以自己打字?;蛘弑热缧≌f(shuō)網(wǎng)站,你可以先抓取大類(lèi),然后獲取每個(gè)類(lèi)的所有小說(shuō),最后把每個(gè)類(lèi)的所有小說(shuō)。抓出小說(shuō)的內容,這就是全站爬蟲(chóng)?。?!
如果你還有其他合適的網(wǎng)站,希望你可以在評論區分享!一起交流吧! 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(幾個(gè)適合新入門(mén)學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè),總有一款適合你!)
推薦幾個(gè)適合初學(xué)者學(xué)習Python爬蟲(chóng)的網(wǎng)頁(yè)??傆幸豢钸m合你!
廢話(huà)不多說(shuō),直接上干貨吧!
今日頭條圖集:抓包獲取json數據
打開(kāi)今日頭條首頁(yè),搜索小姐姐,或者其他你感興趣的內容,然后點(diǎn)擊圖庫
動(dòng)態(tài)加載的json數據出來(lái),沒(méi)有反爬,注意如果不想抓取內容中的圖片,只能抓取縮略圖,也就是本頁(yè)顯示的圖片,在json數據中的image_list,注意,把url中的list改成origin,就是大圖了!代碼顯示如下
Python學(xué)習交流群542110741
圖片地址全部出!
全書(shū)網(wǎng):直接源碼匹配相關(guān)內容
直接搜索全書(shū),打開(kāi)首頁(yè),找到一本小說(shuō),比如《盜墓筆記》,點(diǎn)擊跳轉網(wǎng)頁(yè),點(diǎn)擊開(kāi)始閱讀,所有章節出現,小說(shuō)內容、網(wǎng)頁(yè)內容和進(jìn)入章節后出現代碼。如下:
Python學(xué)習交流群542110741
80本電子書(shū):匹配地址直接下載壓縮文件
80 與上面的全書(shū)網(wǎng)類(lèi)似,但它本身提供了下載功能,可以直接構造下載文件、頁(yè)面截圖和帶有小說(shuō)ID和名稱(chēng)的代碼:
Python學(xué)習交流群542110741
其他類(lèi)似網(wǎng)站
類(lèi)似的網(wǎng)站還有:美子圖、美拓、筆趣閣、九九等,連百度圖片也可以通過(guò)抓包獲取數據!
以上代碼都是手寫(xiě)的,沒(méi)有排版。如果你有興趣,你可以自己打字?;蛘弑热缧≌f(shuō)網(wǎng)站,你可以先抓取大類(lèi),然后獲取每個(gè)類(lèi)的所有小說(shuō),最后把每個(gè)類(lèi)的所有小說(shuō)。抓出小說(shuō)的內容,這就是全站爬蟲(chóng)?。?!
如果你還有其他合適的網(wǎng)站,希望你可以在評論區分享!一起交流吧!
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(python網(wǎng)絡(luò )爬蟲(chóng)-爬取網(wǎng)頁(yè)的三種方式10.抓取數據)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 70 次瀏覽 ? 2022-01-21 07:20
Python網(wǎng)絡(luò )爬蟲(chóng)——爬取網(wǎng)頁(yè)的三種方式
10.前言0.1 爬取網(wǎng)頁(yè)本文將介紹三種爬取網(wǎng)頁(yè)數據的方式:正則表達式、BeautifulSoup、lxml。有關(guān)用于獲取 Web 內容的代碼的詳細信息,請參閱 Python Web Crawler - Your First Crawler。使用此代碼來(lái)抓取整個(gè)網(wǎng)頁(yè)。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
20.2 爬取目標爬取網(wǎng)頁(yè)上所有顯示的內容。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
3 分析網(wǎng)頁(yè)的結構,我們可以看到所有的內容都在標簽中。以面積為例,我們可以看到面積的值為:
7,686,850平方公里
根據這個(gè)結構,我們用不同的方式來(lái)表達,就可以抓取到所有我們想要的數據。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
4Chrome瀏覽器可以輕松復制各種表情:
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
5 有了上面的下載功能和不同的表達方式,我們可以通過(guò)三種不同的方式抓取數據。1.以不同的方式爬取數據1.1 正則表達式爬取網(wǎng)頁(yè)正則表達式在python或其他語(yǔ)言中有很好的應用,用簡(jiǎn)單的規定符號來(lái)表達不同的字符串組成形式,簡(jiǎn)潔高效。學(xué)習正則表達式很有必要。Python 內置正則表達式,無(wú)需額外安裝。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
61.2BeautifulSoup爬取數據BeautifulSoup的使用可以在python網(wǎng)絡(luò )爬蟲(chóng)-BeautifulSoup爬取網(wǎng)絡(luò )數據中看到代碼如下:
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
71.3 lxml抓包數據
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
81.4 個(gè)運行結果
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
9 從結果可以看出,正則表達式在某些地方返回了額外的元素,而不是純文本。這是因為這些地方的網(wǎng)頁(yè)結構與其他地方不同,所以正則表達式不能完全覆蓋相同的內容,例如某些地方的鏈接和圖片。并且 BeautifulSoup 和 lxml 具有提取文本的特殊功能,因此不會(huì )出現類(lèi)似的錯誤。 查看全部
c爬蟲(chóng)抓取網(wǎng)頁(yè)數據(python網(wǎng)絡(luò )爬蟲(chóng)-爬取網(wǎng)頁(yè)的三種方式10.抓取數據)
Python網(wǎng)絡(luò )爬蟲(chóng)——爬取網(wǎng)頁(yè)的三種方式
10.前言0.1 爬取網(wǎng)頁(yè)本文將介紹三種爬取網(wǎng)頁(yè)數據的方式:正則表達式、BeautifulSoup、lxml。有關(guān)用于獲取 Web 內容的代碼的詳細信息,請參閱 Python Web Crawler - Your First Crawler。使用此代碼來(lái)抓取整個(gè)網(wǎng)頁(yè)。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
20.2 爬取目標爬取網(wǎng)頁(yè)上所有顯示的內容。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
3 分析網(wǎng)頁(yè)的結構,我們可以看到所有的內容都在標簽中。以面積為例,我們可以看到面積的值為:
7,686,850平方公里
根據這個(gè)結構,我們用不同的方式來(lái)表達,就可以抓取到所有我們想要的數據。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
4Chrome瀏覽器可以輕松復制各種表情:
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
5 有了上面的下載功能和不同的表達方式,我們可以通過(guò)三種不同的方式抓取數據。1.以不同的方式爬取數據1.1 正則表達式爬取網(wǎng)頁(yè)正則表達式在python或其他語(yǔ)言中有很好的應用,用簡(jiǎn)單的規定符號來(lái)表達不同的字符串組成形式,簡(jiǎn)潔高效。學(xué)習正則表達式很有必要。Python 內置正則表達式,無(wú)需額外安裝。
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
61.2BeautifulSoup爬取數據BeautifulSoup的使用可以在python網(wǎng)絡(luò )爬蟲(chóng)-BeautifulSoup爬取網(wǎng)絡(luò )數據中看到代碼如下:
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
71.3 lxml抓包數據
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
81.4 個(gè)運行結果
//style.80yiju.com/image_small/https://exp-picture.cdn.bcebos ... g.jpg
9 從結果可以看出,正則表達式在某些地方返回了額外的元素,而不是純文本。這是因為這些地方的網(wǎng)頁(yè)結構與其他地方不同,所以正則表達式不能完全覆蓋相同的內容,例如某些地方的鏈接和圖片。并且 BeautifulSoup 和 lxml 具有提取文本的特殊功能,因此不會(huì )出現類(lèi)似的錯誤。


