斷斷續續地在網路和書籍上學習有關 Python 的爬蟲技術,但隨著反爬蟲的技術也是越來越精進,所以想說藉由 「超新手也能用 Python 爬蟲打造貨比千家的比價網站」這門課來看看能否解決相關的疑惑。這篇主要是記錄如何「利用 BeautifulSoup 來解析網頁原始碼」。
課程相關資訊
[連結]:https://hiskio.com/courses/527/lectures/26085
本篇範圍:Chapter 2 ( 開啟第一個網頁爬蟲 – 自動化收集商品資料 )
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
筆記
1. 攔截回的回應,僅是網頁的原始碼。BeautifulSoup 是將原始碼解讀成樹狀結構,方便後續取用的工具。若你有曾經使用過 jQuery 的話,那上手的難度應該不高
2. 在 python 中載入,一般而言僅需要用 from bs4 import BeautifulSoup 即可。這代表的是僅需要使用 BeautifulSoup 中的 bs4 函式,是一種按需載入的寫法
3. 解析出了樹狀結構,可以用
- <解析出的樹狀結構位置>.name:該項目的標籤名稱
- <解析出的樹狀結構位置>[”]:該項目的屬性,如 class, id…等
- <解析出的樹狀結構位置>.text:該項目的文字
4. 用 find, find_all 可以找到部分、全部的同類標籤;搭配上 class, id 等條件可以縮小範圍
5. class 在 python 是保留字,所以要使用 class_
6. 實務上,你可以搭配瀏覽器的工具 ( 如 Google Chrome 的 Elements 中的點選指標,你可以快速跳到畫面上的圖示於瀏覽器的所在位置 ),接著來思考一下如何透過相關的 HTML 屬性和標籤來達成定位效果
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import requests from bs4 import BeautifulSoup rawRes = requests.get('https://sample.v123582.repl.co') resText = rawRes.text soup = BeautifulSoup(resText,'html.parser') print('=== Original HTML ===') print(soup.html) print('=== Title ===') print(soup.title) print(soup.title.name) print(soup.title.text) print('=== Paragraph ===') print('First p tag') print(soup.p) print('Second p tag') print(soup.find_all('p')[1]) print('all link tags with class link') print(soup.find_all('a', class_='link')) |