![基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第1頁(yè)](http://file4.renrendoc.com/view/8d3ed8a0118dc2dee1d5f50eb9a6965a/8d3ed8a0118dc2dee1d5f50eb9a6965a1.gif)
![基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第2頁(yè)](http://file4.renrendoc.com/view/8d3ed8a0118dc2dee1d5f50eb9a6965a/8d3ed8a0118dc2dee1d5f50eb9a6965a2.gif)
![基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第3頁(yè)](http://file4.renrendoc.com/view/8d3ed8a0118dc2dee1d5f50eb9a6965a/8d3ed8a0118dc2dee1d5f50eb9a6965a3.gif)
![基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第4頁(yè)](http://file4.renrendoc.com/view/8d3ed8a0118dc2dee1d5f50eb9a6965a/8d3ed8a0118dc2dee1d5f50eb9a6965a4.gif)
![基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第5頁(yè)](http://file4.renrendoc.com/view/8d3ed8a0118dc2dee1d5f50eb9a6965a/8d3ed8a0118dc2dee1d5f50eb9a6965a5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)摘要隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展和5G技術(shù)的投入建設(shè),信息在社會(huì)發(fā)展中起著至關(guān)重要的作用,具備著前所未有的價(jià)值。人們想要掌握最新的信息和了解社會(huì)的發(fā)展趨勢(shì),就要不斷遞增花在閱讀網(wǎng)絡(luò)信息的時(shí)間。怎么從浩瀚的信息海洋中迅速有效地提取所需信息已經(jīng)越來(lái)越重要。搜索引擎也隨著我們的需求而誕生和發(fā)展,它以爬蟲(chóng)技術(shù)為核心。為提高用戶訪問(wèn)網(wǎng)頁(yè)信息的效率,本設(shè)計(jì)基于Python的Scrapy爬蟲(chóng)框架和MySQL后臺(tái)數(shù)據(jù)庫(kù),以“百度新聞”為爬取對(duì)象,實(shí)現(xiàn)定時(shí)自動(dòng)抓取指定范圍的網(wǎng)頁(yè)信息并存儲(chǔ)到后臺(tái)數(shù)據(jù)庫(kù)中,并使用hashlib模塊過(guò)濾重復(fù)數(shù)據(jù)。關(guān)鍵詞:爬蟲(chóng)技術(shù)Scrapy爬蟲(chóng)框架MySQL數(shù)據(jù)庫(kù)定時(shí)自動(dòng)AutomaticnetworkinformationgrabbingsystembasedonPythonName:DiaoYangjianMajor:ElectronicInformationScienceandtechnologyInstructor:WanChanglin,AssistantResearcher(ElectronicInformationandElectricalEngineeringDepartmentofHuizhouUniversity,No.46,YandaAvenue,HuizhouCity,GuangdongProvince,516007)AbstractWiththerapiddevelopmentofmobileInternetandtheinvestmentof5gtechnology,informationplaysanimportantroleinthesocialdevelopmentandhasunprecedentedvalue.Ifpeoplewanttomasterthelatestinformationandunderstandthedevelopmenttrendofsociety,theyneedtospendmoreandmoretimereadingnetworkinformation.Howtoextracttheneededinformationfromthevastoceanofinformationquicklyandeffectivelyhasbecomemoreandmoreimportant.Searchengineisalsobornanddevelopedwithourneeds.Ittakescrawlertechnologyasthecore.Inordertoimprovetheefficiencyofusers'accesstowebinformation,thisdesignisbasedonPython'sscrapycrawlerframeworkandMySQLbackgrounddatabase,taking"Baidunews"asthecrawlingobject,torealizetheautomaticcrawlingofthespecifiedrangeofWebinformationandstorageinthebackgrounddatabase,andusehashlibmoduletofiltertheduplicatedata.Keywords:crawlertechnologyscrapycrawlerframeworkMySQLdatabasetimedautocrawl
目錄TOC\o"1-3"\h\u308471前言 前言1.1研究背景如今已經(jīng)是2020年,隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展和5G技術(shù)的投入建設(shè),移動(dòng)互聯(lián)網(wǎng)越來(lái)越普及,社會(huì)生活的基本方式正在悄無(wú)聲息的發(fā)生變化。當(dāng)今時(shí)代,互聯(lián)網(wǎng)越來(lái)越貼近人們的生活,已經(jīng)成為生活的必需品。人們的衣食住行都與互聯(lián)網(wǎng)息息相關(guān),不可分離。許多行業(yè)都深受互聯(lián)網(wǎng)的影響,即使是歷史悠久的傳統(tǒng)行業(yè)。在這個(gè)時(shí)代,信息就是金錢(qián),具備著前所未有的價(jià)值,已經(jīng)成為社會(huì)發(fā)展不可或缺的一部分。為了讓自己做出正確的判斷,我們要掌握最新的信息和了解社會(huì)的發(fā)展趨勢(shì),造成人們花在閱讀網(wǎng)絡(luò)信息的時(shí)間不斷遞增?;ヂ?lián)網(wǎng)是一個(gè)浩瀚的信息海洋,是大量信息的載體,怎么從海洋中迅速有效地提取所需信息是非常困難的,無(wú)異于大海撈針,更何況想要利用這些信息了。與此同時(shí),搜索引擎也隨著我們的需求而誕生和發(fā)展。1.2研究意義搜索引擎可以當(dāng)成是一個(gè)入口或者指南。它可以幫助人們從互聯(lián)網(wǎng)中搜索信息,是人們獲取互聯(lián)網(wǎng)資源的重要途徑,給人們帶來(lái)了便利。但是,局限性是通用性搜索引擎的最大缺點(diǎn)。例如,通用搜索引擎是通過(guò)關(guān)鍵字來(lái)搜索的,然后返回大量的數(shù)據(jù)信息給用戶,但是在這些信息中,并不都是用戶所關(guān)心和需要的數(shù)據(jù)信息,里面還有許多是用戶并不關(guān)心的數(shù)據(jù)信息。聚焦爬蟲(chóng)具有高度的可自定義性,可以幫助我們迅速有效的提取需要的信息。它按照程序設(shè)計(jì)者所設(shè)定的規(guī)則,有選擇的訪問(wèn)互聯(lián)網(wǎng)上的網(wǎng)頁(yè),或者是與之相關(guān)的鏈接。Scrapy爬蟲(chóng)框架可以讓聚焦爬蟲(chóng)的設(shè)計(jì)和工作變得更加方便。1.3研究?jī)?nèi)容本設(shè)計(jì)主要研究的內(nèi)容如下:獲取數(shù)據(jù):使用Scrapy框架對(duì)百度新聞網(wǎng)站首頁(yè)進(jìn)行訪問(wèn),獲取各欄目的新聞數(shù)據(jù)信息。數(shù)據(jù)存儲(chǔ):將各欄目的新聞數(shù)據(jù)信息存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫(kù)中。進(jìn)行數(shù)據(jù)的過(guò)濾去重:使用Python編程語(yǔ)言的hashlib庫(kù)的MD5算法,對(duì)獲取的新聞網(wǎng)頁(yè)URL進(jìn)行加密處理,得到唯一的32位的十六進(jìn)制字符串值,從而達(dá)到數(shù)據(jù)過(guò)濾去重的效果。定時(shí)爬取,更新數(shù)據(jù)庫(kù):使用Python編程語(yǔ)言的Time模塊,對(duì)爬蟲(chóng)進(jìn)程設(shè)置定時(shí)循環(huán),從而不斷更新數(shù)據(jù)庫(kù)的數(shù)據(jù)。
2設(shè)計(jì)原理以及相關(guān)技術(shù)介紹網(wǎng)絡(luò)爬蟲(chóng)是一段程序或者腳本。首先,分析百度新聞網(wǎng)站首頁(yè)的HTML代碼的規(guī)律,從而獲取初始的URL。其次,爬取初始的URL的內(nèi)容并分析HTML代碼規(guī)律,從而獲取百度新聞網(wǎng)站首頁(yè)的所有新聞網(wǎng)頁(yè)鏈接。然后,爬蟲(chóng)先訪問(wèn)獲得的新聞網(wǎng)頁(yè)鏈接。若能夠訪問(wèn)則自動(dòng)下載其中的內(nèi)容,再通過(guò)解析模塊,解析得到已爬取頁(yè)面中我們所需要的信息。接著,將所爬取到的信息存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫(kù)中,方便我們查詢信息和統(tǒng)計(jì)。最后,設(shè)置定時(shí)爬取,可以不斷的更新數(shù)據(jù)庫(kù)的數(shù)據(jù)。2.1Scrapy爬蟲(chóng)框架2.1.1Scrapy分析Scrapy是一套比較成熟的web爬蟲(chóng)框架。它可以用來(lái)爬取web數(shù)據(jù),也可以用來(lái)提取結(jié)構(gòu)性的數(shù)據(jù)。它讓網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)和工作變得更加方便。它的應(yīng)用范圍非常廣泛,例如,可以對(duì)大數(shù)據(jù)進(jìn)行深度挖掘,也可以對(duì)大批的信息進(jìn)行處理,還可以對(duì)歷史數(shù)據(jù)進(jìn)行存儲(chǔ)等。Scrapy具備很強(qiáng)的拓展性,可以靈活的完成許多需求。Scrapy整體框架由7個(gè)部分組成:(1)ScrapyEngine(引擎):引擎負(fù)責(zé)控制整個(gè)數(shù)據(jù)處理過(guò)程,以及觸發(fā)一些事務(wù)處理,控制和協(xié)調(diào)各個(gè)組件。(2)Scheduler(調(diào)度器):主要負(fù)責(zé)存儲(chǔ)待爬取的網(wǎng)址,并確定這些網(wǎng)址的優(yōu)先級(jí),決定下一次爬取哪個(gè)網(wǎng)址等。(3)Downloader(下載器):實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)上要爬取的網(wǎng)頁(yè)資源進(jìn)行高速下載。(4)Spider(爬蟲(chóng)):該組件是核心。它負(fù)責(zé)接收引擎中的response響應(yīng),然后對(duì)響應(yīng)進(jìn)行分析處理,提取出關(guān)注的數(shù)據(jù)。(5)ItemPipeline(項(xiàng)目管道):負(fù)責(zé)接收提取的item,然后對(duì)這些item進(jìn)行對(duì)應(yīng)的處理。(6)DownloaderMiddlewares(下載中間件):處于下載器和引擎之間,主要用于對(duì)下載器和引擎之間的通信進(jìn)行處理。(7)SpiderMiddlewares(爬蟲(chóng)中間件):處于引擎與爬蟲(chóng)組件之間,主要用于對(duì)爬蟲(chóng)組件和引擎之間的通信進(jìn)行處理。Scrapy基本運(yùn)行流程:首先,需要確定要爬取的目標(biāo),所以引擎先從調(diào)度器中選擇一個(gè)URL。引擎收到URL后,將其打包成一個(gè)請(qǐng)求,然后傳給下載器。下載器把資源下載下來(lái),將資源打包成應(yīng)答包。爬蟲(chóng)接收應(yīng)答包,再解析它,并使用回調(diào)函數(shù)。如果從該應(yīng)答包中解析出實(shí)體,再交給項(xiàng)目管道,然后才進(jìn)行進(jìn)一步的處理。如果解析出的結(jié)果是URL,則將新獲得的URL發(fā)送給調(diào)度器等待被調(diào)用抓取。2.2Robots協(xié)議2.2.1Robots協(xié)議簡(jiǎn)介Robots協(xié)議也稱(chēng)為爬蟲(chóng)協(xié)議。它存放于網(wǎng)站根目錄下,是一個(gè)ASCII編碼的純文本文件。它是互聯(lián)網(wǎng)行業(yè)中約定俗稱(chēng)的一種準(zhǔn)入規(guī)范,其目的在于告知所有的搜索引擎,在此網(wǎng)站中,哪部分內(nèi)容是允許被獲取的,哪部分內(nèi)容是不允許被獲取的。爬蟲(chóng)在進(jìn)入網(wǎng)站之前,首先要查看robots.txt。如果該文本文件存在,則解析其中的規(guī)則,然后再確定訪問(wèn)的范圍。如果該文本文件不存在,則說(shuō)明該網(wǎng)頁(yè)的所有數(shù)據(jù)都可訪問(wèn)。2.2.2協(xié)議的寫(xiě)法robots.txt放到網(wǎng)站根目錄下即可,一個(gè)robots.txt只能控制相同端口,相同站點(diǎn)的網(wǎng)頁(yè)抓取策略。常規(guī)寫(xiě)法如下:(1)User-agent:聲明哪些爬蟲(chóng)不允許訪問(wèn)此網(wǎng)站。(2)Disallow:聲明了哪些URL是禁止訪問(wèn)的,不允許任何爬蟲(chóng)進(jìn)入。2.2.3Robots協(xié)議的缺點(diǎn)及影響各網(wǎng)站設(shè)置了Robots協(xié)議以防止\t"/item/robots%E5%8D%8F%E8%AE%AE/_blank"搜索引擎機(jī)器人抓取敏感信息。但是它只是一個(gè)通告,需要搜索引擎機(jī)器人的配合,才可以使得\t"/item/robots%E5%8D%8F%E8%AE%AE/_blank"搜索引擎機(jī)器人受到限制,不允許抓取站點(diǎn)的內(nèi)容。但是,在實(shí)際情況中并不是每個(gè)ROBOTS都會(huì)自覺(jué)遵守的。若網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)者違背這個(gè)協(xié)議,偽裝成其他身份進(jìn)入,其設(shè)計(jì)的代碼也將能夠自由爬取站點(diǎn)中的資源。2.3正則表達(dá)式2.3.1簡(jiǎn)介正則表達(dá)式是一套規(guī)則,用于描述字符串排列。對(duì)于某些特定字符,或者是這些特定字符的組合,它可以預(yù)先定義好,形成一個(gè)“字符串”。它表示的是字符串的一種過(guò)濾邏輯,可用來(lái)檢查,判斷某個(gè)種子字符串是否存在于該字符串中,若存在,替換匹配的子字符串;它也可以應(yīng)用在從某個(gè)字符串中取出滿足某個(gè)條件的子字符串等。正則表達(dá)式能夠很容易地提取到我們需要的信息。2.3.2應(yīng)用場(chǎng)景(1)驗(yàn)證:表單提交時(shí),進(jìn)行用戶名密碼的驗(yàn)證。(2)查找:從大量信息中快速提取指定內(nèi)容,在一批url中,查找指定url。(3)替換:先對(duì)特定格式的文本進(jìn)行搜索,然后再進(jìn)行匹配,成功后再進(jìn)行特定的替換。2.3.3貪婪模式與懶惰模式(1)貪婪模式:re庫(kù)默認(rèn)采用貪婪模式,即正則表達(dá)式在匹配時(shí),會(huì)盡量多的匹配符合條件的內(nèi)容,輸出匹配最長(zhǎng)的子串。(2)懶惰模式:在正則表達(dá)式在匹配時(shí),會(huì)盡量少的匹配內(nèi)容。模式切換的方式:通過(guò)在“*”或者“+”限定符之后放置“?”。2.4XPath表達(dá)式2.4.1簡(jiǎn)介XPath是一種XML路徑語(yǔ)言。它是一種定位和處理可擴(kuò)展標(biāo)記語(yǔ)言XML文檔中項(xiàng)目的方法,主要是通過(guò)使用基于文檔邏輯結(jié)構(gòu)或者層次結(jié)構(gòu)路徑的尋址語(yǔ)法。XPath通常用于提取數(shù)據(jù),通過(guò)這些數(shù)據(jù),我們可以在web頁(yè)面中獲得所需的內(nèi)容,其實(shí)xml和html的數(shù)據(jù)可以看成一個(gè)樹(shù)形的結(jié)構(gòu),每個(gè)樹(shù)有很多樹(shù)枝(樹(shù)枝稱(chēng)為節(jié)點(diǎn)),XPath語(yǔ)法提供了在樹(shù)中查找不同節(jié)點(diǎn)的能力。2.5MySQL數(shù)據(jù)庫(kù)如何處理Scrapy爬蟲(chóng)獲取的數(shù)據(jù)需要認(rèn)真的考慮。Python中有很多種存儲(chǔ)方法,因?yàn)樵诒敬卧O(shè)計(jì)中沒(méi)有涉及到分布式爬蟲(chóng),所以我選擇的是使用MySQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)。2.5.1簡(jiǎn)介數(shù)據(jù)庫(kù),是一個(gè)存儲(chǔ)大量數(shù)據(jù)的倉(cāng)庫(kù)。為了方便數(shù)據(jù)的存儲(chǔ)和管理,它將數(shù)據(jù)按照特定的規(guī)律將數(shù)據(jù)存儲(chǔ)起來(lái),用戶可以在數(shù)據(jù)庫(kù)中添加、修改、刪除和查詢數(shù)據(jù)。MySQL數(shù)據(jù)庫(kù)是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。在關(guān)系型數(shù)據(jù)庫(kù)中,可以將數(shù)據(jù)存儲(chǔ)在不同的表中,而不是將所有數(shù)據(jù)都存儲(chǔ)在一個(gè)大型倉(cāng)庫(kù)里,這樣可以提高速度和靈活性。2.5.2MySQL數(shù)據(jù)庫(kù)的特點(diǎn)MySQL數(shù)據(jù)庫(kù)是不收費(fèi)的,人們可以直接下載并使用。它能夠有效、快捷地處理大量的數(shù)據(jù)。MySQL數(shù)據(jù)庫(kù)具有處理速度快、占用體積小等優(yōu)點(diǎn),其中,最為重要的是其開(kāi)源的優(yōu)點(diǎn),所以MySQL數(shù)據(jù)庫(kù)常常受到網(wǎng)站開(kāi)發(fā)者的青睞。2.6Fiddler2.6.1為什么使用Fiddler網(wǎng)絡(luò)爬蟲(chóng)是自動(dòng)爬取網(wǎng)頁(yè)的程序,在爬取的過(guò)程中必然涉及客戶端與服務(wù)器端之間的通信,自然也需要發(fā)送一些HTTP請(qǐng)求,并接收服務(wù)器返回的結(jié)果。在一些稍復(fù)雜的網(wǎng)絡(luò)請(qǐng)求中,我們直接看網(wǎng)址的變化是看不出規(guī)律的,此時(shí)如果要進(jìn)行自動(dòng)化爬取網(wǎng)頁(yè),就必須要通過(guò)程序構(gòu)造這些請(qǐng)求,而要通過(guò)程序構(gòu)造這些請(qǐng)求,就必須首先分析這些請(qǐng)求的規(guī)律。所以此時(shí)我們要使用工具截獲這些請(qǐng)求,對(duì)這些請(qǐng)求進(jìn)行分析。2.6.2為什么選擇Fiddler目前,抓包工具有很多,為什么使用Fiddler呢?原因如下:(1)盡管firebug可以獲取數(shù)據(jù)包,但它的功能還不足以分析HTTP請(qǐng)求的細(xì)節(jié)。模擬HTTP請(qǐng)求的能力也不夠,因?yàn)閒irebug通常是需要“無(wú)刷新修改”。如果刷新了頁(yè)面,所有的修改都不會(huì)保存。(2)Wireshark功能齊全,但凡事有利必有弊。因此,它的規(guī)模較為龐大。對(duì)于我們來(lái)說(shuō),只需要捕獲HTTP請(qǐng)求的應(yīng)用程序即可,所以,它似乎是過(guò)度限定的。(3)Httpwatch僅支持IE和firefox瀏覽器(其他瀏覽器可能會(huì)出現(xiàn)一些問(wèn)題),因此,這對(duì)于大多數(shù)使用者來(lái)說(shuō)有些力不從心。(4)瀏覽器本身就擁有調(diào)試工具。優(yōu)點(diǎn)是瀏覽器自帶,比較輕量,但無(wú)法支持一些比較復(fù)雜的抓包。因此,并不適合本設(shè)計(jì)。(5)Fiddler具有很強(qiáng)的通用性且操作簡(jiǎn)單。只要能夠?qū)TTP代理設(shè)置為:8888,任何瀏覽器和應(yīng)用程序都可以使用Fiddler。2.6.3簡(jiǎn)介Fiddler是比較好用的web代理調(diào)試工具之一,它使用的代理地址是:,默認(rèn)端口為8888,也可以設(shè)置修改。它以代理服務(wù)器的方式,位于客戶端和服務(wù)器端之間,監(jiān)聽(tīng)網(wǎng)絡(luò)數(shù)據(jù)流動(dòng)。Fiddler可以支持眾多的HTTP調(diào)試任務(wù)。例如,可以設(shè)置斷點(diǎn),或者重新發(fā)送、修改請(qǐng)求數(shù)據(jù)和轉(zhuǎn)存等操作,也可以用來(lái)檢測(cè)網(wǎng)絡(luò)安全和流量,功能非常的強(qiáng)大。2.7hashlib模塊2.7.1簡(jiǎn)介 hashlib包含著MD5和SHA的算法,它主要是應(yīng)用于安全領(lǐng)域中的加密算法。而我們一般使用的比較多的是MD5算法。MD5和SHA是摘要算法,什么是摘要算法呢?就是將任意長(zhǎng)度的輸入,變成固定長(zhǎng)度的輸出。摘要函數(shù)是一個(gè)單向函數(shù),計(jì)算f(data)很容易,但是通過(guò)digest反推data非常困難,對(duì)data做任意修改,計(jì)算出的摘要值是完全不相同。2.7.2MD5算法MD5算法快速且常用。它的結(jié)果是固定的16字節(jié),通常由一個(gè)32位十六進(jìn)制字符串表示。SHA1算法更安全。它的結(jié)果是固定的20字節(jié),通常由一個(gè)40位十六進(jìn)制字符串表示。安全系數(shù)更高的算法有sha256、SHA512等,但安全系數(shù)越高,算法就會(huì)越慢,并且摘要長(zhǎng)度也越長(zhǎng)。MD5算法特點(diǎn):(1)抗修改性:原數(shù)據(jù)如果有任意一絲的改變,生成的MD5值也會(huì)有很大的區(qū)別。(2)壓縮性:對(duì)于任意數(shù)據(jù),無(wú)論其長(zhǎng)度如何,生成的MD5值長(zhǎng)度一樣。(3)可靠性:相同算法以及相同的字符串獲得的密文結(jié)果總是相同。(4)強(qiáng)抗碰撞性:即使給定原始數(shù)據(jù)和MD5值,也很難找到MD5值相同的偽造數(shù)據(jù)。(5)易于計(jì)算:無(wú)論原數(shù)據(jù)是什么,計(jì)算出MD5值都非常容易。無(wú)論數(shù)據(jù)有多大,都可以快速計(jì)算MD5字符串的字符串。
3基于Scrapy框架的百度新聞爬蟲(chóng)具體實(shí)現(xiàn)3.1爬取對(duì)象簡(jiǎn)介本設(shè)計(jì)實(shí)現(xiàn)的網(wǎng)絡(luò)爬蟲(chóng)是以“百度新聞”網(wǎng)站的首頁(yè)為爬取目標(biāo),爬取的內(nèi)容為網(wǎng)站首頁(yè)的各個(gè)欄目新聞的標(biāo)題、網(wǎng)頁(yè)鏈接和新聞的文本內(nèi)容,并存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫(kù)中,爬取的欄目分別有城市欄目、國(guó)內(nèi)欄目、國(guó)際欄目、娛樂(lè)欄目、體育欄目、財(cái)經(jīng)欄目、科技欄目、軍事欄目、互聯(lián)網(wǎng)欄目、探索欄目、女人欄目、健康欄目和圖片新聞。百度新聞是一種24小時(shí)的自動(dòng)新聞服務(wù),每隔5分鐘就會(huì)自動(dòng)選取更新。它與其他新聞服務(wù)不同,\t"/item/%E7%99%BE%E5%BA%A6%E6%96%B0%E9%97%BB/_blank"新聞來(lái)源包括500多個(gè)權(quán)威網(wǎng)站,手機(jī)和過(guò)濾來(lái)自數(shù)千個(gè)新聞來(lái)源的新聞報(bào)道。熱點(diǎn)新聞每天由新聞源網(wǎng)站和媒體“民主投票”評(píng)選,沒(méi)有任何人為的編輯元素,突出了新聞的客觀性和完整性。本設(shè)計(jì)選取“百度新聞”作為爬取對(duì)象,我們可以接觸到很多方面的內(nèi)容,如網(wǎng)頁(yè)結(jié)構(gòu)解析、fiddler抓包工具、hashlib模塊以及MySQL數(shù)據(jù)庫(kù)的連接與存儲(chǔ)等,這可以幫助我們進(jìn)一步的了解網(wǎng)絡(luò)爬蟲(chóng)的工作原理和流程。同時(shí),我們獲得的新聞信息也是極具價(jià)值的。3.2網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)細(xì)節(jié)3.2.1創(chuàng)建Scrapy爬蟲(chóng)項(xiàng)目和爬蟲(chóng)應(yīng)用程序在本設(shè)計(jì)中,我們首先需要?jiǎng)?chuàng)建一個(gè)Scrapy爬蟲(chóng)項(xiàng)目和爬蟲(chóng)應(yīng)用程序,具體操作如下:首先,鍵盤(pán)按住win+R,并在輸入窗口中輸入cmd,打開(kāi)命令提示符;進(jìn)入D盤(pán)目錄下的Scrapy文件夾,并輸入Scrapy命令“scrapystartprojectbaidunews”創(chuàng)建一個(gè)名為“baidunews”的爬蟲(chóng)項(xiàng)目;進(jìn)入“baidunews”文件夾,輸入“scrapygenspider-tbasicnews”創(chuàng)建一個(gè)名為“news”的爬蟲(chóng)應(yīng)用程序。至此,我們已經(jīng)完成了Scrapy爬蟲(chóng)項(xiàng)目和爬蟲(chóng)應(yīng)用程序的成功創(chuàng)建,項(xiàng)目結(jié)構(gòu)如下:其中,news.py文件是爬蟲(chóng)設(shè)置文件,需要爬取什么網(wǎng)頁(yè)和數(shù)據(jù)的提取都是在此文件中編寫(xiě);items.py文件是設(shè)置數(shù)據(jù)存儲(chǔ)模板,用于結(jié)構(gòu)化數(shù)據(jù);pipelines.py文件為爬蟲(chóng)項(xiàng)目的管道文件;settings.py文件是設(shè)置文件。3.2.2配置items.py文件,設(shè)置數(shù)據(jù)存儲(chǔ)容器在本設(shè)計(jì)中,我們需要爬取的內(nèi)容為百度新聞網(wǎng)站首頁(yè)的各個(gè)欄目新聞的標(biāo)題、網(wǎng)頁(yè)鏈接和新聞的文本內(nèi)容,所以我們先確定三個(gè)容器用來(lái)存儲(chǔ)相應(yīng)的數(shù)據(jù),分別是“title”、“l(fā)ink”和“content”。因?yàn)樵诒驹O(shè)計(jì)中設(shè)置有定時(shí)爬取模塊,可能會(huì)爬取到重復(fù)的新聞內(nèi)容,為了避免MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)冗余,因此,本設(shè)計(jì)選擇使用hashlib模塊,并利用其中的MD5算法,對(duì)爬取到的新聞鏈接進(jìn)行加密處理得到一個(gè)32位的十六進(jìn)制字符串作為MySQL數(shù)據(jù)庫(kù)的主鍵,從而達(dá)到消除數(shù)據(jù)冗余的目的。因此,還需要設(shè)置一個(gè)容器“md5”用以存儲(chǔ)MD5算法處理后得到的數(shù)值。本設(shè)計(jì)使用的源代碼如下所示:3.2.3使用Fiddler抓包工具分析URL規(guī)律因?yàn)樵诎俣刃侣勈醉?yè)網(wǎng)站的HTML代碼中發(fā)現(xiàn)里面包含的信息并不完整,無(wú)法直接得到所有的新聞鏈接,加入了反爬蟲(chóng)技術(shù),因此猜測(cè)數(shù)據(jù)內(nèi)容隱藏在動(dòng)態(tài)數(shù)據(jù)JS(JavaScript)中,使得我們無(wú)法直接獲得全部數(shù)據(jù)。因此,我們需要使用Fiddler進(jìn)行分析規(guī)律。通過(guò)Fiddler工具可知,所有欄目的信息都隱藏在下圖的類(lèi)似鏈接中:將所有欄目的信息鏈接進(jìn)行對(duì)比,得到鏈接規(guī)律如下:"/widget?id="+XXX+"&ajax=json",所有欄目的信息鏈接的區(qū)別只在于id值有所不同。因此,我們可以先得到所有欄目的id值并存放到一個(gè)列表中,然后依次取出并替換到XXX中得到所有欄目的完整鏈接。3.2.4配置news.py文件,設(shè)置爬蟲(chóng)程序news.py是整個(gè)項(xiàng)目的核心部分,網(wǎng)頁(yè)爬蟲(chóng)的實(shí)現(xiàn)代碼主要在這里。完成該文件的配置,需要進(jìn)行以下步驟:進(jìn)行一級(jí)爬?。喝缃裎覀円呀?jīng)得到了所有欄目的完整鏈接,所以我們只需要依次從列表中取出完整鏈接并進(jìn)行訪問(wèn)爬取,即可獲得百度新聞首頁(yè)網(wǎng)站所有欄目的HTML代碼并將內(nèi)容交給下一個(gè)解析函數(shù)next進(jìn)行下一步的處理。(2)進(jìn)行二級(jí)爬?。和ㄟ^(guò)第一次的爬取,我們已經(jīng)獲得了所有的百度新聞首頁(yè)網(wǎng)站所有欄目的HTML代碼內(nèi)容,里面包含了所有欄目的新聞鏈接,通過(guò)觀察HTML代碼發(fā)現(xiàn),可以輕松的通過(guò)re庫(kù)的正則表達(dá)式來(lái)快速提取所需的新聞鏈接。但是有部分提取到的新聞鏈接內(nèi)容是不規(guī)則的,如果不修改的話則無(wú)法直接訪問(wèn)爬取,所以需要進(jìn)一步的修改處理。經(jīng)過(guò)修改處理后,我們已經(jīng)得到了百度新聞首頁(yè)網(wǎng)站所有欄目新聞的正確鏈接,因此我們對(duì)所有新聞的正確鏈接進(jìn)行訪問(wèn)爬取,從而獲得所有新聞的網(wǎng)頁(yè)內(nèi)容并交給解析函數(shù)next2進(jìn)行下一步的處理。數(shù)據(jù)信息提取:經(jīng)過(guò)第二次的爬取,我們已經(jīng)成功獲得了百度新聞首頁(yè)網(wǎng)站所有欄目新聞的HTML代碼內(nèi)容,然后,我們從中提取出需要的數(shù)據(jù)信息,最后存儲(chǔ)到相應(yīng)的容器中。直接提取數(shù)據(jù)的方法有很多種,在本設(shè)計(jì)中,使用XPath表達(dá)式來(lái)提取數(shù)據(jù)信息相比于其他幾種方法更加的方便和迅速。通過(guò)觀察大量的新聞網(wǎng)頁(yè)的HTML代碼找到數(shù)據(jù)提取規(guī)律并將所需數(shù)據(jù)提取出來(lái),然后將所獲得的數(shù)據(jù)存儲(chǔ)到相應(yīng)的容器中,并交給pipelines.py文件進(jìn)行數(shù)據(jù)處理。新聞URL過(guò)濾去重:通過(guò)第一次的爬取,我們已經(jīng)獲得了所有的百度新聞首頁(yè)網(wǎng)站所有欄目的新聞鏈接,因?yàn)樵诒驹O(shè)計(jì)中設(shè)置有定時(shí)爬取模塊,可能會(huì)爬取到重復(fù)的新聞內(nèi)容,為了避免MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)冗余,因此,本設(shè)計(jì)選擇使用hashlib模塊,并利用其中的MD5算法,對(duì)爬取到的新聞鏈接進(jìn)行加密處理得到一個(gè)32位的十六進(jìn)制字符串存儲(chǔ)到容器md5中作為MySQL數(shù)據(jù)庫(kù)的主鍵,從而達(dá)到消除數(shù)據(jù)冗余的目的。3.2.5配置settings.py文件編寫(xiě)配置settings.py文件,必須在pipelines.py文件處理從網(wǎng)絡(luò)爬蟲(chóng)中獲取的items之前,否則可能會(huì)導(dǎo)致數(shù)據(jù)無(wú)法得到處理。首先,因?yàn)楸驹O(shè)計(jì)對(duì)“百度新聞”網(wǎng)站進(jìn)行爬取只是為了研究和學(xué)習(xí)網(wǎng)絡(luò)爬蟲(chóng)的相關(guān)技術(shù),并非用在商業(yè)盈利方面,所以在爬蟲(chóng)開(kāi)始前需要將ROBOTSTXT_OBEY改為False,意義為不遵從網(wǎng)站設(shè)定的Robots協(xié)議,否則網(wǎng)絡(luò)爬蟲(chóng)會(huì)很快就停掉的。其次,我們還要規(guī)定item的處理類(lèi),在settings.py中找到ITEM_PIPELINES,并將其注釋前綴去掉,使得pipelines.py文件可以運(yùn)行起來(lái)。3.2.6創(chuàng)建MySQL數(shù)據(jù)庫(kù)為了存儲(chǔ)從網(wǎng)絡(luò)爬蟲(chóng)得到的數(shù)據(jù)信息,首先,我們需要先配置好MySQL數(shù)據(jù)庫(kù)的信息,分別設(shè)置host的值為“”,user的值為“root”,passwd的值為“123456”。其次,進(jìn)入MySQL數(shù)據(jù)庫(kù)系統(tǒng),創(chuàng)建一個(gè)名為“baidunews”的新數(shù)據(jù)庫(kù),并在該數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為“news”的表格用以存儲(chǔ)網(wǎng)絡(luò)爬蟲(chóng)獲得的數(shù)據(jù)信息。在該表格中,創(chuàng)建四個(gè)屬性分別是“title”,“l(fā)ink”,“content”和“md5”,并設(shè)置md5屬性為主鍵。結(jié)果如下圖所示:3.2.7配置pipelines.py文件,進(jìn)行數(shù)據(jù)處理經(jīng)過(guò)news.py文件進(jìn)行網(wǎng)絡(luò)爬蟲(chóng)后,已經(jīng)得到了我們所需要的百度新聞網(wǎng)站首頁(yè)的各個(gè)欄目新聞的標(biāo)題、網(wǎng)頁(yè)鏈接、新聞的文本內(nèi)容和網(wǎng)頁(yè)鏈接的MD5值,并且存放在items中交由pipelines.py進(jìn)行數(shù)據(jù)處理。在進(jìn)行數(shù)據(jù)存儲(chǔ)之前,先建立起與MySQL數(shù)據(jù)庫(kù)系統(tǒng)的連接。其次,使用for循環(huán)語(yǔ)句將items的每個(gè)新聞網(wǎng)頁(yè)的數(shù)據(jù)提取出來(lái),然后再執(zhí)行SQL語(yǔ)句,并對(duì)執(zhí)行語(yǔ)句進(jìn)行異常捕捉,若是重復(fù)數(shù)據(jù)則輸出“插入重復(fù)數(shù)據(jù)”,若不是重復(fù)數(shù)據(jù)則成功插入到數(shù)據(jù)庫(kù)中,最后再關(guān)閉MySQL數(shù)據(jù)庫(kù)連接進(jìn)行數(shù)據(jù)保存。本設(shè)計(jì)使用的源代碼如下所示:3.2.8設(shè)置定時(shí)爬取模塊百度新聞是一種24小時(shí)的自動(dòng)新聞服務(wù),每5分鐘會(huì)自動(dòng)選取內(nèi)容更新。所以,我們?cè)O(shè)置定時(shí)爬取模塊,使用while循環(huán)語(yǔ)句和Time庫(kù)的延時(shí)函數(shù),當(dāng)百度新聞首頁(yè)網(wǎng)站每5分鐘自動(dòng)選取更新一次內(nèi)容時(shí),我們的網(wǎng)絡(luò)爬蟲(chóng)也重新爬取一遍網(wǎng)頁(yè),將新的新聞內(nèi)容存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫(kù)中,不斷地更新MySQL數(shù)據(jù)庫(kù)數(shù)據(jù),達(dá)到與時(shí)俱進(jìn)的效果。4爬蟲(chóng)測(cè)試與效果展示4.1運(yùn)行狀態(tài)及測(cè)試(1)首先,鍵盤(pán)按住win+R,并在輸入窗口中輸入cmd,打開(kāi)命令提示符;(2)先進(jìn)入D盤(pán)目錄下的Scrapy文件夾,再進(jìn)入“baidunews”文件夾,并輸入“scrapycrawlnews--nolog”執(zhí)行爬蟲(chóng),得到消除日志信息后的網(wǎng)絡(luò)爬蟲(chóng)結(jié)果。由上可知,網(wǎng)絡(luò)爬蟲(chóng)可以正常運(yùn)行,并且成功獲得了百度新聞首頁(yè)網(wǎng)站各欄目新的新聞數(shù)據(jù)信息,隨后添加到MySQL后臺(tái)數(shù)據(jù)庫(kù)中,而對(duì)于重復(fù)的新聞數(shù)據(jù)信息也會(huì)輸出提醒“插入重復(fù)數(shù)據(jù)”,不會(huì)添加到MySQL數(shù)據(jù)庫(kù)中造成數(shù)據(jù)冗余。4.2數(shù)據(jù)抓取結(jié)果展示進(jìn)入到MySQL數(shù)據(jù)庫(kù)系統(tǒng)中,打開(kāi)“baidunews”數(shù)據(jù)庫(kù),進(jìn)入“news”表格,可以看到Scrapy網(wǎng)絡(luò)爬蟲(chóng)得到的數(shù)據(jù)信息。5總結(jié)與展望5.1總結(jié)在本文中,首先介紹了網(wǎng)絡(luò)爬蟲(chóng)的產(chǎn)生背景和意義以及網(wǎng)絡(luò)爬蟲(chóng)的特點(diǎn)和基本原理。然后介紹了Scrapy爬蟲(chóng)框架的基本結(jié)構(gòu)、各模塊功能和運(yùn)行的基本流程;介紹了信息提取方式如正則表達(dá)式和XPath表達(dá)式的基本概念和使用方法;介紹了利用Fiddler抓包工具對(duì)動(dòng)態(tài)網(wǎng)頁(yè)數(shù)據(jù)的進(jìn)行捕獲和分析的方法;介紹了hashli模塊的MD5算法實(shí)現(xiàn)網(wǎng)頁(yè)URL的過(guò)濾去重。本設(shè)計(jì)基于Python和Scrapy等開(kāi)源技術(shù),實(shí)現(xiàn)了一個(gè)以“百度新聞”首頁(yè)網(wǎng)站新聞為目標(biāo)的簡(jiǎn)單聚焦網(wǎng)絡(luò)爬蟲(chóng)。本設(shè)計(jì)完成了以下任務(wù):(1)使用Scrapy爬蟲(chóng)框架,對(duì)百度新聞首頁(yè)網(wǎng)站的各欄目新聞信息進(jìn)行數(shù)據(jù)獲??;(2)使MySQL數(shù)據(jù)庫(kù)和Scrapy網(wǎng)絡(luò)爬蟲(chóng)進(jìn)行連接,將獲取的數(shù)據(jù)存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫(kù)中,進(jìn)行數(shù)據(jù)存儲(chǔ);(3)使用Python編程語(yǔ)言的hashlib庫(kù)的MD5算法,對(duì)獲取的新聞網(wǎng)頁(yè)URL進(jìn)行加密處理從而達(dá)到數(shù)據(jù)過(guò)濾去重的效果;(4)使用Python編程語(yǔ)言的Time模塊,對(duì)爬
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度獵頭人才篩選與服務(wù)合同2篇
- 二零二五年碎石開(kāi)采與精細(xì)加工技術(shù)合作承包合同3篇
- 2025年全球及中國(guó)ROV船體清潔服務(wù)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 二零二五年度炊事員技能提升與勞務(wù)派遣合同3篇
- 二零二五年度不銹鋼貨架定制及安裝工程承包合同3篇
- 二零二五年度門(mén)窗行業(yè)技術(shù)標(biāo)準(zhǔn)制定合同
- 發(fā)廊翻新意向金合同樣本
- 電子產(chǎn)品批發(fā)居間合同范本
- 食品加工居間合同格式
- 鋼筋制作綁扎勞務(wù)分包合同
- 福建省泉州市晉江市2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 2025年春新人教版物理八年級(jí)下冊(cè)課件 第十章 浮力 第4節(jié) 跨學(xué)科實(shí)踐:制作微型密度計(jì)
- 貨運(yùn)車(chē)輛駕駛員服務(wù)標(biāo)準(zhǔn)化培訓(xùn)考核試卷
- 財(cái)務(wù)BP經(jīng)營(yíng)分析報(bào)告
- 三年級(jí)上冊(cè)體育課教案
- 2024高考物理二輪復(fù)習(xí)電學(xué)實(shí)驗(yàn)專(zhuān)項(xiàng)訓(xùn)練含解析
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 高中英語(yǔ):倒裝句專(zhuān)項(xiàng)練習(xí)(附答案)
- 2025屆河北衡水?dāng)?shù)學(xué)高三第一學(xué)期期末統(tǒng)考試題含解析
- 2024年山東省青島市普通高中自主招生物理試卷(含解析)
- 2024信息技術(shù)數(shù)字孿生能力成熟度模型
評(píng)論
0/150
提交評(píng)論