CodeGym /課程 /Python SELF TW /使用 requests_html 加載動態內容

使用 requests_html 加載動態內容

Python SELF TW
等級 33 , 課堂 4
開放

1. 動態內容和 JavaScript

如果你已經掌握了使用像 BeautifulSoup 和 requests 這樣的庫進行網頁爬取的基礎,那麼現在是時候進一步深入探索這項有趣的技能了。 今天,我們會聊聊如何處理僅在滾動頁面時才動態加載的內容。🤖 現在不僅你的瀏覽器可以欣賞無盡的滾動,你的腳本也可以做到!

網際網路充滿了動態加載的頁面,內容只有在與 JavaScript 互動後才會更新並顯示出來。這可以是爬取內容的恩賜,也可以是一種挑戰。 一方面,這些網站對於用戶來說更加互動友好;另一方面,requests 庫無法理解 JavaScript,因此爬取這些頁面變得更加棘手。

2. 庫 requests_html

幸運的是,我們有 requests_html,它結合了 requests 的強大功能以及基於 Pyppeteer 支持的類瀏覽器渲染。 這個庫允許加載和渲染具有動態內容的頁面,甚至還能執行 JavaScript 和模擬滾動。

安裝 requests_html

開始之前,需要先安裝這個庫。如果還沒安裝,可以使用以下命令進行安裝:

Bash
pip install requests-html

使用 requests_html

安裝完成後,我們來看看如何利用 requests_html 加載和處理動態內容。

範例:加載和渲染頁面

從簡單的範例開始:加載頁面、執行 JavaScript 並提取數據。我們假設我們需要訪問某個加載完成後才顯示的文本元素。

Python

from requests_html import HTMLSession

# 建立 session
session = HTMLSession()

# 加載頁面
response = session.get('https://example.com/dynamic-page')

# 執行 JavaScript 渲染頁面
response.html.render()

# 提取渲染後顯示的元素文本
content = response.html.find('#dynamic-content', first=True)
print(content.text)

在這個範例中,我們使用了 render() 方法,讓 requests_html 能夠執行頁面上的 JavaScript 並渲染出隱藏在標準請求之後的內容。

3. 自動滾動頁面

有時候,動態內容並不會一次性加載完成,而是需要用戶滾動頁面來觸發加載。requests_html 也可以模擬這種滾動行為。

範例:自動滾動

假設你有一個帶有無限滾動的新聞頁面,你想提取盡可能多的元素。以下是實現示例:

Python

from requests_html import HTMLSession

session = HTMLSession()
response = session.get('https://example.com/infinite-scroll')

# 渲染並滾動畫面
response.html.render(scrolldown=5, sleep=1)

# 提取所有新聞元素
news_items = response.html.find('.news-item')

for news_item in news_items:
    print(news_item.text)

在這裡,render() 方法使用了 scrolldownsleep 參數,分別表示滾動幾次以及每次滾動間隔的等待時間。

4. 實踐應用

為什麼要去研究自動滾動這些看似麻煩的事情呢?🤔

  • 市場調研: 很多公司使用這些頁面來展示連續的數據,這些數據對於分析趨勢和消費者行為非常有用。
  • 社交網絡監測: 很多社交平台使用無限滾動的形式,讓 requests_html 成為收集這些數據的利器。
  • 新聞與更新: 從新聞站點的無限滾動頁面提取標題和文章,幫助快速獲得最新的信息。

5. 常見錯誤及解決方案

使用動態頁面和 requests_html 時,可能會遇到一些錯誤。我們來看看常見問題:

渲染問題

有時候 render() 方法可能會失敗,特別是當頁面過大或過於複雜時。在這種情況下,可以嘗試增加渲染時長,或減少滾動次數。

Python
response.html.render(timeout=30)

腳本執行問題

某些情況下,頁面上的 JavaScript 可能會阻止腳本的執行,或者引發問題。可以試著使用 wait 參數來等待元素載入。

Python
response.html.render(wait=2)

屏幕分辨率與設備類型

某些網站可能依靠屏幕分辨率或設備類型來向用戶提供內容。檢查 user-agent 是否正確,並確保渲染行為與期待相符。

Python

response.session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

6. 更多學習資源

requests_html 是一個非常強大的工具。如果你希望充分利用其功能並避免常見問題,建議參考 官方文檔,它能幫助你更好地理解滾動操作及其在複雜頁面上的運行。

現在你已經了解了處理動態內容和無限滾動所需的所有知識,繼續探索並享受自動化的樂趣吧! 記得表明你的腳本是為了幫助人們自動化工作,而不是做壞事的哦!😇

1
問卷/小測驗
讀取動態內容,等級 33,課堂 4
未開放
讀取動態內容
讀取動態內容
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION