beautifulsoup可以快速解析HTML,讓使用者只需要輸入少許指令就能夠分析網頁資料。
請打開command,輸入以下指令
pip install beautifulsoup4
requests用來下載網頁上的資料。
請打開command,輸入以下指令
pip install requests
接下來我們找到了一個可以抓取景點的網頁(以台灣光觀局的網站為例):https://www.taiwan.net.tw/
這個網站一開始會找到地區->縣市->景點->詳細介紹頁,四層架構。今天範例先講到三層,明天再來講第四層跟其他應用。
在程式一開始需要import requests和BeautifulSoup來幫我們獲得及解析網頁
import requests
from bs4 import BeautifulSoup
requests.get用來取得url的html
BeautifulSoup用Html來剖析成object
response = requests.get("https://www.taiwan.net.tw/")
soup = BeautifulSoup(response.text, "html.parser")
print(soup.prettify())
我們使用prettify列印出來,此時可以看到抓取下來的HTML
<li class="auto-width hasNextFloor"><a href="m1.aspx?sNo=0001016" title="觀光景點" target="_self">觀光景點</a>
<ul class="submenu-level-2">
<li><a href="m1.aspx?sNo=0000501" title="北部地區" target="_self" class="megamenu-btn cut-north">北部地區</a></li>
<li><a href="m1.aspx?sNo=0000502" title="中部地區" target="_self" class="megamenu-btn cut-center">中部地區</a></li>
<li><a href="m1.aspx?sNo=0000503" title="南部地區" target="_self" class="megamenu-btn cut-south">南部地區</a></li>
<li><a href="m1.aspx?sNo=0000504" title="東部地區" target="_self" class="megamenu-btn cut-east">東部地區</a></li>
<li><a href="m1.aspx?sNo=0000505" title="離島地區" target="_self" class="megamenu-btn cut-island">離島地區</a></li>
</ul>
</li>
因為我們需要的景點資訊在以上的href裡面,此時我們可以使用find_all來抓取以上的url,為了確保式抓到上面幾個,可以加上class來確保,那相同的class是megamenu-btn。
viewpoints = soup.find_all("a", class_="megamenu-btn")
for viewpoint in viewpoints:
url = viewpoint.get("href")
此時的url是抓到北\中\南\東\離島地區的url,那接下來我們需要透過requests.get來抓取細部網頁
url_response = requests.get("https://www.taiwan.net.tw/"+url)
url_soup = BeautifulSoup(url_response.text, "html.parser")
地區網頁裡面又有分成各個縣市,所以我們需要再抓取一次連結。並抓取連結內的內容。
de_viewpoints=url_soup.find_all("a",class_="circularbtn")
for de_viewpoint in de_viewpoints:
那我們先把地區-縣市先print出來,在抓取各個縣市的景點
print(viewpoint.getText()+" - "+de_viewpoint.find("span",class_="circularbtn-title").getText())
de_url=de_viewpoint.get("href")
de_url_response = requests.get("https://www.taiwan.net.tw/"+de_url)
de_url_soup = BeautifulSoup(de_url_response.text, "html.parser")
titles = de_url_soup.find_all("div", class_="card-info")
for title in titles:
這邊就是縣市的各個景點,只需要將景點print出來使用.getText()來輸出tag的文字
print(" "+title.select_one("div", class_="card-title").getText())
hashtags = de_url_soup.find_all("div", class_="hashtag",limit=10)
因為一個景點有很多標籤,所以用for來把所有標籤列印
for hashtag in hashtags:
print(" -"+hashtag.select_one("a").getText())
以下是最後執行結果輸出(擷取部分)
離島地區 - 連江縣(馬祖)
芹壁村
-#網美必拍
-#無障礙
-#古蹟巡禮
-#無障礙
-#無障礙
-#無障礙
-#戰地文化
-#生態體驗
-#博物館
-#無障礙
八八坑道
-#網美必拍
-#無障礙
-#古蹟巡禮
-#無障礙
-#無障礙
-#無障礙
-#戰地文化
-#生態體驗
-#博物館
-#無障礙
是不是覺得爬蟲很簡單,只需要一杯咖啡的時間就會了。