這篇是參考原文:How to scrape websites with Python and BeautifulSoup,另外佇 TechOrange 有華語的翻譯:附範例與完整程式碼!手把手帶著你用 Python 做出爬蟲、抓取網頁資料。
毋過,伊毋是共頂面 ê 例 Copy and Paste 就好,嘛是有一寡鋩鋩角角愛修整。而且原例是 Python 2 的程式,我會閣揣出方法來予伊踮 Python3 會使振動。
當然,你若會曉一寡網頁 ê 設計智識閣較好。毋過,就算毋捌嘛免煩惱。因為,這款的寫法是一種 SOP ê 寫法。咱講个 SOP (台羅: e-su-oo-phi, 英文: Standard Operation Procedure),就是講只要你會電腦環境和我相仝,抑是差不多,干焦照文章內講个照步來共命令拍入去,你的程式就會振動。
啥乜是鑢網 (Web scraping)?
鑢網(Web scraping) 是一種踮網路頂,共你欲挃的資訊搜揣出來的技術。你會問,咱用 Chrome, IE, Firebox, Safari 去看就好,那有啥乜特別咧? 咱佇遮講个揣資料,毋是一筆兩筆,是大量的資料。比如講,我干焦想欲知影一百間公司的股票這馬偌懸? 平均偌濟? 你當然會當一間一間去拍開,用鳥鼠一直點點點,揣著公司股票,共伊記--落來。仝款的動作做一百改。每擺你拍開一間公司的網頁,干焦欲挃一咧數字niâ-niâ。。不而過,你會看著圖啦,公司的 li-li-khok-khok 的資料,這攏毋是你想欲--ê。這時,咱愛共咱無愛 ê 物件鑢予清氣,賰咱欲愛ê物就好。
鑢網就是佇網頁中,共你欲挃的物件捎--出來的技術。鑢網是叫電腦共你鬥做,毋是你家己去鑢。
開始
咱是想欲使用 Python 語言來鑢,閣加上伊的一咧程式庫 BeautifulSoup (台羅發音: piú-tho-hu-sup)。- 若是 Mac/Linux 使用人,本底就有 Python, 先檢查伊的版本。開一咧 terminal,拍 python --version ,你會當看著伊的版本是 2.7
- 若是 Windows,參考Python 官網來安裝。
- 因為咱目標是佇 Python3 頂仔運行,嘛愛檢查有 Python3 無? 佇我的 Linux (Ubuntu 17.04),是 python3。
基礎
佇開始進前,咱先了解一寡 HTML (台羅:e-tshi-thi-emu-elo) ê 基礎和鑢網 ê 規則。HTML 標籤(piau-tshiam)
你若已經知影 HTML tag, 會共這段躘--過。簡單講,你佇遊覽器(英文: Browser,像 Google Chrome, Firefox, IE, Safari 等等) 看著 ê 網頁,毋是遊覽器實際看著 ê 網頁。遊覽器看著 ê 網頁。你會使想做是電影抑是電視ê 劇本: 觀眾看 ê 戲,是先有劇本予導演拍戲,伊會寫一寡台詞無 ê 物件,親像表情,場所來予演員搬戲。HTML 就是劇本,Tag (標籤) 就是共遊覽器講這咧所在个字是用啥物字體,大細,色緻,遊覽器照咧做出ê,就是你看著--ê。
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1> First Scraping </h1>
<p> Hello World </p>
<body>
</html
>
頂仔這段,就是上基礎 ê HTML 網頁。
1. <!DOCTYPE html>: HTML 定著愛用這款 ê 型態宣告 (Type Declaration).
2. 規个 HTML ê 文件,是予 <html> 和 </html>包--咧。
3. HTML 文件 ê meta (台羅: mé-thà) 佮戲文( script) 宣告是囥佇 <head>佮</head>方
4. HTML 文件看會著ê部分是囥佇 <body>佮 </body>籤中方。
5. 標題是囥佇uì <h1> 到<h1>標籤。
6. 段落是用 <p>標籤.
閣有一寡有路用的標籤,像 <a> 來表示超連結(hyperlinks),<table> 來標示表格,<tr> 來表示橫逝(Row),<td> 來表示直逝(Column)。
HTML 標籤不時有用著
id(ái-ti)
抑是class(ku-lé-sū)
ê 性質(attributes)。id 性質指定一咧唯一 ê 值(Value),這个值踮規个 HTML 文件裡愛是獨一無二。class 性質用來共一寡定定用的 HTML 標籤組合,合起來準做一咧 class,後擺若使用這咧 class,就是仝款 ê 效果。咱會當利用 id 和 class 來搜揣欲挃 ê 乜件。若欲了解較濟 HTML 標籤,id,和 class,會用(ē-i̋ng) 參考 W3Schools Tutorials
鑢網愛守 ê 規則
1 欲鑢進前,先檢查網站 ê 使用條文和條件 (Terms and Conditions)。特別愛注意和使用資料有關係ê法律條文。普通是袂用佇商業使用。
3 網頁 ê 佈置 (Layout) 定定變,有時你嘛愛用遊覽器去彼咧網站確認,修改你 ê code。
分析網頁
咱用 Bloomberg Quote 中(tiőng) ê 一頁來做例。
有一咧做股票ê人,想欲 uì 這咧網頁來掠出股票名抑是代碼(Index name),佮伊的價數。首先咱開一咧遊覽器(我ê是 Google Chrome),先共鳥鼠徙去股價頂仔,揤鳥鼠 ê 正鈕,揀 "檢查" :
咱就會當看著全頁變按呢:
咱會當看著股價是囥佇幾落棧 ê HTML 標籤tiőng,就是
<div class="basic-quote">
→ <div class="price-container up"
> → <div class="price"
>利用 HTML tag,這馬咱了解價數是囥佇這咧網頁 ê 佗位。
仝款 ê 道理,咱會當揣其他 ê 物件,親像 S&P 500 Index,恁會使家己試看mài。
行入 Code 裡
咱知影欲挃 ê 資料佇佗,會用咧開始寫咱的鑢網程式。這馬拍開你 ê 編輯器 (Editor)。咱先用 import 來引入欲使用著 ê 程式庫:
# import libraries import urllib2 from bs4 import BeautifulSoup
紲--落來,宣告一咧變數,囥網頁 ê URL(台羅: iú-a-e-lo),也就是咱連鞭欲去掠資料 ê 網頁:
# specify the url quote_page = 'http://www.bloomberg.com/quote/SPX:IND'
# query the website and return the html to the variable ‘page’ page = urllib2.urlopen(quote_page)
落尾,用 BeautifulSoup 來kā伊滾滾ê,做好啉 ê 湯,就是kā網頁成做 BeautifulSoup ê 樣(format):
# parse the html using beautiful soap and store in variable `soup` soup = BeautifulSoup(page, ‘html.parser’)
這馬,湯/soup內底就是規个 HTML ê 料,咱欲開始去kā股價撈--出來。
閣會記得彼 HTML 標籤有幾落棧--無? BeautifulSoup 有一咧 find() 來kā咱鬥相共。佇咱這咧例--裡,HTML class name 是唯一ê,先kā伊揣--出來:
# Take out theof name and get its value name_box = soup.find(‘h1’, attrs={‘class’: ‘name’})
揣著這咧標籤,咱會使用伊的 text 來提伊的資料:
name = name_box.text.strip() # strip() is used to remove starting and trailing print name
和頂仔相siâng,股價嘛掠會著:
# get the index price price_box = soup.find(‘div’, attrs={‘class’:’price’}) price = price_box.text print price
這馬你會使共頂--仔殕色裡的 code, 都囥入去編輯器內,存予好,嘛會使 uì 附件連結,彼是我試過會振動 ê 戲文。你搝--落來(Download)囥佇電腦,用 python web-scrape.py 來運行。
web-scrape.py
佇下一篇,我欲共這篇小khua改一咧,先欲共伊uì Python 2 改做 Python3。
沒有留言:
張貼留言