溫婭娜 袁梓梁 何詠宸 黃猛
摘? 要:網絡的發展,大數據、人工智能的崛起使數據變得尤為重要,各行各業的發展都需要數據的支持,任何一種深度學習以及算法中都需要大量的數據作為模型來訓練才能得出較為準確的結論。文中討論了網絡爬蟲實現過程中的主要問題:了解網頁基本結構、使用直觀的網頁分析工具對網頁進行抓包分析、如何使用正則表達式獲取準確的字符串信息、利用Python實現簡單的頁面數據獲取。
關鍵詞:網絡爬蟲;Python;正則表達式;抓包分析
中圖分類號:TP391.3? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)01-0012-03
Abstract:With the development of network,the rise of big data and artificial intelligence,data becomes more and more important. The development of all walks of life needs the support of data. Any kind of deep learning and algorithm needs a lot of data as a model for training to get a more accurate conclusion. This paper discusses the main problems in the implementation of web crawler:understanding the basic structure of web page,using the intuitive web page analysis tool to analyze the web page,how to use regular expression to obtain accurate string information,and using Python to achieve simple page data acquisition.
Keywords:web crawler;Python;regular expression;packet capturing analysis
0? 引? 言
在網絡迅速發展的過程中,萬維網成為大量信息的載體,數據獲取的多樣性也使如何有效地提取并利用這些信息成為一個巨大的挑戰。而網絡爬蟲是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本,使用網絡爬蟲來面對這個巨大的挑戰是最優的,因為網絡爬蟲作為搜索引擎的重要組成部分,在信息檢索過程中發揮著重要的作用,對于網絡爬蟲,Python有很大的優勢,在Python中有各種爬蟲框架,方便高效地下載網頁,多線程、進程模型成熟穩定。本文將對Python爬蟲有效提取大量信息的應用過程進行詳細介紹。
1? 網頁的基本結構
要應用爬蟲技術,首先要看應用的領域,本文主要針對網頁的結構,了解網頁的結構,這些光鮮亮麗的頁面都是由代碼組成的。這種代碼我們稱之為HTML(超文本標記語言),HTML是瀏覽器(Chrome、Safari、IE、Firefox等)看得懂的語言。除了HTML,構建頁面還有CSS以及JavaScript。HTML負責頁面的結構,CSS負責頁面的樣式,JavaScript負責頁面的動態功能。網頁有靜態網頁和動態網頁之分,靜態網頁并不是沒有動態效果的頁面,而是指沒有后臺數據庫的不可交互網頁,常以.htm、.html、.xml為后綴;動態網頁是指能與后臺數據庫進行數據傳遞的可交互網頁,常以.aspx、.asp、.jsp、.php為后綴。目前很多動態網站都采取了異步加載技術(Ajax),這就是很多時候抓取到的源代碼和網站顯示的源代碼不一致的原因。目前有多種技術和方法可以對動靜態網頁中的信息進行獲取,本文介紹了抓包分析和正則表達式兩種方法。下文就介紹一下如何采用抓包分析對動態網頁進行分析。
2? Chrome抓包分析
2.1? 網頁源代碼分析
靜態和動態兩種網頁的源代碼也是不同的,在分析過程中我們需要對這兩種代碼都進行分析,其中重要的是對動態頁面中的數據包抓取分析,本文采用谷歌瀏覽器Chrome開發者工具進行抓包分析,具體采用的方法:以京東商品為例分析如何通過Chrome進行抓包。首先打開一個商品的首頁,通常抓取到的源代碼就是網頁最原始的代碼,來到網頁空白處單擊鼠標右鍵,選擇查看網頁源代碼,并且也可以采用右擊鼠標方式選擇檢查,這樣就得到了兩種不同的源代碼,對代碼進行對比分析。而采用右擊鼠標方式選擇檢查得到的代碼是經過Ajax加載和JavaScript渲染的源代碼,也就是當前網站顯示內容的源代碼。對比過后會發現,代碼隨著網頁的變化而變化,這就是典型的動態網頁異步加載技術(Ajax)的例子。
通過以上方法,我們了解了動態網頁,下一步就是怎樣獲取動態網頁中的數據包來爬取動態網頁中的信息。
2.2? 網頁抓包分析
本文嘗試使用Chrome抓包分析獲取當前頁面商品的價格數據。打開瀏覽器中的開發者工具,然后選擇Network選項卡進行抓包分析。此時要按下F5鍵刷新頁面,才可以看到開發者工具中出現了各種各樣的包,本文只需要JS的數據包,所以需要使用Filter對包進行過濾,經過篩選后即得到返回的商品價格信息。
打開此包Headers中的URL,里面是商品價格信息的JSON數據呈現,當前的網站開發大都采用這樣的模式。分析URL的參數,可以推測出SKUid就是每個商品主鍵(SKU是一個在物流、運輸等產業中常用的縮寫,其全稱是Stock Keeping Unit(庫存量單位),即庫存進出計量的基本單元,現在已經被引申為產品統一編號的簡稱,每種產品均對應有唯一的SKU。例如,商品首頁https://item.jd.com/ 100004286189.html中100004286189就是商品的唯一號碼標識,可以由抓到的價格數據包中的URL的callback前https: //p.3.cn/prices/mgets?后添加SKUid=商品的號碼標識,來直接打開商品的信息從而獲得商品價格。
由此得出結論:通過泛化后的URL,理論上只要能得到商品的SKUid,我們就可以訪問對應商品的信息。
以上方法可以獲取網頁中的關鍵數據,但是從技術角度來說,對于大量數據的采集本方法不適合,需要采用代碼的方法進行,下面將詳細描述正則。
3? 正則表達式獲取字符串信息
正則表達式是一組特殊的字符序列,由一些事先定義好的字符以及這些字符的組合形成,常常用于匹配字符串,在Python中,re模塊就是一個用于處理正則表達式的模塊。
給定一個正則表達式和另一個字符串,可以達到以下兩個目的:給定的字符串是否符合正則表達式的過濾邏輯(稱作“匹配”)。可以通過正則表達式,從字符串中獲取我們想要的特定部分。正則表達式對于剛接觸的人來說,比較難一些,但是它可以迅速地用極簡單的方式表示復雜的字符串,正則表達式具有靈活性、邏輯性和功能性非常強,常用來匹配或提取一些特征字符串。Python中處理正則匹配最常見的函數是match和search函數分別如下:
re.match與re.search的區別:re.match從字符串開始起匹配指定正則表達式,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search從字符串開始匹配正則表達式,直至找到一個盡可能地匹配成功。接下來介紹一個簡單的使用正則表達式爬取小說的實例,小說數據獲取如下。
(1)抓取網頁數據:打開某小說頁面,打開瀏覽器的開發人員工具,使用Requests庫獲取章節和章節對應的鏈接信息,并使用response.text獲取對應章節的內容。把所有內容讀入一個字符串,采用循環的方式讀取字符串內容,獲取每一個章節,分別去下載小說的內容,提取章節內容:
(2)數據清洗及提取:對于獲得的頁面上的原始數據,但是獲取數據本身的格式(其中包含一些標簽、字符)等內容都不符合規范,由于不規范的數據和實際所需要的信息混在一起,因此需要進一步清洗、提取才能獲得我們實際需要的數據。所以再次讀取獲得的字符串信息,獲取每一章的信息(包括章節、url):
再使用空字符代替空格、P標簽等不需要的數據,對獲取的數據進行二次清洗,只保留所需要的小說的文字。
(3)數據持久化:把清洗后的數據保存到新文件中,以便進一步分析。新建一個文件保存小說的內容,在源代碼中找到標題所在的標簽,使用正則表達式將其匹配為文件的title,并將所需內容寫入文件中:
4? 結? 論
本文介紹了兩種方法來進行頁面信息的獲取,使用Chrome抓包分析可以對動態頁面的少量信息進行獲取,而正則表達式可以對頁面中大量的數據進行獲取,對比下,使用正則表達式來獲取數據的效率和功能高一些。
使用抓包分析獲取異步加載動態網頁的數據,下一步會研究使用Python工具實現爬取動態網頁。借助Python功能的各種標準庫對網頁數據的抓取、處理,更方便地實現數據持久化。下一步也會探索一些爬蟲框架來完成數據抓取的目標。也會繼續學習并解決在更深層次地爬取各大網站信息的同時會遇到的反爬蟲問題。
參考文獻:
[1] 郭二強,李博.大數據環境下基于python的網絡爬蟲技術 [J].計算機產品與流通,2017(12):82.
[2] 李培.基于Python的網絡爬蟲與反爬蟲技術研究 [J].計算機與數字工程,2019,47(6):1415-1420+1496.
[3] 王朝陽.基于Python的圖書信息系統的設計與實現 [D].長春:吉林大學,2016.
[4] 徐恒.社會化網絡數據獲取技術研究與實現 [D].長春:吉林大學,2016.
[5] 孫建立,賈卓生.基于Python網絡爬蟲的實現及內容分析研究 [C]//中國計算機用戶協會網絡應用分會2017年第二十一屆網絡新技術與應用年會.中國計算機用戶協會網絡應用分會2017年第二十一屆網絡新技術與應用年會論文集.河北雄安:《計算機科 學》編輯部,2017:275-277+281.
[6] 陳琳,任芳.基于Python的新浪微博數據爬蟲程序設計 [J].信息系統工程,2016(9):97-99.
[7] 陸樹芬.基于Python對網絡爬蟲系統的設計與實現 [J].電腦編程技巧與維護,2019(2):26-27+51.
[8] 熊暢.基于Python爬蟲技術的網頁數據抓取與分析研究 [J].數字技術與應用,2017(9):35-36.
[9] 吳爽.基于python語言的web數據挖掘與分析研究 [J].電腦知識與技術,2018,14(27):1-2.
作者簡介:溫婭娜(1999.03-),女,漢族,內蒙古包頭人,本科,學士學位,研究方向:人工智能和軟件開發應用。