104學習

Mike Ku

Learn Code With Mike品牌創辦人

2021/10/14

Python使用BS4開發網頁爬蟲的技巧(上)

Q: Python使用BeautifulSoup開發網頁爬蟲有哪些資料定位方法呢?
BeautifulSoup是一個用來解析HTML結構的Python套件(Package),將取回的網頁HTML結構,透過其提供的方法(Method),能夠輕鬆的搜尋及擷取網頁上所需的資料,因此廣泛的應用在網頁爬蟲的開發上。
在開發過程中的常用方法,包含:以HTML標籤及屬性搜尋節點、以CSS屬性搜尋節點、搜尋父節點、搜尋前後節點、取得屬性值及取得連結文字,其中將分為上下兩篇來和大家分享使用的方式。
Q:要怎麼開始使用BeautifulSoup套件?
Beautifulsoup套件(Package)可以透過pip指令來進行安裝,如下範例:
pip install beautifulsoup4
除此之外,要解析網頁的HTML程式碼前,還需要安裝Python的requests套件(Package),將要爬取的網頁HTML程式碼取回來,安裝方式如下:
pip install requests
Q:如何利用HTML標籤及屬性搜尋節點?
BeautifulSoup套件提供了以下幾個方法:
find() - 只搜尋第一個符合條件的HTML節點,傳入要搜尋的標籤名稱,如下範例:
result = soup.find("h3")
find_all() - 搜尋網頁中所有符合條件的HTML節點,傳入要搜尋的HTML標籤名稱。如果要更明確的搜尋,可以利用關鍵字參數(Keyword Argument)指定其屬性值。由於執行結果可能會搜出許多的HTML內容,所以最後也可以利用limit關鍵字參數(Keyword Argument)限制搜尋的節點數量,如下範例:
result = soup.find_all("h3", itemprop="headline", limit=3)
select_one() - 當某一節點下只有單個子節點時,可以利用BeautifulSoup套件(Package)的select_one()方法(Method),選取子節點,如下範例:
result = soup.find("h3", itemprop="headline").select_one("a")
select() - 而如果某一節點下有多個子節點時,則使用select()方法(Method),選取子節點,如下範例:
result = soup.find("div", itemprop="itemListElement").select("a")
Q:如何利用CSS屬性搜尋節點?
要依據HTML的css屬性來進行節點的搜尋,需使用 class_ 關鍵字參數(Keyword Argument)來進行css屬性值的指定,同樣提供了以下的搜尋方式:
find() - 搜尋第一個符合指定的HTML標籤及css屬性值的節點,如下範例:
titles = soup.find("p", class_="summary")
find_all() - 搜尋網頁中符合指定的HTML標籤及css屬性值的所有節點,如下範例:
titles = soup.find_all("p", class_="summary", limit=3)
select() - 而如果單純只想要透過css屬性值來進行HTML節點的搜尋,則可以使用BeautifulSoup套件(Package)的select()方法(Method),如下範例:
titles = soup.select(".summary", limit=3)
Q:如何搜尋父節點?
以上皆為向下的搜尋節點方式,如果想要從某一個節點向上搜尋,則可以使用BeautifulSoup套件(Package)的find_parent()或find_parents()方法(Method),如下範例:
result = soup.find("a", itemprop="url").find_parents("h3")
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/02/python-beautifulsoup-web-scraper.html )網站觀看更多精彩內容。
1 0 171 1