最簡單的爬蟲案例開發(fā)
前面的學習中我們已經(jīng)簡單了解了一些爬蟲所需的知識,這節(jié)課我們就來做一個小爬蟲來實踐下我們前面所學習的知識,這節(jié)課我們會爬取慕課網(wǎng)首頁所有的課程名稱:
1. 爬取慕課網(wǎng)首頁所有課程名稱
我們第一個爬蟲程序,是來爬取慕課網(wǎng)的首頁的所有課程信息的名字。下面的代碼鎖使用到的技術(shù)有的我們并沒有涉及到,后面的學習中我們會一一講解。這里只是讓大家對爬蟲程序有個大概的了解,熟悉最基本的爬蟲流程,以及對爬蟲處理有一個粗略的印象,同時,也是激發(fā)大家學習的熱情,讓大家對爬蟲不僅停留在理論上,也可以實際操作去加深印象。
1.1 建立 imoocSpider.py 文件
爬蟲文件的命名一定要準確,爬蟲爬取的是哪一個網(wǎng)站就用哪一個網(wǎng)站來進行命名,這樣以后我們寫的爬蟲越來越多會方便管理。
文件創(chuàng)建好之后首先導(dǎo)入 requests 第三方庫和頁面解析工具 BeautifulSoup:
import requests # requests庫,用來發(fā)送網(wǎng)絡(luò)請求
from bs4 import BeautifulSoup # 一個解析庫,用來解析網(wǎng)頁結(jié)構(gòu)
Tips:BeautifulSoup 我們在后面會講到,這里只是先用一下。
1.2 定義網(wǎng)址變量
定義網(wǎng)址變量 url,url 中存儲的是我們要爬取的網(wǎng)站,這個小爬蟲中我們要爬取的網(wǎng)站是:http://idcbgp.cn。
url = "http://idcbgp.cn" #慕課網(wǎng)首頁地址
1.3 創(chuàng)建請求頭部
創(chuàng)建請求頭部,因為服務(wù)器會分辨請求的是瀏覽器或者是爬蟲,如果是爬蟲的話會直接斷開請求,導(dǎo)致請求失敗。為了不讓我們的爬蟲暴露,所以要給它加上一層偽裝,這樣服務(wù)器就會認為是瀏覽器在請求了:
headers = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36'} # 請求頭部
1.4 發(fā)起請求
使用 requests 庫中的 get 方法來進行請求:
r = requests.get(url, headers= headers) # 發(fā)送請求
1.5 解析請求結(jié)果
因為請求的結(jié)果是 HTML 格式的,所以我們使用 BeautifulSoup 來解析我們的請求結(jié)果:
bs = BeautifulSoup(r.text, "html.parser") # 解析網(wǎng)頁
在返回的請求結(jié)果中,我們想要的數(shù)據(jù)都是在 h3
標簽中包裹著,所以我們使用 BeautifulSoup 查找返回結(jié)果中所有的 h3
標簽并剝離,存儲在變量 mooc_classes 中。
mooc_classes = bs.find_all("h3", class_="course-card-name") # 定位課程信息
1.6 解析數(shù)據(jù)
將每一個 h3
標簽中的課程名稱剝離,并存儲在 class_list
這個列表中去,最后將課程信息存入到文本文件中:
class_list = []
for i in range(len(mooc_classes)):
title = mooc_classes[i].text.strip()
class_list.append("課程名稱 : {} \n".format(title)) #格式化課程信息
with open('mooc_classes.txt', "a+") as f: # 將課程信息寫入文本文件中
for text in class_list:
f.write(text)
1.7 最終代碼
下面就是我們這個小爬蟲的最終代碼:
import requests # requests庫,用來發(fā)送網(wǎng)絡(luò)請求
from bs4 import BeautifulSoup # 這是一個解析庫,用來解析網(wǎng)頁
url = "http://idcbgp.cn" #慕課網(wǎng)首頁地址
headers = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36'} # 請求頭部
r = requests.get(url, headers= headers) # 發(fā)送請求
bs = BeautifulSoup(r.text, "html.parser") # 解析網(wǎng)頁
mooc_classes = bs.find_all("h3", class_="course-card-name") # 定位課程信息
class_list = []
for i in range(len(mooc_classes)):
title = mooc_classes[i].text.strip()
class_list.append("課程名稱 : {} \n".format(title)) #格式化課程信息
with open('mooc_classes.txt', "a+") as f: # 將課程信息寫入文本文件中
for text in class_list:
f.write(text)
上面的程序,就是一個最簡單的一個爬蟲程序。最后,我們格式化輸出的樣式,使得輸出格式為 課程名稱+慕課網(wǎng)課程名稱的樣式,最后把結(jié)果保存到一個 TXT 文件里面。最后我們打開 TXT 文件看一下效果:
如下圖所示:
Tips:一般在正式的爬蟲開發(fā)中我們不會把數(shù)據(jù)存儲到文件中去,而是會存儲到數(shù)據(jù)庫中,這樣才能最大限度的保證數(shù)據(jù)不會丟失。
2. 小結(jié)
本小節(jié),通過運用 BeautifulSoup 以及 Requests 實現(xiàn)了一個最簡單的爬蟲程序,關(guān)于它們的學習,我們會在后面的章節(jié)進行詳細論述。這個小程序,只是向大家演示一個最基本的爬蟲的工作流程。細心的同學肯定會發(fā)現(xiàn),我們的代碼量并不是很多,就輕松實現(xiàn)了一個簡單的爬取工作。其實,正式因為使用Python 編寫爬蟲程序的簡單方便,才使得 Python 語言成為了寫爬蟲程序的首選。