iT邦幫忙

2021 iThome 鐵人賽

DAY 30
1
AI & Data

從資料庫到資料分析視覺化系列 第 30

{Day30} 網路爬蟲

前言

現在要進入網路爬蟲的自學紀錄了!!!

Such a long way

網路爬蟲可以說是非常實用的功能

這篇文章會學習到

  1. 網路爬蟲的功用
  2. HTML簡介
  3. 使用Reruests函式庫

今天的自學資源是來自Coursera上台大資管系孔令傑老師開設的:

用 Python 做商管程式設計(三)(Programming for Business Computing in Python (3))

Coursera | Online Courses & Credentials From Top Educators. Join for Free | Coursera

這堂課的內容是在第5週的C05網路爬蟲

老師上課的語速非常剛好

內容也很容易上手

非常推薦對python有興趣的人可以上去coursera上看老師的教學影片

對學習python的人來說會是很好上手並且內容豐富的一堂課

網路爬蟲的功用

我們常見的網頁通常是長這樣

或是這樣

爬蟲就是去網頁上把資訊爬取下來

網頁上的這些資訊都是利用原始碼包裝過後所呈現出來的

以chrome為例

按右鍵就可以選取『檢視原始碼』,像是下圖紅色框框

網頁的原始碼如下圖所示

這些網頁的商品資訊經常會有變動

爬蟲可以定時擷取並且更新資料

像是商品種類或是價格

爬蟲也可以幫我們進行彙整與統計

像是要比較競爭者的商品價格

就可以利用爬蟲這個功能

網路爬蟲的原理

最基本的爬蟲程式:

  • 抓取該網頁的原始碼(通常是基於HTML規格編寫的內容)
  • 了解該網頁原始碼的結構
  • 了解想擷取的資訊儲存在哪裡
  • 解析該網頁原始碼,取得想要的資訊

進階的網路爬蟲

  • 針對多個網頁進行爬取

  • 傳遞資訊給網頁(例如登入資訊)

  • 操作網頁(例如點選下一頁)

    像是要搶車票、演唱會的票,網頁通常需要登入、輸入資訊

一般的情況是需要我們手動輸入

但是有了爬蟲之後就可以預先設定好要輸入的內容、想要的座位

在需要和時間競賽的情況下

電腦會跑得比人快

使用爬蟲會替我們省下不少麻煩

HTML簡介

HTML是一種程式語言

準確來說是一種標記語言

利用不同的標記產生美觀且具有互動性的網頁

雖然現在有不少網頁都不是用純HTML寫的,但是大多數都仍然遵循HTML架構

絕大多數的瀏覽器取得HTML檔案之後

會解析其中的標籤,並將解析後的網頁呈現出來

接下來來看簡單的網頁原始碼

HTML的排列大致上是樹狀的

有開頭跟結尾

上述範例有分成兩部分:

  1. Head:網頁標籤頁上顯示的文字
  2. Body:頁面上要出現什麼

現在來看看Body裡的文字分別有何意思

  1. <body bgcolor........>:這行代表的是網頁的背景要選用什麼顏色
  2. <h3> Hi!!!</h3>:表示的是header等級三,裡面包的是要用的文字
  3. <ul> ......<ul>: 則是清單的意思
  4. <li> .....</li>: 這裡的li是list item的意思
  5. buttom :則會產生按鈕

可以看出HTML語法有一定的排列規則

爬蟲主要是看我們想要的資訊儲存在某個標籤裡面

右上角紅色框框是在網頁上顯示出來的樣子

而下方的藍色框框則是他的原始碼

使用Reruests函式庫

Python有非常多跟爬蟲相關的library

這裡會使用到的是

  • requests: 取得網頁HTML原始碼
  • beautifulsoup: 解析HTML

現在來練習取得網頁的HTML原始碼

假如現在想要取得博客來上跟python有關的書籍

首先使用requests.get()取得網頁HTML的原始碼

import requests 

url = "https://search.books.com.tw/search/query/cat/all/sort/9/v/0/page/1/spell/3/ms2/ms2_1/key/python"

r = requests.get(url) #r是requests.get()回傳的物件
print(r.ststus_code) #200代表ok

if r.status_code == requests.codes.ok:
	print("OK!")

r是requests.get()回傳的物件

r.status_code 紀錄這個HTTP request的結果代碼

requests.codes.ok就是200

若是想查看原始碼,可以使用r.text

print(r.text)

可以看到輸出的是複雜的原始碼

代表已經把網頁的資訊擷取下來了!

接下來就可以使用beautifulsoup函式庫來協助我們解讀


上一篇
{DAY 29} Seaborn
系列文
從資料庫到資料分析視覺化30

1 則留言

0
juck30808
iT邦新手 3 級 ‧ 2021-10-12 18:38:08

恭喜大大即將完賽XD !!!

我要留言

立即登入留言