基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第1頁
基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第2頁
基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第3頁
基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第4頁
基于Python的網(wǎng)絡(luò)信息自動(dòng)抓取系統(tǒng)畢業(yè)論文_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

基于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ā)展趨勢,就要不斷遞增花在閱讀網(wǎng)絡(luò)信息的時(shí)間。怎么從浩瀚的信息海洋中迅速有效地提取所需信息已經(jīng)越來越重要。搜索引擎也隨著我們的需求而誕生和發(fā)展,它以爬蟲技術(shù)為核心。為提高用戶訪問網(wǎng)頁信息的效率,本設(shè)計(jì)基于Python的Scrapy爬蟲框架和MySQL后臺(tái)數(shù)據(jù)庫,以“百度新聞”為爬取對(duì)象,實(shí)現(xiàn)定時(shí)自動(dòng)抓取指定范圍的網(wǎng)頁信息并存儲(chǔ)到后臺(tái)數(shù)據(jù)庫中,并使用hashlib模塊過濾重復(fù)數(shù)據(jù)。關(guān)鍵詞:爬蟲技術(shù)Scrapy爬蟲框架MySQL數(shù)據(jù)庫定時(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)越來越普及,社會(huì)生活的基本方式正在悄無聲息的發(fā)生變化。當(dāng)今時(shí)代,互聯(lián)網(wǎng)越來越貼近人們的生活,已經(jīng)成為生活的必需品。人們的衣食住行都與互聯(lián)網(wǎng)息息相關(guān),不可分離。許多行業(yè)都深受互聯(lián)網(wǎng)的影響,即使是歷史悠久的傳統(tǒng)行業(yè)。在這個(gè)時(shí)代,信息就是金錢,具備著前所未有的價(jià)值,已經(jīng)成為社會(huì)發(fā)展不可或缺的一部分。為了讓自己做出正確的判斷,我們要掌握最新的信息和了解社會(huì)的發(fā)展趨勢,造成人們花在閱讀網(wǎng)絡(luò)信息的時(shí)間不斷遞增?;ヂ?lián)網(wǎng)是一個(gè)浩瀚的信息海洋,是大量信息的載體,怎么從海洋中迅速有效地提取所需信息是非常困難的,無異于大海撈針,更何況想要利用這些信息了。與此同時(shí),搜索引擎也隨著我們的需求而誕生和發(fā)展。1.2研究意義搜索引擎可以當(dāng)成是一個(gè)入口或者指南。它可以幫助人們從互聯(lián)網(wǎng)中搜索信息,是人們獲取互聯(lián)網(wǎng)資源的重要途徑,給人們帶來了便利。但是,局限性是通用性搜索引擎的最大缺點(diǎn)。例如,通用搜索引擎是通過關(guān)鍵字來搜索的,然后返回大量的數(shù)據(jù)信息給用戶,但是在這些信息中,并不都是用戶所關(guān)心和需要的數(shù)據(jù)信息,里面還有許多是用戶并不關(guān)心的數(shù)據(jù)信息。聚焦爬蟲具有高度的可自定義性,可以幫助我們迅速有效的提取需要的信息。它按照程序設(shè)計(jì)者所設(shè)定的規(guī)則,有選擇的訪問互聯(lián)網(wǎng)上的網(wǎng)頁,或者是與之相關(guān)的鏈接。Scrapy爬蟲框架可以讓聚焦爬蟲的設(shè)計(jì)和工作變得更加方便。1.3研究內(nèi)容本設(shè)計(jì)主要研究的內(nèi)容如下:獲取數(shù)據(jù):使用Scrapy框架對(duì)百度新聞網(wǎng)站首頁進(jìn)行訪問,獲取各欄目的新聞數(shù)據(jù)信息。數(shù)據(jù)存儲(chǔ):將各欄目的新聞數(shù)據(jù)信息存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫中。進(jìn)行數(shù)據(jù)的過濾去重:使用Python編程語言的hashlib庫的MD5算法,對(duì)獲取的新聞網(wǎng)頁URL進(jìn)行加密處理,得到唯一的32位的十六進(jìn)制字符串值,從而達(dá)到數(shù)據(jù)過濾去重的效果。定時(shí)爬取,更新數(shù)據(jù)庫:使用Python編程語言的Time模塊,對(duì)爬蟲進(jìn)程設(shè)置定時(shí)循環(huán),從而不斷更新數(shù)據(jù)庫的數(shù)據(jù)。

