国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python專用型網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)及實(shí)現(xiàn)

2017-07-29 07:47賈棋然
電腦知識(shí)與技術(shù) 2017年12期
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng)搜索引擎

賈棋然

摘要:網(wǎng)絡(luò)爬蟲(chóng)一種網(wǎng)絡(luò)機(jī)器人,也有人說(shuō)是網(wǎng)頁(yè)的蜘蛛。隨著科技在生活和工作中的應(yīng)用,計(jì)算機(jī)也成了人們最為依賴的工具,隨著互聯(lián)網(wǎng)的信息管理量的逐漸增加,搜索引擎也是這個(gè)時(shí)期被創(chuàng)造并投入使用。但是初被使用的搜索引擎是無(wú)法精確搜索到人們需要的信息,面對(duì)人們?cè)絹?lái)越多樣的需求,這樣的搜索引擎已經(jīng)無(wú)法滿足人們的需求了。所以就有人研究了一種專用性的網(wǎng)絡(luò)爬蟲(chóng),它能解決傳統(tǒng)搜索引擎的出現(xiàn)的局限性,所以該文將會(huì)對(duì)Python專用型的網(wǎng)絡(luò)爬蟲(chóng)進(jìn)行分析和探討。

關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng);Python;數(shù)據(jù)的挖掘;搜索引擎

在很多用戶進(jìn)行搜索引擎的使用中,往往會(huì)出現(xiàn)很多不需要的信息,這就是傳統(tǒng)搜索引擎的局限性。通過(guò)傳統(tǒng)的搜索引擎進(jìn)行信息的搜索中,還需要用戶對(duì)搜索到的信息進(jìn)行分析,最終尋找到自己需要的信息。就目前的網(wǎng)絡(luò)發(fā)達(dá)現(xiàn)狀,這樣的搜索引擎是非常浪費(fèi)時(shí)間的,而且準(zhǔn)確性也不高,用戶很容易喪失搜索的心情。所以,本文將會(huì)針對(duì)這一問(wèn)題,對(duì)專用型的網(wǎng)絡(luò)爬蟲(chóng)進(jìn)行分析,提高信息檢索的效率。

1分析Python和爬蟲(chóng)系統(tǒng)設(shè)計(jì)需求

1.1Python的網(wǎng)絡(luò)爬蟲(chóng)

網(wǎng)絡(luò)爬蟲(chóng)主要是通過(guò)每個(gè)網(wǎng)頁(yè)的鏈接地址進(jìn)行相關(guān)內(nèi)容的查找,然后將結(jié)果直接傳送給用戶,不用通過(guò)人工進(jìn)行瀏覽器的操作來(lái)獲取信息了。而Python是一種廣泛應(yīng)用的腳本語(yǔ)言,它自身帶有urllib2、urllib相關(guān)的爬蟲(chóng)基礎(chǔ)庫(kù)等,在Python語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)出的一種開(kāi)源軟件則是Scrapy,它可以在Linux、Windows等多種操作系統(tǒng)中使用。如果被獲取的網(wǎng)頁(yè)經(jīng)過(guò)大量的HTML源代碼進(jìn)行編寫(xiě),這種情況下需要下載很多內(nèi)容,但是用戶可以在Scrapy爬蟲(chóng)系統(tǒng)上制定一部分模塊,從而實(shí)現(xiàn)爬蟲(chóng)的功能。

1.2爬蟲(chóng)系統(tǒng)設(shè)計(jì)需求

在進(jìn)行網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)的開(kāi)發(fā)時(shí),對(duì)系統(tǒng)建設(shè)進(jìn)行分析是基礎(chǔ)性問(wèn)題,同時(shí)也要將符合設(shè)計(jì)該系統(tǒng)的代碼和功能規(guī)范提出來(lái)。這樣能夠促進(jìn)網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)順利的開(kāi)發(fā),進(jìn)而保證開(kāi)發(fā)的結(jié)果能夠符合系統(tǒng)功能的基本需求。網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)的建設(shè)基本上同時(shí)通過(guò)模塊化進(jìn)行的設(shè)計(jì),一般每個(gè)功能都要自己的模塊。這樣能夠方便以后進(jìn)行代碼的維護(hù),而且還能提高代碼的重要性。將整個(gè)系統(tǒng)分成不同的模塊,之后把每個(gè)模塊的功能編制完成,這樣整個(gè)網(wǎng)絡(luò)爬蟲(chóng)體系的功能就是已經(jīng)完成了。本系統(tǒng)主要是根據(jù)某些用戶的上網(wǎng)習(xí)慣,進(jìn)行網(wǎng)絡(luò)專用型的爬蟲(chóng)系統(tǒng)設(shè)計(jì),根據(jù)用戶的不同需求,確定網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)中的各個(gè)功能。而且在進(jìn)行系統(tǒng)的設(shè)計(jì)時(shí),還要考慮系統(tǒng)以后的改進(jìn)和維護(hù)等問(wèn)題。本文會(huì)結(jié)合網(wǎng)易和豆辦網(wǎng)等進(jìn)行爬蟲(chóng)系統(tǒng)的分析,以及建立爬蟲(chóng)系統(tǒng)的內(nèi)容。

