吳永聰
摘? 要: 近年來,隨著互聯(lián)網的發(fā)展,如何有效地從互聯(lián)網獲取所需信息已成為眾多互聯(lián)網企業(yè)競爭研究的新方向,而從互聯(lián)網上獲取數(shù)據最常用的手段是網絡爬蟲。網絡爬蟲又稱網絡蜘蛛和網絡機器人,它是一個程序,可以根據特定的規(guī)則和給定的URL自動收集互聯(lián)網數(shù)據和信息。文章討論了網絡爬蟲實現(xiàn)過程中的主要問題:如何使用python模擬登錄、如何使用正則表達式匹配字符串獲取信息、如何使用mysql存儲數(shù)據等,并利用python實現(xiàn)了一個網絡爬蟲程序系統(tǒng)。
關鍵詞: 網絡爬蟲; Python; MySQL; 正則表達式
中圖分類號:TP311.11? ? ? ? ? 文獻標志碼:A? ? ?文章編號:1006-8228(2019)08-94-03
Abstract: In recent years, with the development of the Internet, how to effectively obtain the required information from the Internet has become a new direction that many Internet companies are competing to research, and the most common means of obtaining data from the Internet is the web crawler. Web crawlers are also known as web spiders or web robots, it is a program that automatically collects Internet data and information according to a given URL and a specific rule. In this paper, the main issues in the implementation of web crawlers are discussed, such as how to use Python to simulate login, how to use regular expressions to match strings to get information and how to use MySQL to store data, and so on. At the end, a Python-based web crawler program system is realized through the research of Python language.
Key words: web crawler; Python; MySQL; regular expression
0 引言
在網絡信息和數(shù)據爆炸性增長的時代,盡管互聯(lián)網信息技術的飛速發(fā)展,從如此龐大的信息數(shù)據中仍然很難找到真正有用的信息。于是,谷歌、百度、雅虎等搜索引擎應運而生。搜索引擎可以根據用戶輸入的關鍵字在Internet上檢索網頁,并為用戶查找與關鍵字相關或包含關鍵字的信息。網絡爬蟲作為搜索引擎的重要組成部分,在信息檢索過程中發(fā)揮著重要的作用。因此,網絡爬蟲的研究,對于搜索引擎的發(fā)展具有十分重要的意義。對于編寫網絡爬蟲,python有其獨特的優(yōu)勢。例如,python中有許多爬蟲框架,這使得web爬蟲更高效地對數(shù)據進行爬行。同時,Python是一種面向對象的解釋性高級編程語言。它的語法比其他高級編程語言更簡單、更易閱讀和理解。因此,使用Python來實現(xiàn)Web爬蟲是一個很好的選擇。
1 網絡爬蟲的概述
1.1 網絡爬蟲的原理
網絡爬蟲,又稱網絡蜘蛛和網絡機器人,主要用于收集互聯(lián)網上的各種資源。它是搜索引擎的重要組成部分,是一個可以自動提取互聯(lián)網上特定頁面內容的程序。通用搜索引擎Web爬蟲工作流[1]:①將種子URL放入等待抓取URL隊列;②將等待URL從等待URL隊列中取出,進行讀取URL、DNS解析、網頁下載等操作;③將下載的網頁放入下載的網頁庫;④將下載的網頁URL放入已爬URL隊列;⑤分析已爬URL隊列中的URL提取新的URL被放置在要等待抓取URL隊列中,并進入下一個爬網周期。
爬蟲的工作流程:①通過URL抓取頁面代碼;②通過正則匹配獲取頁面有用數(shù)據或者頁面上有用的URL;③處理獲取到的數(shù)據或者通過獲取到的新的URL進入下一輪抓取循環(huán)。
1.2 網絡爬蟲的分類
網絡爬蟲大體上可以分為通用網絡爬蟲,聚焦網絡爬蟲[2]。
通用網絡爬蟲,也叫全網爬蟲,它從一個或者多個初始URL開始,獲取初始頁面的代碼,同時從該頁面提取相關的URL放入隊列中,直到滿足程序的停止條件為止。相比于通用網絡爬蟲,聚焦網絡爬蟲的工作流程比較復雜,它需要事先通過一定的網頁分析算法過濾掉一些與主題無關的URL,確保留下來的URL在一定程度上都與主題相關,把它們放入等待抓取的URL隊列。然后再根據搜索策略,從隊列中選擇出下一步要抓取的URL,重復上述操作,直到滿足程序的停止條件為止。聚焦網絡爬蟲能夠爬取到與主題相關度更高的信息,例如:為了快速地獲取微博中的數(shù)據,可以利用聚焦爬蟲技術開發(fā)出一個用來抓取微博數(shù)據的工具[3-5]。在如今大數(shù)據時代,聚焦爬蟲能做到大海里撈針,從網絡數(shù)據海洋中找出人們需要的信息,并且過濾掉那些“垃圾數(shù)據”(廣告信息等一些與檢索主題無關的數(shù)據)。
2 Python
Python的作者是一個荷蘭人Guido von Rossum,1982年,Guido從阿姆斯特丹大學獲得了數(shù)學和計算機碩士學位[6]。相比于現(xiàn)在,在他的那個年代里,個人電腦的主頻和RAM都很低,這導致電腦的配置很低。為了讓程序能夠在個人電腦上運行,所有的編譯器的核心都是做優(yōu)化,因為如果不優(yōu)化,一個大一點的數(shù)組就能占滿內存。Guido希望編寫出一種新的語言,這種語言應該具有功能全面,簡單易學,簡單易用,并且能夠擴展等特點。1989年,Guido開始編寫Python語言的編譯器。
3 系統(tǒng)分析
本系統(tǒng)是基于Python的網絡爬蟲系統(tǒng),用于登錄并爬取豆瓣網的一些相冊、日記、主題、評論等動態(tài)的數(shù)據信息。并且能夠把通過關鍵字查詢的動態(tài)信息數(shù)據存儲到數(shù)據庫一些數(shù)據保存到數(shù)據庫,存儲到本地txt文件,同時能夠把相冊動態(tài)中的圖片下載到本地,且把相冊信息也記錄下來,在每一頁的操作完成后可以進行翻頁和選頁,繼續(xù)操作。因此該系統(tǒng)應該滿足以下要求。
(1) 能夠通過驗證碼的驗證模擬登錄豆瓣網。即不需要通過瀏覽器登錄,通過在控制臺輸入用戶名、密碼和驗證碼實現(xiàn)登錄豆瓣網。
(2) 登錄成功后能夠爬取豆瓣網首頁頁面代碼。即通過登錄成功后的cookie能夠訪問游客權限不能訪問的頁面并把頁面代碼抓取下來。
(3) 能夠在頁面代碼中提取出需要的信息。即需要通過正則表達式匹配等方法,從抓取到的頁面上獲取到有用的數(shù)據信息。
(4) 能夠實現(xiàn)翻頁和選頁的功能。即在訪問網站動態(tài)頁面時,能夠通過在控制臺中輸入特定的內容進行翻頁或輸入頁碼進行選頁,然后抓取其它的頁面。
(5) 實現(xiàn)關鍵字查詢的功能,對查到的數(shù)據爬取下來并存儲到數(shù)據庫表中。即在抓取到的頁面上獲取數(shù)據時,能夠通過在控制臺輸入關鍵字來爬取所需的信息。
(6) 對爬取到的圖片URL能夠下載到本地并把圖片的詳細信息存儲到本地txt[12]。即不僅要把圖片下載到本地,還要把圖片的主題信息,圖片的所屬用戶,圖片的具體URL等信息存儲到txt文件。
(7) 對日記和其他的動態(tài)信息存儲到本地不同的文件中。即對抓取到的不同的數(shù)據信息進行不同的存儲方式和存儲路徑。
(8) 在登錄成功的情況下能夠進入個人中心中把當前用戶關注的用戶的信息存儲到數(shù)據庫表中。這些信息可能包括用戶的id,昵稱,主頁url,個性簽名等等。
以上就是本課程爬蟲系統(tǒng)的一些基本需求,根據這些需求就可以明確系統(tǒng)的功能。由于本系統(tǒng)注重網絡信息資源的爬取,所以在用戶交互方面可能不太美觀,在該系統(tǒng)中并沒有編寫界面,所有的操作都在Eclipse的控制臺中進行。例如:在控制臺中輸入用戶名、密碼和驗證碼進行登錄,登錄成功后的頁面選擇,頁面選擇后的數(shù)據爬取等。
但是,系統(tǒng)運行后爬取的數(shù)據可以在存儲數(shù)據的本地txt文件中或者在數(shù)據庫中查看。所以,本系統(tǒng)是否真的能夠爬取到數(shù)據的測試就可以通過觀察本地txt文件的內容變化或數(shù)據庫表中記錄的變化來驗證。
本爬蟲系統(tǒng)包括模擬登錄、頁面抓取、信息爬取、數(shù)據存儲等主要功能。其中,頁面抓取又包括翻頁抓取,選頁抓取,個人頁面抓取;信息爬取又包括動態(tài)抓取,關注用戶抓取;數(shù)據存儲又包括寫入文件,下載到本地,存入數(shù)據庫,如圖1所示。
一段自動抓取互聯(lián)網信息的程序稱為爬蟲,主要組成:爬蟲調度器、URL管理器、網頁下載器、網頁解析器。
⑴ 爬蟲調度器:程序的入口,主要負責爬蟲程序的控制。
⑵ URL管理器:
① 添加新的URL到待爬取集合;
② 判斷待添加URL是否已存在;
③ 判斷是否還有待爬取的URL,將URL從待爬取集合移動到已爬取集合。
URL存儲方式:Python內存即set()集合,關系數(shù)據庫、緩存數(shù)據庫。
⑶ 網頁下載器:根據URL獲取網頁內容,實現(xiàn)由有urllib2和request。
⑷ 網頁解析器:從網頁中提取出有價值的數(shù)據,實現(xiàn)方法有正則表達式、html.parser、BeautifulSoup、lxml。
4 結束語
爬蟲是一個自動下載網頁的程序,它根據既定的抓取目標,有選擇地訪問萬維網上的網頁及其相關的鏈接,獲取所需要的信息。
本文通過爬蟲對于將目標定為抓取與某一特定主題內容相關的網頁,為面向主題的用戶查詢準備數(shù)據資源,實現(xiàn)了網頁數(shù)據抓取與分析。
參考文獻(References):
[1] 曾小虎.基于主題的微博網頁爬蟲研究[D].武漢理工大學, 2014.
[2] 周立柱,林玲.聚焦爬蟲技術研究綜述[J].計算機應用,2005. 25(9):1965-1969
[3] 周中華,張惠然,謝江.于Python的新浪微博數(shù)據爬蟲[J].計算機應用,2014.34(11):3131-3134
[4] 劉晶晶.面向微博的網絡爬蟲研究與實現(xiàn)[D].復旦大學,2012.
[5] 王晶,朱珂,汪斌強.基于信息數(shù)據分析的微博研究綜述[J].計算機應用,2012. 32(7):2027-2029,2037.
[6] (挪) Magnus Lie Hetland. 司維,曾軍崴,譚穎華譯.Python基礎教程[M]. 人民郵電出版社,2014.