2設(shè)計(jì)原理以及相關(guān)技術(shù)介紹網(wǎng)絡(luò)爬蟲是一段程序或者腳本。首先,分析百度新聞網(wǎng)站首頁的HTML代碼的規(guī)律,從而獲取初始的URL。其次,爬取初始的URL的內(nèi)容并分析HTML代碼規(guī)律,從而獲取百度新聞網(wǎng)站首頁的所有新聞網(wǎng)頁鏈接。然后,爬蟲先訪問獲得的新聞網(wǎng)頁鏈接。若能夠訪問則自動(dòng)下載其中的內(nèi)容,再通過解析模塊,解析得到已爬取頁面中我們所需要的信息。接著,將所爬取到的信息存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫中,方便我們查詢信息和統(tǒng)計(jì)。最后,設(shè)置定時(shí)爬取,可以不斷的更新數(shù)據(jù)庫的數(shù)據(jù)。2.1Scrapy爬蟲框架2.1.1Scrapy分析Scrapy是一套比較成熟的web爬蟲框架。它可以用來爬取web數(shù)據(jù),也可以用來提取結(jié)構(gòu)性的數(shù)據(jù)。它讓網(wǎng)絡(luò)爬蟲的設(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ù)處理過程,以及觸發(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)頁資源進(jìn)行高速下載。(4)Spider(爬蟲):該組件是核心。它負(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(爬蟲中間件):處于引擎與爬蟲組件之間,主要用于對(duì)爬蟲組件和引擎之間的通信進(jìn)行處理。Scrapy基本運(yùn)行流程:首先,需要確定要爬取的目標(biāo),所以引擎先從調(diào)度器中選擇一個(gè)URL。引擎收到URL后,將其打包成一個(gè)請(qǐng)求,然后傳給下載器。下載器把資源下載下來,將資源打包成應(yī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é)議簡介Robots協(xié)議也稱為爬蟲協(xié)議。它存放于網(wǎng)站根目錄下,是一個(gè)ASCII編碼的純文本文件。它是互聯(lián)網(wǎng)行業(yè)中約定俗稱的一種準(zhǔn)入規(guī)范,其目的在于告知所有的搜索引擎,在此網(wǎng)站中,哪部分內(nèi)容是允許被獲取的,哪部分內(nèi)容是不允許被獲取的。爬蟲在進(jìn)入網(wǎng)站之前,首先要查看robots.txt。如果該文本文件存在,則解析其中的規(guī)則,然后再確定訪問的范圍。如果該文本文件不存在,則說明該網(wǎng)頁的所有數(shù)據(jù)都可訪問。2.2.2協(xié)議的寫法robots.txt放到網(wǎng)站根目錄下即可,一個(gè)robots.txt只能控制相同端口,相同站點(diǎn)的網(wǎng)頁抓取策略。常規(guī)寫法如下:(1)User-agent:聲明哪些爬蟲不允許訪問此網(wǎng)站。(2)Disallow:聲明了哪些URL是禁止訪問的,不允許任何爬蟲進(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ì)自覺遵守的。若網(wǎng)絡(luò)爬蟲的設(shè)計(jì)者違背這個(gè)協(xié)議,偽裝成其他身份進(jìn)入,其設(shè)計(jì)的代碼也將能夠自由爬取站點(diǎn)中的資源。2.3正則表達(dá)式2.3.1簡介正則表達(dá)式是一套規(guī)則,用于描述字符串排列。對(duì)于某些特定字符,或者是這些特定字符的組合,它可以預(yù)先定義好,形成一個(gè)“字符串”。它表示的是字符串的一種過濾邏輯,可用來檢查,判斷某個(gè)種子字符串是否存在于該字符串中,若存在,替換匹配的子字符串;它也可以應(yīng)用在從某個(gè)字符串中取出滿足某個(gè)條件的子字符串等。正則表達(dá)式能夠很容易地提取到我們需要的信息。2.3.2應(yī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庫默認(rèn)采用貪婪模式,即正則表達(dá)式在匹配時(shí),會(huì)盡量多的匹配符合條件的內(nèi)容,輸出匹配最長的子串。(2)懶惰模式:在正則表達(dá)式在匹配時(shí),會(huì)盡量少的匹配內(nèi)容。模式切換的方式:通過在“*”或者“+”限定符之后放置“?”。2.4XPath表達(dá)式2.4.1簡介XPath是一種XML路徑語言。它是一種定位和處理可擴(kuò)展標(biāo)記語言XML文檔中項(xiàng)目的方法,主要是通過使用基于文檔邏輯結(jié)構(gòu)或者層次結(jié)構(gòu)路徑的尋址語法。XPath通常用于提取數(shù)據(jù),通過這些數(shù)據(jù),我們可以在web頁面中獲得所需的內(nèi)容,其實(shí)xml和html的數(shù)據(jù)可以看成一個(gè)樹形的結(jié)構(gòu),每個(gè)樹有很多樹枝(樹枝稱為節(jié)點(diǎn)),XPath語法提供了在樹中查找不同節(jié)點(diǎn)的能力。2.5MySQL數(shù)據(jù)庫如何處理Scrapy爬蟲獲取的數(shù)據(jù)需要認(rèn)真的考慮。Python中有很多種存儲(chǔ)方法,因?yàn)樵诒敬卧O(shè)計(jì)中沒有涉及到分布式爬蟲,所以我選擇的是使用MySQL數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲(chǔ)。2.5.1簡介數(shù)據(jù)庫,是一個(gè)存儲(chǔ)大量數(shù)據(jù)的倉庫。為了方便數(shù)據(jù)的存儲(chǔ)和管理,它將數(shù)據(jù)按照特定的規(guī)律將數(shù)據(jù)存儲(chǔ)起來,用戶可以在數(shù)據(jù)庫中添加、修改、刪除和查詢數(shù)據(jù)。MySQL數(shù)據(jù)庫是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。在關(guān)系型數(shù)據(jù)庫中,可以將數(shù)據(jù)存儲(chǔ)在不同的表中,而不是將所有數(shù)據(jù)都存儲(chǔ)在一個(gè)大型倉庫里,這樣可以提高速度和靈活性。2.5.2MySQL數(shù)據(jù)庫的特點(diǎn)MySQL數(shù)據(jù)庫是不收費(fèi)的,人們可以直接下載并使用。它能夠有效、快捷地處理大量的數(shù)據(jù)。MySQL數(shù)據(jù)庫具有處理速度快、占用體積小等優(yōu)點(diǎn),其中,最為重要的是其開源的優(yōu)點(diǎn),所以MySQL數(shù)據(jù)庫常常受到網(wǎng)站開發(fā)者的青睞。2.6Fiddler2.6.1為什么使用Fiddler網(wǎng)絡(luò)爬蟲是自動(dòng)爬取網(wǎng)頁的程序,在爬取的過程中必然涉及客戶端與服務(wù)器端之間的通信,自然也需要發(fā)送一些HTTP請(qǐng)求,并接收服務(wù)器返回的結(jié)果。在一些稍復(fù)雜的網(wǎng)絡(luò)請(qǐng)求中,我們直接看網(wǎng)址的變化是看不出規(guī)律的,此時(shí)如果要進(jìn)行自動(dòng)化爬取網(wǎng)頁,就必須要通過程序構(gòu)造這些請(qǐng)求,而要通過程序構(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通常是需要“無刷新修改”。如果刷新了頁面,所有的修改都不會(huì)保存。(2)Wireshark功能齊全,但凡事有利必有弊。因此,它的規(guī)模較為龐大。對(duì)于我們來說,只需要捕獲HTTP請(qǐng)求的應(yīng)用程序即可,所以,它似乎是過度限定的。(3)Httpwatch僅支持IE和firefox瀏覽器(其他瀏覽器可能會(huì)出現(xiàn)一些問題),因此,這對(duì)于大多數(shù)使用者來說有些力不從心。(4)瀏覽器本身就擁有調(diào)試工具。優(yōu)點(diǎn)是瀏覽器自帶,比較輕量,但無法支持一些比較復(fù)雜的抓包。因此,并不適合本設(shè)計(jì)。(5)Fiddler具有很強(qiáng)的通用性且操作簡單。只要能夠?qū)TTP代理設(shè)置為:8888,任何瀏覽器和應(yīng)用程序都可以使用Fiddler。2.6.3簡介Fiddler是比較好用的web代理調(diào)試工具之一,它使用的代理地址是:,默認(rèn)端口為8888,也可以設(shè)置修改。它以代理服務(wù)器的方式,位于客戶端和服務(wù)器端之間,監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)流動(dòng)。Fiddler可以支持眾多的HTTP調(diào)試任務(wù)。例如,可以設(shè)置斷點(diǎn),或者重新發(fā)送、修改請(qǐng)求數(shù)據(jù)和轉(zhuǎn)存等操作,也可以用來檢測網(wǎng)絡(luò)安全和流量,功能非常的強(qiáng)大。2.7hashlib模塊2.7.1簡介 hashlib包含著MD5和SHA的算法,它主要是應(yīng)用于安全領(lǐng)域中的加密算法。而我們一般使用的比較多的是MD5算法。MD5和SHA是摘要算法,什么是摘要算法呢?就是將任意長度的輸入,變成固定長度的輸出。摘要函數(shù)是一個(gè)單向函數(shù),計(jì)算f(data)很容易,但是通過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ì)越慢,并且摘要長度也越長。MD5算法特點(diǎn):(1)抗修改性:原數(shù)據(jù)如果有任意一絲的改變,生成的MD5值也會(huì)有很大的區(qū)別。(2)壓縮性:對(duì)于任意數(shù)據(jù),無論其長度如何,生成的MD5值長度一樣。(3)可靠性:相同算法以及相同的字符串獲得的密文結(jié)果總是相同。(4)強(qiáng)抗碰撞性:即使給定原始數(shù)據(jù)和MD5值,也很難找到MD5值相同的偽造數(shù)據(jù)。(5)易于計(jì)算:無論原數(shù)據(jù)是什么,計(jì)算出MD5值都非常容易。無論數(shù)據(jù)有多大,都可以快速計(jì)算MD5字符串的字符串。

