




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于python的網(wǎng)絡(luò)爬蟲設(shè)計(jì) 【摘要】近年來,隨著網(wǎng)絡(luò)應(yīng)用的逐漸擴(kuò)展和深入,如何高效的獲取網(wǎng)上數(shù)據(jù)成為了無數(shù)公司和個(gè)人的追求,在大數(shù)據(jù)時(shí)代,誰掌握了更多的數(shù)據(jù),誰就可以獲得更高的利益,而網(wǎng)絡(luò)爬蟲是其中最為常用的一種從網(wǎng)上爬取數(shù)據(jù)的手段。 網(wǎng)絡(luò)爬蟲,即Web Spider,是一個(gè)很形象的名字。如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的蜘蛛。網(wǎng)絡(luò)蜘蛛是通過網(wǎng)頁的鏈接地址來尋找網(wǎng)頁的。從網(wǎng)站某一個(gè)頁面(通常是首頁)開始,讀取網(wǎng)頁的內(nèi)容,找到在網(wǎng)頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個(gè)網(wǎng)頁,這樣一直循環(huán)下去,直到把這個(gè)網(wǎng)站所有的網(wǎng)頁都抓取完為止。如果把整個(gè)互聯(lián)網(wǎng)當(dāng)成
2、一個(gè)網(wǎng)站,那么網(wǎng)絡(luò)蜘蛛就可以用這個(gè)原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁都抓取下來。 那么,既然網(wǎng)絡(luò)爬蟲有著如此先進(jìn)快捷的特點(diǎn),我們該如何實(shí)現(xiàn)它呢?在眾多面向?qū)ο蟮恼Z言中,首選python,因?yàn)閜ython是一種“解釋型的、面向?qū)ο蟮摹в袆?dòng)態(tài)語義的”高級程序,可以使人在編程時(shí)保持自己的風(fēng)格,并且編寫的程序清晰易懂,有著很廣闊的應(yīng)用前景。 關(guān)鍵詞 python 爬蟲 數(shù)據(jù)1 前言1.1本編程設(shè)計(jì)的目的和意義 隨著網(wǎng)絡(luò)的迅速發(fā)展,萬維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個(gè)巨大的挑戰(zhàn)。搜索引擎(例如傳統(tǒng)的通用搜索引擎AltaVista,Yahoo!和Google等)作為一個(gè)輔助人們檢索信息的
3、工具成為用戶訪問萬維網(wǎng)的入口和指南。但是,這些通用性搜索引擎也存在著一定的局限性,如: (1) 不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,通用搜索引擎所返回的結(jié)果包含大量用戶不關(guān)心的網(wǎng)頁。 (2) 通用搜索引擎的目標(biāo)是盡可能大的網(wǎng)絡(luò)覆蓋率,有限的搜索引擎服務(wù)器資源與無限的網(wǎng)絡(luò)數(shù)據(jù)資源之間的矛盾將進(jìn)一步加深。 (3) 萬維網(wǎng)數(shù)據(jù)形式的豐富和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,圖片、數(shù)據(jù)庫、音頻/視頻多媒體等不同數(shù)據(jù)大量出現(xiàn),通用搜索引擎往往對這些信息含量密集且具有一定結(jié)構(gòu)的數(shù)據(jù)無能為力,不能很好地發(fā)現(xiàn)和獲取。 (4) 通用搜索引擎大多提供基于關(guān)鍵字的檢索,難以支持根據(jù)語義信息提出的查詢。 為了解決上
4、述問題,定向抓取相關(guān)網(wǎng)頁資源的聚焦爬蟲應(yīng)運(yùn)而生。聚焦爬蟲是一個(gè)自動(dòng)下載網(wǎng)頁的程序,它根據(jù)既定的抓取目標(biāo),有選擇的訪問萬維網(wǎng)上的網(wǎng)頁與相關(guān)的鏈接,獲取所需要的信息。與通用爬蟲(generalpurpose web crawler)不同,聚焦爬蟲并不追求大的覆蓋,而將目標(biāo)定為抓取與某一特定主題內(nèi)容相關(guān)的網(wǎng)頁,為面向主題的用戶查詢準(zhǔn)備數(shù)據(jù)資源。 1.2編程設(shè)計(jì)目及思路1.2.1編程設(shè)計(jì)目的 學(xué)習(xí)了解并熟練掌握python的語法規(guī)則和基本使用,對網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識進(jìn)行了一定程度的理解,提高對網(wǎng)頁源代碼的認(rèn)知水平,學(xué)習(xí)用正則表達(dá)式來完成匹配查找的工作,了解數(shù)據(jù)庫的用途,學(xué)習(xí)mongodb數(shù)據(jù)庫的安裝和使
5、用,及配合python的工作。1.2.2設(shè)計(jì)思路(1) 以世紀(jì)佳緣網(wǎng)為例,思考自己所需要的數(shù)據(jù)資源,并以此為基礎(chǔ)設(shè)計(jì)自己的爬蟲程序。(2) 應(yīng)用python偽裝成瀏覽器自動(dòng)登陸世紀(jì)佳緣網(wǎng),加入變量打開多個(gè)網(wǎng)頁。(3) 通過python的urllib2函數(shù)進(jìn)行世紀(jì)佳緣網(wǎng)源代碼的獲取。(4) 用正則表達(dá)式分析源代碼,找到所需信息導(dǎo)入excel。(5) 連接數(shù)據(jù)庫,將爬下的數(shù)據(jù)存儲在數(shù)據(jù)庫中。1.3本編程設(shè)計(jì)應(yīng)達(dá)到的要求 1、對特定的網(wǎng)站爬取特定的數(shù)據(jù); 2、實(shí)現(xiàn)代碼和得到結(jié)果; 3、能夠和數(shù)據(jù)庫進(jìn)行連接,將爬下的數(shù)據(jù)存儲在數(shù)據(jù)庫中。 4、將爬下的數(shù)據(jù)儲存在excel中方便編輯。2 編程設(shè)計(jì)方案2.
6、1爬取方案2.1.1所需爬取的數(shù)據(jù)以世紀(jì)佳緣網(wǎng)為例,所需要爬取的數(shù)據(jù)為注冊世紀(jì)佳緣網(wǎng)的人的用戶名、真實(shí)姓名、性別、年齡、學(xué)歷、月收入這些直觀信息。2.1.2用python獲取世紀(jì)佳緣網(wǎng)的源代碼爬蟲最主要的處理對象就是URL,它根據(jù)URL地址取得所需要的文件內(nèi)容,然后對它 進(jìn)行進(jìn)一步的處理。因此,準(zhǔn)確地理解URL對理解網(wǎng)絡(luò)爬蟲至關(guān)重要。URL是URI的一個(gè)子集。它是Uniform Resource Locator的縮寫,譯為“統(tǒng)一資源定位 符”。通俗地說,URL是Internet上描述信息資源的字符串,主要用在各種WWW客戶程序和服務(wù)器程序上。采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包
7、括文件、服務(wù)器的地址和目錄等。URL的格式由三部分組成: 第一部分是協(xié)議(或稱為服務(wù)方式)。第二部分是存有該資源的主機(jī)IP地址(有時(shí)也包括端口號)。第三部分是主機(jī)資源的具體地址,如目錄和文件名等。第一部分和第二部分用“:/”符號隔開,第二部分和第三部分用“/”符號隔開。第一部分和第二部分是不可缺少的,第三部分有時(shí)可以省略。例如:Python獲取網(wǎng)頁源代碼可用urllib或urllib2函數(shù)進(jìn)行,極其方便快捷,代碼如下:import urllib2 response = urllib2.urlopen('html =
8、 response.read() print html 2.1.3應(yīng)用python偽裝成瀏覽器自動(dòng)登陸世紀(jì)佳緣網(wǎng),加入變量打開多個(gè)網(wǎng)頁。 有了源代碼就可以進(jìn)行數(shù)據(jù)的爬取了,但是因?yàn)槭兰o(jì)佳緣網(wǎng)近日進(jìn)行了改版,簡單的爬蟲程序已經(jīng)無法在對其進(jìn)行全網(wǎng)頁的爬取工作了,所以,在獲取數(shù)據(jù)之前,需要對爬蟲進(jìn)行一下偽裝,使其成為一個(gè)瀏覽器,以實(shí)現(xiàn)全網(wǎng)頁的爬取工作。 應(yīng)用opener和header的基礎(chǔ)知識即可實(shí)現(xiàn)偽裝成瀏覽器這一步驟。在偽裝的同時(shí),需要加入變量來打開多個(gè)網(wǎng)頁,是的爬取工作可以順利進(jìn)行。代碼如下:r=0w=3013while 3012<w&
9、lt;9999: w=w+1 k=str(w) login_page = " cj = cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj) opener.addheaders = ('User-agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') data = urllib.urlencode("name":"834054996",&q
10、uot;password":"benben12") opener.open(login_page,data) op=opener.open(" html=op.read()2.14 用正則表達(dá)式分析網(wǎng)頁源代碼 正則表達(dá)式是用于處理字符串的強(qiáng)大工具,它并不是Python的一部分。其他編程語言中也有正則表達(dá)式的概念,區(qū)別只在于不同的編程語言實(shí)現(xiàn)支持的語法數(shù)量不同。它擁有自己獨(dú)特的語法以及一個(gè)獨(dú)立的處理引擎,在提供了正則表達(dá)式的語言里,正則表達(dá)式的語法都是一樣的。下圖為使用正則表達(dá)式進(jìn)行匹配的流程:正則表達(dá)式的大致匹配過程是:1.依次拿出表達(dá)式和文本中的字符比
11、較,2.如果每一個(gè)字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。3.如果表達(dá)式中有量詞或邊界,這個(gè)過程會稍微有一些不同。 Python是通過re模塊實(shí)現(xiàn)對正則表達(dá)式的調(diào)用的。程序代碼如下:find_re = pile(r"absolute.+?span>(.*?)</.+?>></a>(.*?)</h2>.+?</b>(.*?)</s.+?</b>(.*?)</s.+?</b>(.*?)</sp.+?</b>(.*?)</sp.+?&l
12、t;/b>", re.DOTALL) 2.2存儲方案 2.2.1儲存在excel表格中 Excel表格具有方便篩選、查找和編輯的特點(diǎn),所以將網(wǎng)絡(luò)爬蟲爬取的數(shù)據(jù)儲存在excel表格中是首選。 使用python建立excel表格是十分容易,代碼如下:filename = xlwt.Workbook ()sheet = filename.add_sheet('name') 建立完成后可將數(shù)據(jù)寫入excel表格: for a in x: sheet.write(r,0,a0.decode("utf-8") sheet.write(r,1,a1.dec
13、ode("utf-8") sheet.write(r,2,a2.decode("utf-8") sheet.write(r,3,a3.decode("utf-8") sheet.write(r,4,a4.decode("utf-8") sheet.write(r,5,a5.decode("utf-8") r=r+1 print r+3012 filename.save('test3.xls') 2.2.2儲存在數(shù)據(jù)庫中 數(shù)據(jù)庫指的是以一定方式儲存在一起、能為多個(gè)用戶共享、具有盡可
14、能小的冗余度、與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。將數(shù)據(jù)儲存在數(shù)據(jù)庫中也具有直觀簡潔的特點(diǎn)。 Python調(diào)用數(shù)據(jù)庫是用pymongo模塊,創(chuàng)建與導(dǎo)入代碼如下:db = pymongo.Connection().testfor a in x: values=dict( img=a0.decode("utf-8"), infor=a1.decode("utf-8"), age=a2.decode("utf-8"), adress=a3.decode("utf-8"), marry=a4.decode("utf-8
15、") ) db.user.insert('values':values) content = db.user.find() for a in x: print 'img:'+a0.decode("utf-8") print 'infor:'+a1.decode("utf-8") print 'age:'+a2.decode("utf-8") print 'adress:'+a3.decode("utf-8") print
16、39;marry:'+a4.decode("utf-8")3、 總結(jié) 本程序利用了python語言編寫網(wǎng)絡(luò)爬蟲程序,實(shí)現(xiàn)了從世紀(jì)佳緣網(wǎng)上爬取用戶數(shù)據(jù)資料,使用urllib函數(shù)以及re模塊、pymongo模塊進(jìn)行源代碼的獲取、編輯和數(shù)據(jù)的導(dǎo)出,并針對網(wǎng)頁代碼中無性別顯示的問題,采取爬取注冊用戶信息同時(shí)爬取注冊用戶照片地址的方式解決,瀏覽所爬取信息時(shí),只需將照片地址輸入瀏覽器地址欄,即可得到所查看用戶上傳的自拍照,得到形象信息??偟膩碚f程序設(shè)計(jì)簡便、實(shí)用性強(qiáng)、便于讀取和再利用。4、附錄4.1將爬取數(shù)據(jù)儲存在excel表格4.1.1 源代碼#coding=gbkimpor
17、t reimport xlwtimport cookielibimport urllib,urllib2#filename = xlwt.Workbook ()sheet = filename.add_sheet('name')find_re = pile(r"absolute.+?span>(.*?)</.+?>></a>(.*?)</h2>.+?</b>(.*?)</s.+?</b>(.*?)</s.+?</b>(.*?)</sp.+?</b
18、>(.*?)</sp.+?</b>", re.DOTALL) r=0w=3013while 3012<w<9999: w=w+1 k=str(w) login_page = " cj = cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj) opener.addheaders = ('User-agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1
19、)') data = urllib.urlencode("name":"834054996","password":"benben12") opener.open(login_page,data) op=opener.open(" html=op.read() x=find_re.findall(html) for a in x: sheet.write(r,0,a0.decode("utf-8") sheet.write(r,1,a1.decode("utf-8&q
20、uot;) sheet.write(r,2,a2.decode("utf-8") sheet.write(r,3,a3.decode("utf-8") sheet.write(r,4,a4.decode("utf-8") sheet.write(r,5,a5.decode("utf-8") r=r+1 print r+3012 filename.save('test3.xls')4.1.2 爬取數(shù)據(jù)匯總截圖4.2將爬取數(shù)據(jù)寫入數(shù)據(jù)庫4.2.1 源代碼#coding=gbkimport urllibimport reimport pymongodb = pymongo.Connection().testfind_re = pile(r"absolute.+?span>(.*?)</.+?>></a>(.*?)</h2>.+?</b>(.*?)</s.+?</b>(.*?)</s.+?</b>(.*?)</sp.+?</b>", re.DOTALL) w=11while 10<w<20: w=w+1 k=str(w) page=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療設(shè)備質(zhì)量管理體系建設(shè)探討
- 區(qū)款鏈技術(shù)助力企業(yè)實(shí)現(xiàn)辦公自動(dòng)化
- 鄉(xiāng)下耕地出售合同范例
- 噯氣的臨床護(hù)理
- 廈門市2025 屆高三畢業(yè)班第四次質(zhì)量檢測-英語+答案
- 醫(yī)療數(shù)字化與區(qū)塊鏈數(shù)字身份認(rèn)證的協(xié)同發(fā)展
- 小學(xué)社團(tuán)活動(dòng)總結(jié)模版
- 醫(yī)療空間中的綠色療愈效果探索
- 醫(yī)療服務(wù)流程優(yōu)化對提高患者滿意度的影響研究
- 光伏公司租賃合同范例
- DB32-T 2355-2022 綜合交通建設(shè)試驗(yàn)檢測用表編制規(guī)范(修)
- 神經(jīng)介入患者圍術(shù)期管理
- 八年級體育教案(全冊)
- 2022新高考卷小說《江上》 答案+評點(diǎn)
- 裝配式擋墻專項(xiàng)施工方案
- 1-2會員代表選票
- 年成都遠(yuǎn)洋太古里案例解析(p)PPT課件
- 知識產(chǎn)權(quán)戰(zhàn)略案例分析
- 滬科七年級數(shù)學(xué)下冊 實(shí)數(shù)單元綜合測試卷解析
- 污水廠設(shè)備管理培訓(xùn)(共110頁).ppt
- 雍琦版-《法律邏輯學(xué)》課后習(xí)題答案(共78頁)
評論
0/150
提交評論