




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于python的網絡爬蟲設計 【摘要】近年來,隨著網絡應用的逐漸擴展和深入,如何高效的獲取網上數(shù)據(jù)成為了無數(shù)公司和個人的追求,在大數(shù)據(jù)時代,誰掌握了更多的數(shù)據(jù),誰就可以獲得更高的利益,而網絡爬蟲是其中最為常用的一種從網上爬取數(shù)據(jù)的手段。 網絡爬蟲,即Web Spider,是一個很形象的名字。如果把互聯(lián)網比喻成一個蜘蛛網,那么Spider就是在網上爬來爬去的蜘蛛。網絡蜘蛛是通過網頁的鏈接地址來尋找網頁的。從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個網頁,這樣一直循環(huán)下去,直到把這個網站所有的網頁都抓取完為止。如果把整個互聯(lián)網當成
2、一個網站,那么網絡蜘蛛就可以用這個原理把互聯(lián)網上所有的網頁都抓取下來。 那么,既然網絡爬蟲有著如此先進快捷的特點,我們該如何實現(xiàn)它呢?在眾多面向對象的語言中,首選python,因為python是一種“解釋型的、面向對象的、帶有動態(tài)語義的”高級程序,可以使人在編程時保持自己的風格,并且編寫的程序清晰易懂,有著很廣闊的應用前景。 關鍵詞 python 爬蟲 數(shù)據(jù)1 前言1.1本編程設計的目的和意義 隨著網絡的迅速發(fā)展,萬維網成為大量信息的載體,如何有效地提取并利用這些信息成為一個巨大的挑戰(zhàn)。搜索引擎(例如傳統(tǒng)的通用搜索引擎AltaVista,Yahoo!和Google等)作為一個輔助人們檢索信息的
3、工具成為用戶訪問萬維網的入口和指南。但是,這些通用性搜索引擎也存在著一定的局限性,如: (1) 不同領域、不同背景的用戶往往具有不同的檢索目的和需求,通用搜索引擎所返回的結果包含大量用戶不關心的網頁。 (2) 通用搜索引擎的目標是盡可能大的網絡覆蓋率,有限的搜索引擎服務器資源與無限的網絡數(shù)據(jù)資源之間的矛盾將進一步加深。 (3) 萬維網數(shù)據(jù)形式的豐富和網絡技術的不斷發(fā)展,圖片、數(shù)據(jù)庫、音頻/視頻多媒體等不同數(shù)據(jù)大量出現(xiàn),通用搜索引擎往往對這些信息含量密集且具有一定結構的數(shù)據(jù)無能為力,不能很好地發(fā)現(xiàn)和獲取。 (4) 通用搜索引擎大多提供基于關鍵字的檢索,難以支持根據(jù)語義信息提出的查詢。 為了解決上
4、述問題,定向抓取相關網頁資源的聚焦爬蟲應運而生。聚焦爬蟲是一個自動下載網頁的程序,它根據(jù)既定的抓取目標,有選擇的訪問萬維網上的網頁與相關的鏈接,獲取所需要的信息。與通用爬蟲(generalpurpose web crawler)不同,聚焦爬蟲并不追求大的覆蓋,而將目標定為抓取與某一特定主題內容相關的網頁,為面向主題的用戶查詢準備數(shù)據(jù)資源。 1.2編程設計目及思路1.2.1編程設計目的 學習了解并熟練掌握python的語法規(guī)則和基本使用,對網絡爬蟲的基礎知識進行了一定程度的理解,提高對網頁源代碼的認知水平,學習用正則表達式來完成匹配查找的工作,了解數(shù)據(jù)庫的用途,學習mongodb數(shù)據(jù)庫的安裝和使
5、用,及配合python的工作。1.2.2設計思路(1) 以世紀佳緣網為例,思考自己所需要的數(shù)據(jù)資源,并以此為基礎設計自己的爬蟲程序。(2) 應用python偽裝成瀏覽器自動登陸世紀佳緣網,加入變量打開多個網頁。(3) 通過python的urllib2函數(shù)進行世紀佳緣網源代碼的獲取。(4) 用正則表達式分析源代碼,找到所需信息導入excel。(5) 連接數(shù)據(jù)庫,將爬下的數(shù)據(jù)存儲在數(shù)據(jù)庫中。1.3本編程設計應達到的要求 1、對特定的網站爬取特定的數(shù)據(jù); 2、實現(xiàn)代碼和得到結果; 3、能夠和數(shù)據(jù)庫進行連接,將爬下的數(shù)據(jù)存儲在數(shù)據(jù)庫中。 4、將爬下的數(shù)據(jù)儲存在excel中方便編輯。2 編程設計方案2.
6、1爬取方案2.1.1所需爬取的數(shù)據(jù)以世紀佳緣網為例,所需要爬取的數(shù)據(jù)為注冊世紀佳緣網的人的用戶名、真實姓名、性別、年齡、學歷、月收入這些直觀信息。2.1.2用python獲取世紀佳緣網的源代碼爬蟲最主要的處理對象就是URL,它根據(jù)URL地址取得所需要的文件內容,然后對它 進行進一步的處理。因此,準確地理解URL對理解網絡爬蟲至關重要。URL是URI的一個子集。它是Uniform Resource Locator的縮寫,譯為“統(tǒng)一資源定位 符”。通俗地說,URL是Internet上描述信息資源的字符串,主要用在各種WWW客戶程序和服務器程序上。采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包
7、括文件、服務器的地址和目錄等。URL的格式由三部分組成: 第一部分是協(xié)議(或稱為服務方式)。第二部分是存有該資源的主機IP地址(有時也包括端口號)。第三部分是主機資源的具體地址,如目錄和文件名等。第一部分和第二部分用“:/”符號隔開,第二部分和第三部分用“/”符號隔開。第一部分和第二部分是不可缺少的,第三部分有時可以省略。例如:Python獲取網頁源代碼可用urllib或urllib2函數(shù)進行,極其方便快捷,代碼如下:import urllib2 response = urllib2.urlopen('html =
8、 response.read() print html 2.1.3應用python偽裝成瀏覽器自動登陸世紀佳緣網,加入變量打開多個網頁。 有了源代碼就可以進行數(shù)據(jù)的爬取了,但是因為世紀佳緣網近日進行了改版,簡單的爬蟲程序已經無法在對其進行全網頁的爬取工作了,所以,在獲取數(shù)據(jù)之前,需要對爬蟲進行一下偽裝,使其成為一個瀏覽器,以實現(xiàn)全網頁的爬取工作。 應用opener和header的基礎知識即可實現(xià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 用正則表達式分析網頁源代碼 正則表達式是用于處理字符串的強大工具,它并不是Python的一部分。其他編程語言中也有正則表達式的概念,區(qū)別只在于不同的編程語言實現(xiàn)支持的語法數(shù)量不同。它擁有自己獨特的語法以及一個獨立的處理引擎,在提供了正則表達式的語言里,正則表達式的語法都是一樣的。下圖為使用正則表達式進行匹配的流程:正則表達式的大致匹配過程是:1.依次拿出表達式和文本中的字符比
11、較,2.如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。3.如果表達式中有量詞或邊界,這個過程會稍微有一些不同。 Python是通過re模塊實現(xiàn)對正則表達式的調用的。程序代碼如下: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表格具有方便篩選、查找和編輯的特點,所以將網絡爬蟲爬取的數(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ù)庫指的是以一定方式儲存在一起、能為多個用戶共享、具有盡可
14、能小的冗余度、與應用程序彼此獨立的數(shù)據(jù)集合。將數(shù)據(jù)儲存在數(shù)據(jù)庫中也具有直觀簡潔的特點。 Python調用數(shù)據(jù)庫是用pymongo模塊,創(chuàng)建與導入代碼如下: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、 總結 本程序利用了python語言編寫網絡爬蟲程序,實現(xiàn)了從世紀佳緣網上爬取用戶數(shù)據(jù)資料,使用urllib函數(shù)以及re模塊、pymongo模塊進行源代碼的獲取、編輯和數(shù)據(jù)的導出,并針對網頁代碼中無性別顯示的問題,采取爬取注冊用戶信息同時爬取注冊用戶照片地址的方式解決,瀏覽所爬取信息時,只需將照片地址輸入瀏覽器地址欄,即可得到所查看用戶上傳的自拍照,得到形象信息??偟膩碚f程序設計簡便、實用性強、便于讀取和再利用。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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家禽孵化廠管理制度
- 弱電井施工管理制度
- 律師所案件管理制度
- 德克士庫存管理制度
- 快遞pda管理制度
- 快餐分餐間管理制度
- 總決算編制管理制度
- 總經辦規(guī)章管理制度
- 慈善會印章管理制度
- 成品庫盤點管理制度
- 流行病學傳染病流行病學幻燈片
- 藥物配伍禁忌查詢表
- 水 泵 安 裝 記 錄
- 參加培訓人員匯總表
- 0720小罐茶品牌介紹
- 常州市機械行業(yè)安管考試題庫
- 手術記錄-頸胸椎前后路脫位c7t
- PPT模板:小學生防溺水安全教育主題班會08課件(45頁PPT)
- 如何當好副職
- GB∕T 10544-2022 橡膠軟管及軟管組合件 油基或水基流體適用的鋼絲纏繞增強外覆橡膠液壓型 規(guī)范
- 低血糖的急救護理PPT課件
評論
0/150
提交評論