Mike的Python學院

網頁資料擷取與分析 Python、Selenium、網頁爬蟲、軟體程式設計、Beautifulsoup、Python、程式語言、程式撰寫

Mike Ku

Learn Code With Mike品牌創辦人

2021/10/17

Python網頁爬蟲動態翻頁的實作技巧

Q:Python網頁爬蟲動態翻頁是什麼?
在眾多的網頁中,當要載入的資料量非常龐大時,為了不影響執行效能的情況下,除了會使用滾動捲軸來動態載入更多的資料外,另一種最常見的方式就是利用分頁,來分別顯示特定筆數的資料。而Python網頁爬蟲遇到分頁的網站時,該如何翻頁爬取內容,就是本文要來分享的主題。
Q:頁碼使用GET的方式,Python網頁爬蟲如何動態翻頁?
大部分的網站分頁,都是使用GET方法來處理,從網址就可以知道目的地網址及傳至伺服器端的頁碼參數(page),當變換page參數的值時,就可以前往對應的頁碼網頁。
利用BeautifulSoup套件就可以使用Python迴圈,透過變換網址頁碼參數(page)的方式,翻頁爬取網頁內容了,如下範例:
for page in range(1, 4): # 執行1~3頁
response = requests.get("https://www.inside.com.tw/tag/AI?page=" + str(page))
soup = BeautifulSoup(response.text, "html.parser")
titles = soup.find_all("h3", {"class": "post_title"})
print(f"====================第{str(page)}頁====================")
for title in titles:
print(title.select_one("a").getText())
Q:頁碼使用POST的方式,Python網頁爬蟲如何動態翻頁?
另一個網站頁碼切換的方式會採用POST方法,就像信件一樣,知道寄送的地址(網址),卻不會知道信封中的內容(送往伺服器的頁碼參數)。
由於是使用POST方法來撈取網頁資料,所以當切換到第二頁時,會發現網址並不會像使用GET的頁碼一樣,會出現頁碼的參數,而是和第一頁的網址一模一樣,都沒有動靜。這時候,就需要結合Selenium套件,透過模擬使用者點擊下一頁按鈕,來進行換頁的動作。如下範例:
browser = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options)
area = browser.find_element_by_id("area-box-close")
area.click() # 取消「選擇縣市」的div視窗
for page in range(1, 3): # 執行1~2頁
soup = BeautifulSoup(browser.page_source, "html.parser")
# 取得所有class為pull-left infoContent的<li>標籤
elements = soup.find_all("li", {"class": "pull-left infoContent"})
print(f"==========第{str(page)}頁==========")
for element in elements:
# 取得<li>標籤下的<h3>標籤,再取得<h3>標籤下的<a>標籤文字,並且去掉空白
title = element.find("h3").find("a").getText().strip()
print(title)
page_next = browser.find_element_by_class_name("pageNext")
page_next.click() # 點擊下一頁按鈕
time.sleep(10) # 暫停10秒
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/06/how-to-scrape-different-pages-using-python-scraper.html )網站觀看更多精彩內容。
4 0 915 0