摘要:本文針對互聯(lián)網(wǎng)的海量數(shù)據(jù)信息查找、搜索繁瑣的問題,提出通過網(wǎng)絡爬蟲的理念,模仿人的過程來幫助人們查找更有價值的數(shù)據(jù)信息,節(jié)約時間,提高工作效率。并針對網(wǎng)絡爬蟲的概念,工作原理,以及系統(tǒng)分析設(shè)計與實現(xiàn)進行了詳細的分析和討論,并提出行之有效的實現(xiàn)方案。
關(guān)鍵詞:python;爬蟲系統(tǒng);設(shè)計;實現(xiàn)
中圖分類號:TP312.1? ? 文獻標識碼:A? ? 文章編號:1007-9416(2020)10-0000-00
當代萬維網(wǎng)和互聯(lián)網(wǎng)技術(shù)發(fā)展迅猛,海量數(shù)據(jù)讓人們的工作和生活反而變得繁瑣,為了更好的找到對我們有利用價值的數(shù)據(jù)和信息,使用手動操作會過于繁瑣。如在瀏覽微博網(wǎng)站時,發(fā)現(xiàn)很多評論比較有值得我們分析的地方,需要下載到本地,為此通過網(wǎng)絡爬蟲的理念,模仿人來幫助人們查找數(shù)據(jù),減輕搜索時間,提高工作效率。
1 網(wǎng)絡爬蟲
網(wǎng)絡爬蟲其實就是模仿人來對我們想要訪問的網(wǎng)頁內(nèi)容進行訪問,模仿人來獲取我們需要的數(shù)據(jù),并將這些數(shù)據(jù)下載并保存到我們想要存放的地方,有時我們需要獲取的數(shù)量很龐大而依靠我們自己進行操作就會顯得很繁瑣,所以我們需要用到爬蟲來獲取大量的數(shù)據(jù)[1]。
本網(wǎng)絡爬蟲設(shè)計是一個能夠?qū)W(wǎng)頁實現(xiàn)自動提取的程序,在搜索引擎中,從萬維網(wǎng)上它能為其下載網(wǎng)頁,也是組成搜索引擎的重要部分。本軟件由Python語言進行開發(fā),并采用已有的比較成熟的requests模塊、pandas模塊對指定新浪微博評論的獲取以及進行簡單的分析,將我們所需要的數(shù)據(jù)下載到本地,并將我們獲得的數(shù)據(jù)以TXT和Excel的形式更加清晰的呈現(xiàn)出來。
網(wǎng)絡爬蟲(web crawler)又稱為網(wǎng)絡蜘蛛(web spider)或網(wǎng)絡機器人(web robot),另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或蠕蟲,同時它也是“物聯(lián)網(wǎng)”概念的核心之一。網(wǎng)絡爬蟲本質(zhì)上是一段計算機程序或腳本,其按照一定的邏輯和算法規(guī)則自動地抓取和下載我們所需要的萬維網(wǎng)的網(wǎng)頁,是搜索引擎的一個重要組成部分。網(wǎng)絡爬蟲類似于一個搜索引擎來模仿人瀏覽網(wǎng)頁是的狀態(tài),并將我們需要獲取到的內(nèi)容下載并保存下來。網(wǎng)絡爬蟲一般是根據(jù)預先設(shè)定的一個或若干個初始網(wǎng)頁的URL開始,然后按照一定的規(guī)則爬取網(wǎng)頁,獲取初始網(wǎng)頁上的URL列表,之后每當抓取一個網(wǎng)頁時,爬蟲會提取該網(wǎng)頁新的URL并放入到未爬取的隊列中去,然后循環(huán)的從未爬取的隊列中,取出一個URL再次進行新一輪的爬取,不斷的重復上述過程,直到隊列中的URL抓取完畢,或者達到其他的既定條件,爬蟲才會結(jié)束。
2 網(wǎng)絡爬蟲模型的分析與設(shè)計
2.1 模型分析
首先建立URL任務列表,即開始要爬取的URL。由URL任務列表開始,根據(jù)預先設(shè)定的深度爬取網(wǎng)頁,抓取網(wǎng)頁的過程中,不斷從當前的頁面上抽取新的url放入隊列中,直到滿足一定的停止條件。同時判斷URL是否重復,按照設(shè)定爬取的微博內(nèi)容搜索頁面,然后對頁面進行分析,并提取我們所需要數(shù)據(jù)的相關(guān)URL,最后將所得URL返回任務列表[1]。之后將任務列表中URL重新開始爬取,從而使網(wǎng)絡爬蟲進行循環(huán)運行。
2.2 概要設(shè)計
確認了需要爬取的網(wǎng)站之后,下一步就是使用requests模塊對獲取到的url對應的網(wǎng)頁內(nèi)容進行抓取。首先需要遍歷整個網(wǎng)頁的Html代碼,尋找我們需要下載的信息,包括評論者名稱,評論人的微博主頁鏈接,評論的內(nèi)容,評論的時間,點贊數(shù)回復數(shù)以及我們爬取的微博鏈接,將其中的評論者的名稱,評論的內(nèi)容還有爬取的微博鏈接生成一個TXT的文件,并將這個文件使用pandas中的DataFrame方法進行一個分析,將其他所有爬取到的內(nèi)容提取出來使用openpyxl方法將所爬取到的所有內(nèi)容導出到Excel并保存在Excel里面[2]。
2.3 程序流程設(shè)計
程序流程圖主要用來將程序在計算機上運行的具體步驟用圖形來表示,程序流程圖如圖1所示。
3 詳細設(shè)計與實現(xiàn)
3.1 目標網(wǎng)站URL
因為網(wǎng)頁端新浪微博的反爬蟲措施特別嚴厲,所以我們采取爬取相對難度較小反爬蟲措施不那么嚴厲的手機端新浪微博,目標網(wǎng)站的url地址為:“https://m.weibo.cn/”。
為了更加有效的找到關(guān)鍵字對應的信息,本項目中所有的URL不僅僅是目標網(wǎng)站的URL。由于遍歷整個網(wǎng)站需要消耗更多的資源,也并不能很好的體現(xiàn)Python的優(yōu)勢,更是添加了開發(fā)的難度,選擇使用目標網(wǎng)站論壇自身的搜索板塊的URL,作為程序讀取的內(nèi)容。這樣既可以降低工作量,也可以更加方便的抓取相關(guān)的信息。后續(xù)需要爬取其他微博下面的評論我們只需要將“https://m.weibo.cn/detail/***********”中的*****部分更換為我們需要爬取的相應的微博ID即可[3]。目標網(wǎng)站的URL地址如圖2所示。
3.2 爬取模塊
Requests是用python語言基于urllib編寫的,采用了Apache2Licensed開源協(xié)議的一個HTTP庫,與urllib相比起來requests使用起來更加的方便和簡潔,也可以為我們節(jié)約大量的時間。這里使用到了requests的get方法和post方法,其中g(shù)et方法用來向我們需要訪問的微博URL傳遞訪問的請求,post方法用來向HTML網(wǎng)頁發(fā)送一個post請求。導入requests模塊如圖3所示。
3.3 偽裝time模塊
在實際使用中,因為不少的網(wǎng)站都具有反爬蟲的措施,為了能夠不被識別,將我們判定為爬蟲程序并將我們的IP封禁,我們需要將每次訪問偽裝成瀏覽器進行操作,并設(shè)置時間限制來訪問我們需要爬取數(shù)據(jù)的網(wǎng)站,防止被判定為程序抓取并屏蔽IP,這里就需要用到time模塊,使用time.sleep()方法來傳遞一個我們想要延遲幾秒來響應的參數(shù)。爬蟲中Time模塊的主要功能就是我們按照自己的意愿來設(shè)置爬蟲程序訪問我們需要訪問網(wǎng)站的時間間隔。另外本文中的time模塊也用來提取評論者評論該微博的詳細時間[3]。導入time模塊如圖4所示。
3.4 數(shù)據(jù)處理模塊
Pandas模塊是python中用于數(shù)據(jù)導入以及整理數(shù)據(jù)的模塊,對數(shù)據(jù)挖掘前期數(shù)據(jù)的處理十分有用。在Python中,pandas是基于numpy數(shù)組構(gòu)建的,使數(shù)據(jù)預處理、清洗、分析工作變得更快更簡單。pandas是專門為處理表格和混雜數(shù)據(jù)設(shè)計的,而numpy更適合處理統(tǒng)一的數(shù)值數(shù)組數(shù)據(jù),由于本文是爬取的手機端新浪微博評論,所以這里沒有使用到numpy而使用了pandas這種處理多種類型的數(shù)據(jù)的方法。pandas主要有series(一維數(shù)組),dataframe(二維數(shù)組),panel(三維數(shù)組),panel4D(四維數(shù)組),panelND(更多維數(shù)組)等數(shù)據(jù)結(jié)構(gòu),其中Series和DataFrame的應用最為廣泛。Series 是一維帶標簽的數(shù)組,它可以包含任何數(shù)據(jù)類型。包括整數(shù),字符串,浮點數(shù),Python 對象等。Series 可以通過標簽來定位。DataFrame是二維的帶標簽的數(shù)據(jù)結(jié)構(gòu),我們可以通過標簽來定位數(shù)據(jù)。本文也主要是使用了pandas中的DataFrame方法來使我們生成的TXT文件進行一個二維數(shù)組的處理,使我們能更清晰的看見我們爬取的數(shù)據(jù)。導入pandas模塊如圖5所示。
本文主要的研究內(nèi)容是基于Python的數(shù)據(jù)爬蟲的設(shè)計與實現(xiàn),在爬蟲開發(fā)前期,分析了幾個類似的爬蟲程序,在開發(fā)過程中,也運用互聯(lián)網(wǎng)查找相關(guān)技術(shù)方法解決一些問題,基本完成了爬蟲的主要功能。
參考文獻
[1] 川郭濤,黃銘鈞.社區(qū)網(wǎng)絡爬蟲的設(shè)計與實現(xiàn)[J].智能計算機與應用,2012,2(4):65-67.
[2] 廉捷,周欣,曹偉,等.新浪微博數(shù)據(jù)挖掘方案[J].清華大學學報:自然科學版,2011,51(10):1300- 1305.
[3] 劉艷平,俞海英,戎沁.Python模擬登錄網(wǎng)站并抓取網(wǎng)頁的方法[J].微型計算機應用,2015,31(1):58-60.
收稿日期:2020-09-12
作者簡介:楊國軍(1974—),男,四川內(nèi)江人,碩士,副教授,研究方向:軟件工程,工作流技術(shù)。
Design?and?Implementation?of?Data?Crawler?Based?on?Python
YANG Guo-jun
(Neijiang?Normal?University, Neijiang Sichuan? 641112)
Abstract: This paper puts forward the idea of web crawler and imitates human process to help people find more valuable data information, save time and improve work efficiency. The concept, working principle, In view of the tedious problem of searching and searching massive data information on the Internet, system analysis, design and implementation of web crawler are analyzed and discussed in detail, and an effective implementation scheme is proposed.
Keywords: python; spider system ; design; realize