文/裴麗麗
根據(jù)《中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告》,到2018年12月為止,全年新增網(wǎng)民5653萬,網(wǎng)民規(guī)模達8.29億,普及率為59.6%,與2017年底相比提升3.8%。互聯(lián)網(wǎng)的普及使得網(wǎng)上的信息資源呈現(xiàn)爆炸式增長,大數(shù)據(jù)時代的到來,對如何在短時間內(nèi)從網(wǎng)頁中找到用戶需要的信息提出了挑戰(zhàn),無論是搜索引擎還是個人或者組織,要獲取目標數(shù)據(jù),都要從公開網(wǎng)站爬取數(shù)據(jù),在這樣的需求之下,網(wǎng)絡(luò)爬蟲技術(shù)應(yīng)運而生。
網(wǎng)絡(luò)爬蟲,又被稱為網(wǎng)頁蜘蛛或者網(wǎng)絡(luò)機器人,是指按照某種規(guī)則從網(wǎng)絡(luò)上自動爬取用戶所需內(nèi)容的腳本程序。通常情況下,每個網(wǎng)頁包含其他網(wǎng)頁的入口,網(wǎng)絡(luò)爬蟲可以通過一個網(wǎng)址,鏈接進入其他網(wǎng)址獲取內(nèi)容,最后返還給廣大用戶所需要的信息數(shù)據(jù)。目前最適合用來網(wǎng)絡(luò)爬蟲的編程語言是Python,Python語言整合了針對網(wǎng)絡(luò)爬蟲所需要的一系列庫,能夠高效率得完成爬取目標數(shù)據(jù)。
本文以豆瓣網(wǎng)電影模塊為例,實現(xiàn)了Python網(wǎng)絡(luò)爬蟲的全過程,并將爬蟲結(jié)果保存在本地。主要分四個步驟實現(xiàn),尋找爬蟲入口,使用re和requests庫獲得所有電影信息的
url鏈接、使用BeautifulSoup庫解析電影數(shù)據(jù)、將爬取到的信息保存到本地。
Window10操作系統(tǒng)、python3.7、Pycharm集成開發(fā)環(huán)境、谷歌瀏覽器
豆瓣電影網(wǎng)站與有些網(wǎng)站不同,無法直接在當前頁面的網(wǎng)頁源碼中找到我們所需要抓取電影的具體信息,因此需要尋找爬蟲入口。通過谷歌瀏覽器:更多工具->開發(fā)者工具->Network->XHR發(fā)現(xiàn)可抓取鏈接到每部電影的網(wǎng)頁https://movie.douban.com/j/search_subjects?type=movie&tag=最新& sort = rec ommend & page _limit=20&page_start=0,其中,tag為查詢電影的類型,共有17種類型,本文以熱門電影為例進行爬蟲的設(shè)計與實現(xiàn);sort為排序方式;page_limit為每頁顯示的電影個數(shù),page_start為查詢電影起始位置。抓取信息時,只需改變tag及page_start(20的倍數(shù)),就可以獲取更多的url鏈接。具體如圖1所示。
通過import requests測試程序是否報錯,確定安裝好requests庫后,通過requests 庫提取網(wǎng)頁源碼,requests 庫比urllib庫提取網(wǎng)頁源碼更簡潔,方便開發(fā)者使用,只需要幾步就可以實現(xiàn)。獲得網(wǎng)頁源碼后,繼續(xù)通過re庫提取url鏈接,圖2中,url鏈接是"url":"https://movie.douban.com/subject/27060077/"這樣的形式,該形式不是一個標準的url鏈接,需要進行相應(yīng)的處理,假設(shè)當前需要提取100部電影的信息,具體代碼和注釋如下:
#導(dǎo)入所需庫
import requests
import re
#page控制抓取電影的數(shù)量
page=0
while page<=80:
url="https://movie.douban.com/j/search_subjects?type=movie&tag=熱 門&sort=recommend&""page_limit=20&page_start="+str(page)
#通過requests庫的get()方法獲取源碼
r = requests.get(url)
html = r.text
#通過re庫提取當前頁面的url鏈接
ree = re.compile('"url":"(.*?)"',re.S)
items = re.findall(ree,html)
for item in items:
#對url形式進行處理
url = item.replace("\","")
print(url)
圖1:url鏈接入口
圖2:獲取url鏈接
圖3:部分網(wǎng)頁源碼
圖4:提取電影信息
圖5:存儲的csv文件
page+=20
通過from bs4 import BeautifulSoup測試程序是否報錯,確定安裝好BeautifulSoup庫后,通過該庫解析電影數(shù)據(jù),提取電影的具體信息,進入一部電影,部分網(wǎng)頁源代碼如圖3所示。
如圖4,提取該電影的名稱,上映年份,導(dǎo)演,主演,豆瓣評分,短評等信息,部分提取代碼如下:
如圖5,從網(wǎng)頁中爬取到數(shù)據(jù)后,需要保存到本地,既可以保存在文件中,也可以保存在數(shù)據(jù)庫中,本文將結(jié)果保存為csv文件。部分代碼如下:
with open("E:\a.csv","a")as f:
#中間代碼為2.4中解析出的電影信息
f.write(movie)
f.close()
本文基于Python提供豐富的庫,實現(xiàn)了豆瓣電影種熱門類型電影的爬取,可以根據(jù)提出的爬蟲方法對豆瓣官網(wǎng)的圖書和音樂等其他模塊進行爬取,以此來研究用戶的喜好。當今處于大數(shù)據(jù)時代,用戶對各類數(shù)據(jù)的需求越來越大,爬蟲作為數(shù)據(jù)收集的一種手段,具有廣闊的應(yīng)用前景。