斷斷續續地在網路和書籍上學習有關 Python 的爬蟲技術,但隨著反爬蟲的技術也是越來越精進,所以想說藉由 「超新手也能用 Python 爬蟲打造貨比千家的比價網站」這門課來看看能否解決相關的疑惑。這篇主要是記錄如何「在靜態網站中獲取資訊」。
課程相關資訊
[連結]:https://hiskio.com/courses/527/lectures/26085
本篇範圍:Chapter 2 ( 開啟第一個網頁爬蟲 – 自動化收集商品資料 )
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
筆記
1. 先挑選你的目標頁面和你要爬取的東西
2. 利用開發者工具,來快速鎖定目標
3. 由於程式碼的 class, id 名稱中,有可能會包含亂數生成的字眼。這些字眼有機會會隨著時間、版本更新而變動,造成你的爬蟲無法穩定有效:可以使用如同 css 選取器的規則 h1[class*=’config__title__’] 的形式。左邊例子意思為:抓取 h1 標籤,其中包含 config__title__ 字樣、或是使用 regex 的方法
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 解決當解析網址列時的語言編碼問題,讓 python 可讀取 utf-8 import sys import codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach()) import requests from bs4 import BeautifulSoup rawRes = requests.get('https://tw.buy.yahoo.com/gdsale/Apple-iPhone-12-mini-256G-5-4%E5%90%8B-%E7%B4%AB%E8%89%B2-%E6%99%BA%E6%85%A7%E5%9E%8B%E6%89%8B%E6%A9%9F-9486262.html') resText = rawRes.text soup = BeautifulSoup(resText,'html.parser') merchantTitle = soup.select('h1[class*="HeroInfo__title___"]')[0].text merchantPriceRaw = soup.find('div',class_='HeroInfo__mainPrice___1xP9H').text merchantPrice = float(merchantPriceRaw[1:].replace(',','')) print(merchantTitle) // 原始值 print(merchantPriceRaw) // 字串長度篩選 print(merchantPriceRaw[1:]) // 最終資料 print(merchantPrice) |