1.3功能需求分析

網(wǎng)易新聞關(guān)于爬蟲(chóng)的建立,主要包含幾個(gè)功能部分:新聞的標(biāo)題、新聞的來(lái)源、新聞的ID等,然后在將抓取的信息儲(chǔ)存在數(shù)據(jù)庫(kù)中。在網(wǎng)易新聞中需要爬蟲(chóng)獲取的URC連接是動(dòng)態(tài)的,并不是固定的,所以在建立爬蟲(chóng)的URL模塊時(shí),要先解決URL連接的去重,以及訪問(wèn)對(duì)策等問(wèn)題。根據(jù)網(wǎng)易新聞中原站點(diǎn)的各種新聞狀態(tài),可以看出如果所有的新聞被發(fā)布完之后,就不會(huì)進(jìn)行第二次的更新,所以在建立網(wǎng)易新聞爬蟲(chóng)的時(shí)候,當(dāng)抓取結(jié)果的之后,就不必在對(duì)數(shù)據(jù)庫(kù)中的信息進(jìn)行更新了,只需要把網(wǎng)站上更新的內(nèi)容儲(chǔ)存到數(shù)據(jù)庫(kù)中就行了。相關(guān)的爬蟲(chóng)結(jié)構(gòu)框架可見(jiàn)圖1。

1.4爬蟲(chóng)功能的設(shè)計(jì)

網(wǎng)易新聞在進(jìn)行爬蟲(chóng)功能的設(shè)計(jì)時(shí),相關(guān)的邏輯是:首先,在網(wǎng)易新聞建設(shè)爬蟲(chóng)的時(shí)候,是不會(huì)將前端的頁(yè)面和它之間進(jìn)行交互的,網(wǎng)易是在系統(tǒng)中先進(jìn)行任務(wù)的定時(shí)設(shè)置,之后爬蟲(chóng)根據(jù)定時(shí)的任務(wù)進(jìn)行運(yùn)作,如此實(shí)現(xiàn)了一種自動(dòng)定時(shí)到網(wǎng)站原點(diǎn)進(jìn)行新聞的抓取功能。其次,當(dāng)網(wǎng)易爬蟲(chóng)被定時(shí)的任務(wù)驅(qū)使運(yùn)作時(shí),它會(huì)根據(jù)原有的URL規(guī)則,在原點(diǎn)站內(nèi)相關(guān)的節(jié)點(diǎn)目錄進(jìn)行分析,將對(duì)符合需求的URL連接實(shí)施抓取工作,之后再將抓取的結(jié)果進(jìn)行信息的提取和過(guò)濾。最后,把獲取的新聞信息與數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行比較,如果數(shù)據(jù)庫(kù)中沒(méi)有這一條新聞的話,將新的數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,如果有這樣的信息就停止爬蟲(chóng)。該運(yùn)行流程可以見(jiàn)圖2。

2爬蟲(chóng)頁(yè)面管理功能的分析

2.1爬蟲(chóng)頁(yè)面的抓取

