Python爬蟲環境搭建 | 爬蟲獲取所有課程資訊
什麼是爬蟲
爬蟲實際上就是採集網路上資料的一段程式,如果把網際網路比喻成一個蜘蛛網,那麼蜘蛛就是在網上爬來爬去的蜘蛛,爬蟲程式通過請求url地址,根據響應的內容進行解析採集資料, 比如:如果響應內容是html,分析dom結構,進行dom解析、或者正則匹配,如果響應內容是xml/json資料,就可以轉資料物件,然後對資料進行解析。
資源視角
網際網路上一切都是資源,比如視訊資源,新聞資源等,爬蟲實際上就是批量將別人的資源採集下來變成自己的資源的程式。
爬蟲的一些例子
從其他網站爬取特定型別的商品資訊,然後釋出在自己的網上商城裡
從其他網站爬取一些特定圖片,展示在自己的網站裡
搜尋引擎爬取網站基本資訊,收錄在自己的搜尋結果裡
最簡單的爬蟲套路
訪問1個站點,獲取該站點的html程式碼
解析html程式碼,把感興趣的資料從html程式碼裡分離出來
儲存這些資料
實際例子
假設我需要抓取重定向科技目前開設的所有測試課程,那麼
先訪問所有課程頁面,把html程式碼拿到
解析html程式碼,從裡面摳出來課程的名稱和詳情地址
儲存課程的名稱和地址
這樣就可以實現一個最簡單的網路爬蟲了。
爬蟲對於測試的意義
有時候自己去造一些測試資料是很麻煩的事情,這時候我們就可以使用爬蟲去獲取其他站點的類似資料,對資料進行加工後就可以當測試資料來使用了。
開發環境介紹
我們使用python來實現最簡單的爬蟲。
使用python的requests庫來發起http請求並獲取目標站點的html程式碼。
使用python的BeautifulSoup庫來解析html,從html中提取感興趣的內容。
Requests教程
大家可以在測試教程網requests教程中找到requests庫的一些典型用法。
環境搭建
安裝python3,可以參考這裡
安裝requests,可以參考這裡
安裝BeautifulSoup,可以參考這裡
作者使用軟體版本
我的電腦上環境是這樣
python: 3.5.2
requests: 2.13.0
beautifulsoup4: 4.6.0
不需要與我的版本保持完全一致,只需要大於等於我使用的版本就可以了
獲取所有課程資訊
我們現在來實現第一個超級簡單的網路爬蟲 用來抓取重定向科技目前開設的所有測試課程,並打印出來,步驟大概是這樣子
先訪問所有課程頁面,把html程式碼拿到,實際上就是拿到一個很長的文字,文字內容就是網頁的html程式碼
分析html程式碼,找到我們需要獲取資訊的html特徵
解析html程式碼,根據html特徵,從裡面摳出來課程的名稱
打印出所有課程的名稱
分析html程式碼
我們在編寫爬蟲的時候往往會花很多時間在分析html程式碼上,畢竟重要的資訊都包含在html程式碼中,我們需要找到合適的特徵,通過固定的套路去解析html,獲取特定內容。
課程名稱部分的html程式碼如下所示
<div class="col-md-3 col-sm-6"> <div class="servive-block-in servive-block-colored servive-block-grey"> <h4>效能測試從入門到精通班</h4><div><i class="icon-rocket"></i> </div> <p>2017年09月23日開課,為期3個月</p></div>
可以看到,課程名稱的html標籤是h4
,通過搜尋整個頁面,我們發現頁面上只有4個h4,也就是說,只要獲取到頁面上所有的h4,我們就能把課程名稱給解析出來。
分析html一般有下面一些套路
縮小範圍: 只解析特定區域的html,比如只遍歷
<nav></nav>
標籤中的子元素組合屬性: 有一些節點的屬性是相同的,但我們經常只需要獲取其中一些節點的內容,這時候可以通過組合該節點屬性和其父節點屬性的方式指定特定的節點
先遍歷後過濾:還是上面一種情況,我們也可以先遍歷所有的目標節點,再從目標節點中過濾出我們感興趣的內容
解析html程式碼
大家可以先去了解一下html的基礎知識,比較有用的是
html元素
html屬性
Beautiful Soup庫可以幫我們解析html程式碼,所謂的解析,無非是做下面的一些事情
從html文件中找到一些元素
獲取某個元素或者一些元素的屬性
獲取某個元素或者一些元素的文字
在這個例子裡,我們就是要找到所有h4
元素,並獲取所有h4
元素的文字。
程式碼
新建名為get_courses.py
的檔案,輸入下面的內容
import requestsfrom bs4 import BeautifulSoupurl = 'http://www.ixxt.info/courses' # 定義被抓取頁面的url# 獲取被抓取頁面的html程式碼,並使用html.parser來例項化BeautifulSoup,屬於固定套路soup = BeautifulSoup(requests.get(url).text, 'html.parser')# 遍歷頁面上所有的h4for course in soup.find_all('h4'): # 打印出h4的text屬性 print(course.text)
執行
在命令列中輸入
python get_courses.py
預期結果
如果一切正常,那麼應該可以看到下面的結果
效能測試從入門到精通班介面自動化測試開發--Python班Selenium自動化測試--Java班Selenium自動化測試--Python班
作者:西邊人
西說測試,公眾號:testpu