3基于Scrapy框架的百度新聞爬蟲具體實(shí)現(xiàn)3.1爬取對(duì)象簡介本設(shè)計(jì)實(shí)現(xiàn)的網(wǎng)絡(luò)爬蟲是以“百度新聞”網(wǎng)站的首頁為爬取目標(biāo),爬取的內(nèi)容為網(wǎng)站首頁的各個(gè)欄目新聞的標(biāo)題、網(wǎng)頁鏈接和新聞的文本內(nèi)容,并存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫中,爬取的欄目分別有城市欄目、國內(nèi)欄目、國際欄目、娛樂欄目、體育欄目、財(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"新聞來源包括500多個(gè)權(quán)威網(wǎng)站,手機(jī)和過濾來自數(shù)千個(gè)新聞來源的新聞報(bào)道。熱點(diǎn)新聞每天由新聞源網(wǎng)站和媒體“民主投票”評(píng)選,沒有任何人為的編輯元素,突出了新聞的客觀性和完整性。本設(shè)計(jì)選取“百度新聞”作為爬取對(duì)象,我們可以接觸到很多方面的內(nèi)容,如網(wǎng)頁結(jié)構(gòu)解析、fiddler抓包工具、hashlib模塊以及MySQL數(shù)據(jù)庫的連接與存儲(chǔ)等,這可以幫助我們進(jìn)一步的了解網(wǎng)絡(luò)爬蟲的工作原理和流程。同時(shí),我們獲得的新聞信息也是極具價(jià)值的。3.2網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)細(xì)節(jié)3.2.1創(chuàng)建Scrapy爬蟲項(xiàng)目和爬蟲應(yīng)用程序在本設(shè)計(jì)中,我們首先需要?jiǎng)?chuàng)建一個(gè)Scrapy爬蟲項(xiàng)目和爬蟲應(yīng)用程序,具體操作如下:首先,鍵盤按住win+R,并在輸入窗口中輸入cmd,打開命令提示符;進(jìn)入D盤目錄下的Scrapy文件夾,并輸入Scrapy命令“scrapystartprojectbaidunews”創(chuàng)建一個(gè)名為“baidunews”的爬蟲項(xiàng)目;進(jìn)入“baidunews”文件夾,輸入“scrapygenspider-tbasicnews”創(chuàng)建一個(gè)名為“news”的爬蟲應(yīng)用程序。至此,我們已經(jīng)完成了Scrapy爬蟲項(xiàng)目和爬蟲應(yīng)用程序的成功創(chuàng)建,項(xiàng)目結(jié)構(gòu)如下:其中,news.py文件是爬蟲設(shè)置文件,需要爬取什么網(wǎng)頁和數(shù)據(jù)的提取都是在此文件中編寫;items.py文件是設(shè)置數(shù)據(jù)存儲(chǔ)模板,用于結(jié)構(gòu)化數(shù)據(jù);pipelines.py文件為爬蟲項(xiàng)目的管道文件;settings.py文件是設(shè)置文件。3.2.2配置items.py文件,設(shè)置數(shù)據(jù)存儲(chǔ)容器在本設(shè)計(jì)中,我們需要爬取的內(nèi)容為百度新聞網(wǎng)站首頁的各個(gè)欄目新聞的標(biāo)題、網(wǎng)頁鏈接和新聞的文本內(nèi)容,所以我們先確定三個(gè)容器用來存儲(chǔ)相應(yīng)的數(shù)據(jù),分別是“title”、“l(fā)ink”和“content”。因?yàn)樵诒驹O(shè)計(jì)中設(shè)置有定時(shí)爬取模塊,可能會(huì)爬取到重復(fù)的新聞內(nèi)容,為了避免MySQL數(shù)據(jù)庫數(shù)據(jù)冗余,因此,本設(shè)計(jì)選擇使用hashlib模塊,并利用其中的MD5算法,對(duì)爬取到的新聞鏈接進(jìn)行加密處理得到一個(gè)32位的十六進(jìn)制字符串作為MySQL數(shù)據(jù)庫的主鍵,從而達(dá)到消除數(shù)據(jù)冗余的目的。因此,還需要設(shè)置一個(gè)容器“md5”用以存儲(chǔ)MD5算法處理后得到的數(shù)值。本設(shè)計(jì)使用的源代碼如下所示:3.2.3使用Fiddler抓包工具分析URL規(guī)律因?yàn)樵诎俣刃侣勈醉摼W(wǎng)站的HTML代碼中發(fā)現(xiàn)里面包含的信息并不完整,無法直接得到所有的新聞鏈接,加入了反爬蟲技術(shù),因此猜測數(shù)據(jù)內(nèi)容隱藏在動(dòng)態(tài)數(shù)據(jù)JS(JavaScript)中,使得我們無法直接獲得全部數(shù)據(jù)。因此,我們需要使用Fiddler進(jìn)行分析規(guī)律。通過Fiddler工具可知,所有欄目的信息都隱藏在下圖的類似鏈接中:將所有欄目的信息鏈接進(jìn)行對(duì)比,得到鏈接規(guī)律如下:"/widget?id="+XXX+"&ajax=json",所有欄目的信息鏈接的區(qū)別只在于id值有所不同。因此,我們可以先得到所有欄目的id值并存放到一個(gè)列表中,然后依次取出并替換到XXX中得到所有欄目的完整鏈接。3.2.4配置news.py文件,設(shè)置爬蟲程序news.py是整個(gè)項(xiàng)目的核心部分,網(wǎng)頁爬蟲的實(shí)現(xiàn)代碼主要在這里。完成該文件的配置,需要進(jìn)行以下步驟:進(jìn)行一級(jí)爬?。喝缃裎覀円呀?jīng)得到了所有欄目的完整鏈接,所以我們只需要依次從列表中取出完整鏈接并進(jìn)行訪問爬取,即可獲得百度新聞首頁網(wǎng)站所有欄目的HTML代碼并將內(nèi)容交給下一個(gè)解析函數(shù)next進(jìn)行下一步的處理。(2)進(jìn)行二級(jí)爬?。和ㄟ^第一次的爬取,我們已經(jīng)獲得了所有的百度新聞首頁網(wǎng)站所有欄目的HTML代碼內(nèi)容,里面包含了所有欄目的新聞鏈接,通過觀察HTML代碼發(fā)現(xiàn),可以輕松的通過re庫的正則表達(dá)式來快速提取所需的新聞鏈接。但是有部分提取到的新聞鏈接內(nèi)容是不規(guī)則的,如果不修改的話則無法直接訪問爬取,所以需要進(jìn)一步的修改處理。經(jīng)過修改處理后,我們已經(jīng)得到了百度新聞首頁網(wǎng)站所有欄目新聞的正確鏈接,因此我們對(duì)所有新聞的正確鏈接進(jìn)行訪問爬取,從而獲得所有新聞的網(wǎng)頁內(nèi)容并交給解析函數(shù)next2進(jìn)行下一步的處理。數(shù)據(jù)信息提?。航?jīng)過第二次的爬取,我們已經(jīng)成功獲得了百度新聞首頁網(wǎng)站所有欄目新聞的HTML代碼內(nèi)容,然后,我們從中提取出需要的數(shù)據(jù)信息,最后存儲(chǔ)到相應(yīng)的容器中。直接提取數(shù)據(jù)的方法有很多種,在本設(shè)計(jì)中,使用XPath表達(dá)式來提取數(shù)據(jù)信息相比于其他幾種方法更加的方便和迅速。通過觀察大量的新聞網(wǎng)頁的HTML代碼找到數(shù)據(jù)提取規(guī)律并將所需數(shù)據(jù)提取出來,然后將所獲得的數(shù)據(jù)存儲(chǔ)到相應(yīng)的容器中,并交給pipelines.py文件進(jìn)行數(shù)據(jù)處理。新聞URL過濾去重:通過第一次的爬取,我們已經(jīng)獲得了所有的百度新聞首頁網(wǎng)站所有欄目的新聞鏈接,因?yàn)樵诒驹O(shè)計(jì)中設(shè)置有定時(shí)爬取模塊,可能會(huì)爬取到重復(fù)的新聞內(nèi)容,為了避免MySQL數(shù)據(jù)庫數(shù)據(jù)冗余,因此,本設(shè)計(jì)選擇使用hashlib模塊,并利用其中的MD5算法,對(duì)爬取到的新聞鏈接進(jìn)行加密處理得到一個(gè)32位的十六進(jìn)制字符串存儲(chǔ)到容器md5中作為MySQL數(shù)據(jù)庫的主鍵,從而達(dá)到消除數(shù)據(jù)冗余的目的。3.2.5配置settings.py文件編寫配置settings.py文件,必須在pipelines.py文件處理從網(wǎng)絡(luò)爬蟲中獲取的items之前,否則可能會(huì)導(dǎo)致數(shù)據(jù)無法得到處理。首先,因?yàn)楸驹O(shè)計(jì)對(duì)“百度新聞”網(wǎng)站進(jìn)行爬取只是為了研究和學(xué)習(xí)網(wǎng)絡(luò)爬蟲的相關(guān)技術(shù),并非用在商業(yè)盈利方面,所以在爬蟲開始前需要將ROBOTSTXT_OBEY改為False,意義為不遵從網(wǎng)站設(shè)定的Robots協(xié)議,否則網(wǎng)絡(luò)爬蟲會(huì)很快就停掉的。其次,我們還要規(guī)定item的處理類,在settings.py中找到ITEM_PIPELINES,并將其注釋前綴去掉,使得pipelines.py文件可以運(yùn)行起來。3.2.6創(chuàng)建MySQL數(shù)據(jù)庫為了存儲(chǔ)從網(wǎng)絡(luò)爬蟲得到的數(shù)據(jù)信息,首先,我們需要先配置好MySQL數(shù)據(jù)庫的信息,分別設(shè)置host的值為“”,user的值為“root”,passwd的值為“123456”。其次,進(jìn)入MySQL數(shù)據(jù)庫系統(tǒng),創(chuàng)建一個(gè)名為“baidunews”的新數(shù)據(jù)庫,并在該數(shù)據(jù)庫中創(chuàng)建一個(gè)名為“news”的表格用以存儲(chǔ)網(wǎng)絡(luò)爬蟲獲得的數(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)過news.py文件進(jìn)行網(wǎng)絡(luò)爬蟲后,已經(jīng)得到了我們所需要的百度新聞網(wǎng)站首頁的各個(gè)欄目新聞的標(biāo)題、網(wǎng)頁鏈接、新聞的文本內(nèi)容和網(wǎng)頁鏈接的MD5值,并且存放在items中交由pipelines.py進(jìn)行數(shù)據(jù)處理。在進(jìn)行數(shù)據(jù)存儲(chǔ)之前,先建立起與MySQL數(shù)據(jù)庫系統(tǒng)的連接。其次,使用for循環(huán)語句將items的每個(gè)新聞網(wǎng)頁的數(shù)據(jù)提取出來,然后再執(zhí)行SQL語句,并對(duì)執(zhí)行語句進(jìn)行異常捕捉,若是重復(fù)數(shù)據(jù)則輸出“插入重復(fù)數(shù)據(jù)”,若不是重復(fù)數(shù)據(jù)則成功插入到數(shù)據(jù)庫中,最后再關(guān)閉MySQL數(shù)據(jù)庫連接進(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)語句和Time庫的延時(shí)函數(shù),當(dāng)百度新聞首頁網(wǎng)站每5分鐘自動(dòng)選取更新一次內(nèi)容時(shí),我們的網(wǎng)絡(luò)爬蟲也重新爬取一遍網(wǎng)頁,將新的新聞內(nèi)容存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫中,不斷地更新MySQL數(shù)據(jù)庫數(shù)據(jù),達(dá)到與時(shí)俱進(jìn)的效果。4爬蟲測試與效果展示4.1運(yùn)行狀態(tài)及測試(1)首先,鍵盤按住win+R,并在輸入窗口中輸入cmd,打開命令提示符;(2)先進(jìn)入D盤目錄下的Scrapy文件夾,再進(jìn)入“baidunews”文件夾,并輸入“scrapycrawlnews--nolog”執(zhí)行爬蟲,得到消除日志信息后的網(wǎng)絡(luò)爬蟲結(jié)果。由上可知,網(wǎng)絡(luò)爬蟲可以正常運(yùn)行,并且成功獲得了百度新聞首頁網(wǎng)站各欄目新的新聞數(shù)據(jù)信息,隨后添加到MySQL后臺(tái)數(shù)據(jù)庫中,而對(duì)于重復(fù)的新聞數(shù)據(jù)信息也會(huì)輸出提醒“插入重復(fù)數(shù)據(jù)”,不會(huì)添加到MySQL數(shù)據(jù)庫中造成數(shù)據(jù)冗余。4.2數(shù)據(jù)抓取結(jié)果展示進(jìn)入到MySQL數(shù)據(jù)庫系統(tǒng)中,打開“baidunews”數(shù)據(jù)庫,進(jìn)入“news”表格,可以看到Scrapy網(wǎng)絡(luò)爬蟲得到的數(shù)據(jù)信息。5總結(jié)與展望5.1總結(jié)在本文中,首先介紹了網(wǎng)絡(luò)爬蟲的產(chǎn)生背景和意義以及網(wǎng)絡(luò)爬蟲的特點(diǎn)和基本原理。然后介紹了Scrapy爬蟲框架的基本結(jié)構(gòu)、各模塊功能和運(yùn)行的基本流程;介紹了信息提取方式如正則表達(dá)式和XPath表達(dá)式的基本概念和使用方法;介紹了利用Fiddler抓包工具對(duì)動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)的進(jìn)行捕獲和分析的方法;介紹了hashli模塊的MD5算法實(shí)現(xiàn)網(wǎng)頁URL的過濾去重。本設(shè)計(jì)基于Python和Scrapy等開源技術(shù),實(shí)現(xiàn)了一個(gè)以“百度新聞”首頁網(wǎng)站新聞為目標(biāo)的簡單聚焦網(wǎng)絡(luò)爬蟲。本設(shè)計(jì)完成了以下任務(wù):(1)使用Scrapy爬蟲框架,對(duì)百度新聞首頁網(wǎng)站的各欄目新聞信息進(jìn)行數(shù)據(jù)獲??;(2)使MySQL數(shù)據(jù)庫和Scrapy網(wǎng)絡(luò)爬蟲進(jìn)行連接,將獲取的數(shù)據(jù)存儲(chǔ)到MySQL后臺(tái)數(shù)據(jù)庫中,進(jìn)行數(shù)據(jù)存儲(chǔ);(3)使用Python編程語言的hashlib庫的MD5算法,對(duì)獲取的新聞網(wǎng)頁URL進(jìn)行加密處理從而達(dá)到數(shù)據(jù)過濾去重的效果;(4)使用Python編程語言的Time模塊,對(duì)爬

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論