進(jìn)行爬蟲(chóng)頁(yè)面的抓取任務(wù)是實(shí)現(xiàn)爬蟲(chóng)程序的第一步。在進(jìn)行頁(yè)面的抓取時(shí),需要獲取目標(biāo)站點(diǎn)相關(guān)的動(dòng)態(tài),還要建立DNS解析與去重記錄等功能。另外,在利用爬蟲(chóng)抓取頁(yè)面的時(shí)候,也要保證抓取的目標(biāo)站點(diǎn)是處于可抓取的狀態(tài).也就是說(shuō)如果一些目標(biāo)站只有用戶登錄之后,才能對(duì)服務(wù)器中的資源進(jìn)行相應(yīng)的請(qǐng)求,對(duì)于這樣的站點(diǎn)就需要建立一個(gè)登錄目標(biāo)站點(diǎn)的模擬,在進(jìn)行頁(yè)面的抓取。模擬登錄順利通過(guò)目標(biāo)站點(diǎn)有關(guān)登錄的限制。這個(gè)方法主要是按照目標(biāo)站點(diǎn)的規(guī)則進(jìn)行的,它主要是利用用戶名和密碼、cookies和偽造的User-Agent與Ref-erer等進(jìn)入站點(diǎn),然后將返回的session和服務(wù)器實(shí)現(xiàn)請(qǐng)求交互,之后在實(shí)施頁(yè)面的抓取,進(jìn)而完成整個(gè)抓取頁(yè)面的任務(wù).

在進(jìn)行頁(yè)面的抓取中,DNS解析以及去重URL記錄環(huán)節(jié)是整個(gè)抓取模塊的重要部分。在進(jìn)行大量的頁(yè)面抓取工作時(shí),需要通過(guò)URL地址才能進(jìn)行,所以在進(jìn)行URL的請(qǐng)求時(shí),必須先對(duì)URL進(jìn)行解析。如果在進(jìn)行URL解析的數(shù)據(jù)不較多的話,那么DNS的解析會(huì)成為抓取頁(yè)面的瓶頸,想要解決DNS解析這一問(wèn)題,可以對(duì)DNS解析的結(jié)果直接進(jìn)行本地緩存。去重記錄主要是對(duì)抓取完成之后的URL地址實(shí)施記錄的去重。抓取頁(yè)面的時(shí)間是有一定時(shí)間限制的,所以只能抓取一次。在進(jìn)行頁(yè)面的抓取時(shí),要做好相應(yīng)的記錄去重,這樣是為了避免出現(xiàn)重復(fù)抓取的情況,如此就會(huì)影響系統(tǒng)運(yùn)行的性能和信息的高效性。

2.2爬蟲(chóng)頁(yè)面的處理

在抓取頁(yè)面完成之后,還需要對(duì)頁(yè)面進(jìn)行一定的整理。進(jìn)行頁(yè)面處理時(shí),首先需要對(duì)HTML相關(guān)的源代碼進(jìn)行過(guò)濾和處理,分析出需要的信息,然后在對(duì)分析出的結(jié)果信息進(jìn)行整合,最后實(shí)施入庫(kù)的操作。一般對(duì)頁(yè)面進(jìn)行處理時(shí)都是使用正則表達(dá)式,如果HTML源碼比較多的話,在通過(guò)正則表達(dá)式進(jìn)行編寫(xiě)時(shí)是比較困難的。

對(duì)HTML源碼進(jìn)行過(guò)濾時(shí)可以利用XPath操作,在進(jìn)行不同的需求處理時(shí),也要進(jìn)行不同的XPath語(yǔ)法定義。比如:XPath語(yǔ)法中的get_title方法的使用:title=responsexpath(“/html/head/title/texto”).extracto。也就是說(shuō)值利用XPath語(yǔ)法,就可以對(duì)新聞標(biāo)題進(jìn)行過(guò)濾,也不必進(jìn)行復(fù)雜的正則表達(dá)式編寫(xiě)了.比如:XPath語(yǔ)法中的get_source方法的使用:source=rcsponse.xpath(“//div[@class=ep-time-sourec-DGray/textO)”).ex-tract().經(jīng)過(guò)這些都方法的使用,最后可以在頁(yè)面處理模塊得到一個(gè)有關(guān)新聞中某個(gè)新聞編號(hào),或是新聞標(biāo)題、新聞來(lái)源等信息。在獲取這些原始數(shù)據(jù)之后,就將他們整合成一個(gè)列表,之后將其傳遞給爬蟲(chóng)入庫(kù)。相關(guān)的流程可以見(jiàn)圖3。

由于網(wǎng)頁(yè)新聞要進(jìn)行定期更新的,想要節(jié)省服務(wù)器中的資源利用,在網(wǎng)易新聞界面功能的實(shí)現(xiàn)中,可以將網(wǎng)易爬蟲(chóng)工作的時(shí)間設(shè)置為每小時(shí)自動(dòng)更新一次。在新聞界面,將當(dāng)天所有的新聞顯示在上面,點(diǎn)擊網(wǎng)易新聞的標(biāo)題,就可以進(jìn)入網(wǎng)站進(jìn)行詳細(xì)信息的了解。

3基于Python專用型網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn)

