摘 要:針對爬取工作量較重,分析內(nèi)容繁雜的網(wǎng)站而言,利用正則表達式的re模塊實現(xiàn)爬蟲是較困難的,此時需要更高效的BeautifulSoup分析工具來解決這一問題。爬取豆瓣電影票-大連城市網(wǎng)站中的全部電影列表,首先進行網(wǎng)頁源代碼分析,采用python自帶的html.parser解析器解析網(wǎng)頁,爬取所需電影信息,然后采用5種不同方式進行存儲,方便進行不同需求的數(shù)據(jù)挖掘和分析。
關(guān)鍵詞:網(wǎng)頁爬取;BeautifulSoup;解析器
一、BeautifulSoup
BeautifulSoup是網(wǎng)絡(luò)爬蟲必學(xué)的技能之一,是一個可以從HTML或XML文件中爬取數(shù)據(jù)的python庫。BeautifulSoup主要功能是從復(fù)雜的網(wǎng)頁解析和爬取HTML或XML內(nèi)容,哪怕此時使用BeautifulSoup實現(xiàn)的是海量的網(wǎng)站源碼的分析工作,我們會發(fā)現(xiàn),它的實現(xiàn)過程也非常簡單,極大地提高了分析源碼的效率。
同時,BeautifulSoup支持Python標準庫中的HTML解析器,還支持一些第三方庫的解析,如果不進行特殊的解析器安裝,Python則會使用默認的解析器。基于以上特性,BeautifulSoup已成為和Lxml一樣出色的Python解析器,為用戶靈活提供不同的網(wǎng)站數(shù)據(jù)爬取和解析策略。
二、基于BeautifulSoup的獨立數(shù)據(jù)爬取
1.實例分析
本實例的爬取目標是豆瓣電影票-大連城市網(wǎng)站中的全部電影列表,網(wǎng)站內(nèi)容見圖1,網(wǎng)站地址如下:https://movie.douban.com/cinema/nowplaying/dalian/,部分網(wǎng)頁源代碼如圖2所示,需要說明的是,由于網(wǎng)站內(nèi)容不斷地動態(tài)更新,因此每次運行得到的結(jié)果可能會有差異。
2.源代碼分析
我們的目標是電影列表,首先從圖2中搜索到目標位置,然后通過“soup.find_all(‘li’,class_=’list-item’)”,找到全部class_屬性為“l(fā)ist-item”的<li>標簽,爬取需要的電影信息。例如,item[‘data-title’]獲取<li>標簽中的指定屬性data-title(電影名)對應(yīng)的value值,item[‘id’]對應(yīng)屬性id(電影ID)的value值等,最后依次爬取需要的內(nèi)容即可。
3.具體代碼實現(xiàn)
本實例實現(xiàn)了爬取豆瓣電影票-大連城市網(wǎng)站中的全部電影列表,爬取信息完整代碼如圖3所示。
4.爬取信息存儲
通過以上程序可以得到所有大連城市電影信息,緊接著可以采用不同存儲方式進行存取,以下列出了5種存儲方式:
(1)存儲于.txt文檔
使用python讀寫文本數(shù)據(jù),需要使用open()方法,用于打開一個文件,將爬取內(nèi)容寫入當前打開的文件中。注意,open()方法打開文件后,一定不要忘記關(guān)閉文件對象,即結(jié)束文件的使用時調(diào)用close()方法。具體代碼見圖4所示。
(2)存儲于.csv文件
CSV文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本)。純文本意味著該文件是一個字符序列,不包含二進制數(shù)字。CSV文件由任意數(shù)量的記錄組成,記錄之間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或制表符。使用該存儲方式之前需要import csv,實現(xiàn)過程具體代碼見圖5所示。
(3)存儲于.xls表格
在python中,xlwt是讀取Excel文件的一個常用擴展模塊,可以實現(xiàn)創(chuàng)建表單、寫入指定單元格、指定單元格樣式等常見功能,人為使用Excel實現(xiàn)的絕大部分寫入功能,都可以使用這個擴展包實現(xiàn)。xlwt模塊同樣需要用戶單獨安裝:pip install xlwt,使用前導(dǎo)入xlwt包:import xlwt,實現(xiàn)過程如圖6所示。
(4)存儲于.json文件
JSON作為一種輕量級的數(shù)據(jù)交換格式,可作為讀寫數(shù)據(jù)的對象使用,通常使用JSON模塊,首先需要導(dǎo)入JSON庫:import json。在JSON模塊中,主要涉及json.dumps()、json.load()和json.loads()方法,實現(xiàn)過程如圖7所示。
(5)存儲于MongoDB數(shù)據(jù)庫
MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫中功能最豐富的、與關(guān)系數(shù)據(jù)庫最相近的NoSQL數(shù)據(jù)庫。使用前需要安裝MongoDB服務(wù)器端,然后安裝PyMongo模塊,該模塊是Python對Mongodb操作的接口包,它能夠?qū)崿F(xiàn)對MongoDB的增、刪、改、查及排序等操作。由于PyMongo模塊來源于第三方,因此未包含在Python的標準庫中,需要自行安裝:pip install PyMongo,然后導(dǎo)入PyMongo包:import pymongo,實現(xiàn)過程如圖8所示。
參考文獻:
[1]奚增輝等.應(yīng)用主題爬蟲的電力網(wǎng)絡(luò)輿情數(shù)據(jù)采集[J].西安工程大學(xué)學(xué)報, 202003).
[2]高雅婷,劉雅舉. 基于Python的網(wǎng)上購物數(shù)據(jù)爬取[J].現(xiàn)代信息科技,2020(5):16.
[3]王彥雅. 基于Python的廊坊市二手房數(shù)據(jù)爬取及分析[J].電腦知識與技術(shù),2020(29).
[4]于學(xué)斗,柏曉鈺.基于Python的城市天氣數(shù)據(jù)爬蟲程序分析[J].辦公自動化. 2020,27(07).
作者簡介:孫愛婷(1984-),女,漢族,遼寧大連人,講師,碩士,遼寧輕工職業(yè)學(xué)院,信息工程系大數(shù)據(jù)技術(shù)專業(yè)主任,主要研究方向:大數(shù)據(jù)技術(shù)。