文/裴麗麗
根據《中國互聯網絡發展狀況統計報告》,到2018年12月為止,全年新增網民5653萬,網民規模達8.29億,普及率為59.6%,與2017年底相比提升3.8%?;ヂ摼W的普及使得網上的信息資源呈現爆炸式增長,大數據時代的到來,對如何在短時間內從網頁中找到用戶需要的信息提出了挑戰,無論是搜索引擎還是個人或者組織,要獲取目標數據,都要從公開網站爬取數據,在這樣的需求之下,網絡爬蟲技術應運而生。
網絡爬蟲,又被稱為網頁蜘蛛或者網絡機器人,是指按照某種規則從網絡上自動爬取用戶所需內容的腳本程序。通常情況下,每個網頁包含其他網頁的入口,網絡爬蟲可以通過一個網址,鏈接進入其他網址獲取內容,最后返還給廣大用戶所需要的信息數據。目前最適合用來網絡爬蟲的編程語言是Python,Python語言整合了針對網絡爬蟲所需要的一系列庫,能夠高效率得完成爬取目標數據。
本文以豆瓣網電影模塊為例,實現了Python網絡爬蟲的全過程,并將爬蟲結果保存在本地。主要分四個步驟實現,尋找爬蟲入口,使用re和requests庫獲得所有電影信息的
url鏈接、使用BeautifulSoup庫解析電影數據、將爬取到的信息保存到本地。
Window10操作系統、python3.7、Pycharm集成開發環境、谷歌瀏覽器
豆瓣電影網站與有些網站不同,無法直接在當前頁面的網頁源碼中找到我們所需要抓取電影的具體信息,因此需要尋找爬蟲入口。通過谷歌瀏覽器:更多工具->開發者工具->Network->XHR發現可抓取鏈接到每部電影的網頁https://movie.douban.com/j/search_subjects?type=movie&tag=最新& sort = rec ommend & page _limit=20&page_start=0,其中,tag為查詢電影的類型,共有17種類型,本文以熱門電影為例進行爬蟲的設計與實現;sort為排序方式;page_limit為每頁顯示的電影個數,page_start為查詢電影起始位置。抓取信息時,只需改變tag及page_start(20的倍數),就可以獲取更多的url鏈接。具體如圖1所示。
通過import requests測試程序是否報錯,確定安裝好requests庫后,通過requests 庫提取網頁源碼,requests 庫比urllib庫提取網頁源碼更簡潔,方便開發者使用,只需要幾步就可以實現。獲得網頁源碼后,繼續通過re庫提取url鏈接,圖2中,url鏈接是"url":"https://movie.douban.com/subject/27060077/"這樣的形式,該形式不是一個標準的url鏈接,需要進行相應的處理,假設當前需要提取100部電影的信息,具體代碼和注釋如下:
#導入所需庫
import requests
import re
#page控制抓取電影的數量
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:部分網頁源碼

圖4:提取電影信息

圖5:存儲的csv文件
page+=20
通過from bs4 import BeautifulSoup測試程序是否報錯,確定安裝好BeautifulSoup庫后,通過該庫解析電影數據,提取電影的具體信息,進入一部電影,部分網頁源代碼如圖3所示。
如圖4,提取該電影的名稱,上映年份,導演,主演,豆瓣評分,短評等信息,部分提取代碼如下:


如圖5,從網頁中爬取到數據后,需要保存到本地,既可以保存在文件中,也可以保存在數據庫中,本文將結果保存為csv文件。部分代碼如下:
with open("E:\a.csv","a")as f:
#中間代碼為2.4中解析出的電影信息
f.write(movie)
f.close()
本文基于Python提供豐富的庫,實現了豆瓣電影種熱門類型電影的爬取,可以根據提出的爬蟲方法對豆瓣官網的圖書和音樂等其他模塊進行爬取,以此來研究用戶的喜好。當今處于大數據時代,用戶對各類數據的需求越來越大,爬蟲作為數據收集的一種手段,具有廣闊的應用前景。