對(duì)基于PYthon實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲(chóng)的建設(shè),這里主要以豆辦網(wǎng)為例。首先要利用爬蟲(chóng)獲得相關(guān)影視地址的連接,之后按照獲得地址連接對(duì)目標(biāo)影視信息進(jìn)行解析,然后將其儲(chǔ)存在對(duì)應(yīng)的文件中。詳細(xì)的過(guò)程如下:

3.1獲取需要爬取的影視URL

想要獲得所有的影視URL,首先就是要找到URL相關(guān)的一個(gè)人口。比如:豆辦網(wǎng),它的人口網(wǎng)址是:https://www.doubsn.com/tag/****/movie?Stad****,進(jìn)入網(wǎng)站可以看到有15部影視被成列在頁(yè)面上,在第一個(gè)“****”處需要抓取的信息是最早上映的影視,第二個(gè)“****”處就是將第一個(gè)要展示的影視作品相關(guān)的序號(hào)填寫(xiě)上去(這些序號(hào)可以是0,15,30……就是從0每次遞增15)。然后將序號(hào)進(jìn)行改變,如此就會(huì)實(shí)現(xiàn)了下一頁(yè)影視的展示。比如:用start=0代表第一頁(yè),用start=15代表第二頁(yè),以此類推,每次增加15.總之就是將網(wǎng)址入口處的兩個(gè)取值稍微改變一下,就可以得到很多不同的影視信息。

獲取影視URL的爬蟲(chóng)類有兩種分別是:spiederUtil、doubanSpider。其中使用doubanSpider的過(guò)程:首先要在main函數(shù)中建立一個(gè)對(duì)象為doubanSpider,通過(guò)這個(gè)對(duì)象利用getcontents函數(shù)將影視列表所有的URL源碼抓取到,然后在利用spiderUtil這個(gè)類保存這些文件。之后通過(guò)readALL函數(shù)瀏覽所有的文件,然后在使用parseWeb函數(shù),將這些源碼解析成影視數(shù)據(jù),然后通過(guò)spiderUtil類使用save方法,保存這些影視作品。

3.2解析影視信息

(1)修改items.py相關(guān)文件。該文件對(duì)應(yīng)的是Tutorialltem類,利用這個(gè)類引出scrapy.item中的Field和Item類,最后在給影視進(jìn)行定義。

(2)修改Pipelines.py相關(guān)文件,它是管道處理的文件。

(3)然后在將movieSpider.py文件進(jìn)行編寫(xiě)。在spiders文件中,它是爬蟲(chóng)的主體。

(4)最后就是將配置settings.py文件進(jìn)行修改。針對(duì)一些具有防爬蟲(chóng)機(jī)制的網(wǎng)站,設(shè)置一些屬性。

4結(jié)束語(yǔ)

總之,在Python自帶的庫(kù)中獲取網(wǎng)頁(yè)信息,之后利用正則表達(dá)提取信息,然后利用Python中的Scrapy軟件實(shí)現(xiàn)Web信息的抓獲。

猜你喜歡
網(wǎng)絡(luò)爬蟲(chóng)搜索引擎
煉鐵廠鐵量網(wǎng)頁(yè)數(shù)據(jù)獲取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
網(wǎng)絡(luò)搜索引擎亟待規(guī)范
Nutch搜索引擎在網(wǎng)絡(luò)輿情管控中的應(yīng)用
基于Nutch的醫(yī)療搜索引擎的研究與開(kāi)發(fā)
廣告主與搜索引擎的雙向博弈分析
贵阳市| 敖汉旗| 瑞金市| 兰溪市| 永寿县| 南召县| 柏乡县| 安吉县| 彭州市| 新民市| 柳江县| 白河县| 静海县| 肃北| 麻阳| 正宁县| 常山县| 东辽县| 伊金霍洛旗| 麻江县| 华容县| 濉溪县| 新宾| 团风县| 漠河县| 乌苏市| 卫辉市| 安义县| 武威市| 望江县| 蒲城县| 平邑县| 彰化市| 洞头县| 富顺县| 永寿县| 永宁县| 靖宇县| 富锦市| 许昌县| 溧水县|