亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 後端開發(fā) Python教學(xué) 使用'加載更多”按鈕抓取無限滾動頁面:逐步指南

使用'加載更多”按鈕抓取無限滾動頁面:逐步指南

Jan 13, 2025 pm 06:09 PM

嘗試從動態(tài)網(wǎng)頁載入資料時,您的抓取工具是否卡住了?您是否對無限滾動或那些討厭的“加載更多”按鈕感到沮喪?

你並不孤單。如今,許多網(wǎng)站都實施這些設(shè)計來改善使用者體驗,但它們對於網(wǎng)頁抓取工具來說可能具有挑戰(zhàn)性。

本教學(xué)將引導(dǎo)您完成適合初學(xué)者的演練,使用 載入更多 按鈕抓取示範(fàn)頁面。目標(biāo)網(wǎng)頁如下圖所示:

Demo web page for scraping

最後,您將學(xué)習(xí)如何:

  • 設(shè)定 Selenium 進行網(wǎng)頁抓取。
  • 自動化「載入更多」按鈕互動。
  • 提取產(chǎn)品數(shù)據(jù),例如名稱、價格和連結(jié)。

讓我們開始吧!

第 1 步:先決條件

開始之前,請確保滿足以下先決條件:

  • 已安裝 Python:從 python.org 下載並安裝最新的 Python 版本,包括安裝過程中的 pip。
  • 基礎(chǔ):熟悉網(wǎng)頁抓取概念、Python 程式設(shè)計以及使用 requests、BeautifulSoup 和 Selenium 等函式庫。

所需的圖書館:

  • 請求:用於傳送 HTTP 請求。
  • BeautifulSoup:用於解析 HTML 內(nèi)容。
  • Selenium:用於模擬使用者交互,例如瀏覽器中的按鈕點擊。

您可以在終端機中使用以下命令安裝這些庫:

pip install requests beautifulsoup4 selenium

在使用 Selenium 之前,您必須安裝與您的瀏覽器相符的網(wǎng)路驅(qū)動程式。在本教學(xué)中,我們將使用 Google Chrome 和 ChromeDriver。不過,您可以對 Firefox 或 Edge 等其他瀏覽器執(zhí)行類似的步驟。

安裝網(wǎng)路驅(qū)動程式

  1. 檢查您的瀏覽器版本
  2. 開啟 Google Chrome 並導(dǎo)覽至 幫助 >關(guān)於 Google Chrome 從三點選單中尋找 Chrome 版本。

  3. 下載 ChromeDriver:

  4. 造訪 ChromeDriver 下載頁面。

  5. 下載與您的 Chrome 版本相符的驅(qū)動程式版本。

  6. 將 ChromeDriver 新增至您的系統(tǒng)路徑:
    解壓縮下載的檔案並將其放置在 /usr/local/bin (Mac/Linux) 或 C:WindowsSystem32 (Windows) 等目錄中。

驗證安裝

在專案目錄中初始化一個 Python 檔案 scraper.py 並透過執(zhí)行以下程式碼片段來測試一切設(shè)定是否正確:

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

您可以透過在終端機上執(zhí)行以下命令來執(zhí)行上述檔案程式碼:

pip install requests beautifulsoup4 selenium

如果上面的程式碼運行沒有錯誤,它將啟動瀏覽器介面並打開演示頁面 URL,如下所示:

Demo Page in Selenium Browser Instance

Selenium 隨後將提取 HTML 並列印頁面標(biāo)題。你會看到這樣的輸出 -

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

這將驗證 Selenium 是否可以使用。安裝所有要求並準(zhǔn)備使用後,您可以開始存取演示頁面的內(nèi)容。

第 2 步:存取內(nèi)容

第一步是取得頁面的初始內(nèi)容,這將為您提供頁面 HTML 的基線快照。這將幫助您驗證連線並確保抓取過程的有效起點。

您將透過使用 Python 中的 Requests 庫發(fā)送 GET 請求來檢索頁面 URL 的 HTML 內(nèi)容。程式碼如下:

python scraper.py

上面的程式碼將輸出包含前 12 個產(chǎn)品資料的原始 HTML。

HTML 的快速預(yù)覽可確保請求成功並且您正在使用有效的資料。

第 3 步:載入更多產(chǎn)品

要存取剩餘的產(chǎn)品,您需要以程式設(shè)計方式點擊頁面上的「載入更多」按鈕,直到?jīng)]有更多產(chǎn)品可用。由於此交互涉及 JavaScript,因此您將使用 Selenium 來模擬按鈕單擊。

在編寫程式碼之前,我們先檢查一下頁面以定位:

  • 「載入更多」 按鈕選擇器 (load-more-btn)。
  • 儲存產(chǎn)品詳細資料的 div (product-item)。

您將透過載入更多產(chǎn)品來獲得所有產(chǎn)品,透過執(zhí)行以下程式碼為您提供更大的資料集:

Load More Button Challenge to Learn Web Scraping - ScrapingCourse.com

此程式碼開啟瀏覽器,導(dǎo)航至頁面,並與「載入更多」按鈕互動。然後提取更新後的 HTML(現(xiàn)在包含更多產(chǎn)品資料)。

如果你不希望Selenium每次執(zhí)行這段程式碼時都打開瀏覽器,它還提供了無頭瀏覽器功能。無頭瀏覽器具有實際 Web 瀏覽器的所有功能,但沒有圖形使用者介面 (GUI)。

您可以透過定義 ChromeOptions 物件並將其傳遞給 WebDriver Chrome 建構(gòu)函數(shù),在 Selenium 中啟用 Chrome 的無頭模式,如下所示:

import requests
# URL of the demo page with products
url = "https://www.scrapingcourse.com/button-click"
# Send a GET request to the URL
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
    html_content = response.text
    print(html_content) # Optional: Preview the HTML
else:
    print(f"Failed to retrieve content: {response.status_code}")

當(dāng)您執(zhí)行上述程式碼時,Selenium 將啟動一個無頭 Chrome 實例,因此您將不再看到 Chrome 視窗。這對於在伺服器上執(zhí)行抓取腳本時不想在 GUI 上浪費資源的生產(chǎn)環(huán)境來說是理想的選擇。

現(xiàn)在已檢索到完整的 HTML 內(nèi)容,是時候提取有關(guān)每個產(chǎn)品的具體詳細資訊了。

第四步:解析產(chǎn)品訊息

在此步驟中,您將使用 BeautifulSoup 解析 HTML 並識別產(chǎn)品元素。然後,您將提取每個產(chǎn)品的關(guān)鍵詳細信息,例如名稱、價格和連結(jié)。

pip install requests beautifulsoup4 selenium

在輸出中,您應(yīng)該看到產(chǎn)品詳細資訊的結(jié)構(gòu)化列表,包括名稱、圖像 URL、價格和產(chǎn)品頁面鏈接,如下所示 -

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

上面的程式碼將原始 HTML 資料組織成結(jié)構(gòu)化格式,使其更容易使用和準(zhǔn)備輸出資料以進行進一步處理。

第 5 步:將產(chǎn)品資訊匯出到 CSV

您現(xiàn)在可以將提取的資料組織到 CSV 檔案中,這使得分析或共用變得更加容易。 Python 的 CSV 模組對此有所幫助。

python scraper.py

上述程式碼將建立一個新的 CSV 文件,其中包含所有必需的產(chǎn)品詳細資訊。

以下是概述的完整程式碼:

Load More Button Challenge to Learn Web Scraping - ScrapingCourse.com

上面的程式碼將建立一個 products.csv,如下所示:

import requests
# URL of the demo page with products
url = "https://www.scrapingcourse.com/button-click"
# Send a GET request to the URL
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
    html_content = response.text
    print(html_content) # Optional: Preview the HTML
else:
    print(f"Failed to retrieve content: {response.status_code}")

第 6 步:取得熱門產(chǎn)品的額外數(shù)據(jù)

現(xiàn)在,假設(shè)您想要識別價格最高的前 5 個產(chǎn)品,並從其各個頁面中提取其他資料(例如產(chǎn)品描述和 SKU 程式碼)。您可以使用以下程式碼來做到這一點:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# Set up the WebDriver (make sure you have the appropriate driver installed, e.g., ChromeDriver)
driver = webdriver.Chrome()
# Open the page
driver.get("https://www.scrapingcourse.com/button-click")
# Loop to click the "Load More" button until there are no more products
while True:
    try:
        # Find the "Load more" button by its ID and click it
        load_more_button = driver.find_element(By.ID, "load-more-btn")
        load_more_button.click()
        # Wait for the content to load (adjust time as necessary)
        time.sleep(2)
    except Exception as e:
        # If no "Load More" button is found (end of products), break out of the loop
        print("No more products to load.")
        break
# Get the updated page content after all products are loaded
html_content = driver.page_source
# Close the browser window
driver.quit()

以下是概述的完整程式碼:

from selenium import webdriver
from selenium.webdriver.common.by import By

import time

# instantiate a Chrome options object
options = webdriver.ChromeOptions()

# set the options to use Chrome in headless mode
options.add_argument("--headless=new")

# initialize an instance of the Chrome driver (browser) in headless mode
driver = webdriver.Chrome(options=options)

...

此程式碼依價格降序?qū)Ξa(chǎn)品進行排序。然後,對於價格最高的前 5 個產(chǎn)品,腳本打開其產(chǎn)品頁面並使用 BeautifulSoup 提取產(chǎn)品描述和 SKU。

上面程式碼的輸出會是這樣的:

from bs4 import BeautifulSoup
# Parse the page content with BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Extract product details
products = []
# Find all product items in the grid
product_items = soup.find_all('div', class_='product-item')
for product in product_items:
    # Extract the product name
    name = product.find('span', class_='product-name').get_text(strip=True)

    # Extract the product price
    price = product.find('span', class_='product-price').get_text(strip=True)

    # Extract the product link
    link = product.find('a')['href']

    # Extract the image URL
    image_url = product.find('img')['src']

    # Create a dictionary with the product details
    products.append({
        'name': name,
        'price': price,
        'link': link,
        'image_url': image_url
})
# Print the extracted product details
for product in products[:2]:
    print(f"Name: {product['name']}")
    print(f"Price: {product['price']}")
    print(f"Link: {product['link']}")
    print(f"Image URL: {product['image_url']}")
    print('-' * 30)

上面的程式碼將更新 products.csv,它現(xiàn)在將具有以下資訊:

Name: Chaz Kangeroo Hoodie
Price: 
Link: https://scrapingcourse.com/ecommerce/product/chaz-kangeroo-hoodie
Image URL: https://scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/mh01-gray_main.jpg
------------------------------
Name: Teton Pullover Hoodie
Price: 
Link: https://scrapingcourse.com/ecommerce/product/teton-pullover-hoodie
Image URL: https://scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/mh02-black_main.jpg
------------------------------
…

結(jié)論

使用無限滾動或「加載更多」按鈕抓取頁面似乎具有挑戰(zhàn)性,但使用 Requests、Selenium 和 BeautifulSoup 等工具可以簡化該過程。

本教學(xué)展示如何從示範(fàn)頁面檢索和處理產(chǎn)品數(shù)據(jù),並將其儲存為結(jié)構(gòu)化格式以便快速輕鬆地存取。

在此處查看所有程式碼片段。

以上是使用'加載更多”按鈕抓取無限滾動頁面:逐步指南的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍?,指“一種接口,多種實現(xiàn)”,允許統(tǒng)一處理不同類型的對象。 1.多態(tài)通過方法重寫實現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實現(xiàn)。 2.多態(tài)的實際用途包括簡化代碼結(jié)構(gòu)、增強可擴展性,例如圖形繪製程序中統(tǒng)一調(diào)用draw()方法,或遊戲開發(fā)中處理不同角色的共同行為。 3.Python實現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫該方法,但不要求繼承同一父類,只要對象實現(xiàn)相同方法即可,這稱為“鴨子類型”。 4.注意事項包括保持方

解釋Python發(fā)電機和迭代器。 解釋Python發(fā)電機和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是實現(xiàn)__iter__()和__next__()方法的對象,生成器是簡化版的迭代器,通過yield關(guān)鍵字自動實現(xiàn)這些方法。 1.迭代器每次調(diào)用next()返回一個元素,無更多元素時拋出StopIteration異常。 2.生成器通過函數(shù)定義,使用yield按需生成數(shù)據(jù),節(jié)省內(nèi)存且支持無限序列。 3.處理已有集合時用迭代器,動態(tài)生成大數(shù)據(jù)或需惰性求值時用生成器,如讀取大文件時逐行加載。注意:列表等可迭代對像不是迭代器,迭代器到盡頭後需重新創(chuàng)建,生成器只能遍歷一次。

如何處理Python中的API身份驗證 如何處理Python中的API身份驗證 Jul 13, 2025 am 02:22 AM

處理API認證的關(guān)鍵在於理解並正確使用認證方式。 1.APIKey是最簡單的認證方式,通常放在請求頭或URL參數(shù)中;2.BasicAuth使用用戶名和密碼進行Base64編碼傳輸,適合內(nèi)部系統(tǒng);3.OAuth2需先通過client_id和client_secret獲取Token,再在請求頭中帶上BearerToken;4.為應(yīng)對Token過期,可封裝Token管理類自動刷新Token;總之,根據(jù)文檔選擇合適方式,並安全存儲密鑰信息是關(guān)鍵。

解釋Python斷言。 解釋Python斷言。 Jul 07, 2025 am 12:14 AM

Assert是Python用於調(diào)試的斷言工具,當(dāng)條件不滿足時拋出AssertionError。其語法為assert條件加可選錯誤信息,適用於內(nèi)部邏輯驗證如參數(shù)檢查、狀態(tài)確認等,但不能用於安全或用戶輸入檢查,且應(yīng)配合清晰提示信息使用,僅限開發(fā)階段輔助調(diào)試而非替代異常處理。

什麼是Python型提示? 什麼是Python型提示? Jul 07, 2025 am 02:55 AM

typeHintsInpyThonsolverbromblemboyofambiguityandPotentialBugSindyNamalytyCodeByallowingDevelopsosteSpecefectifyExpectedTypes.theyenhancereadability,enablellybugdetection,andimprovetool.typehintsupport.typehintsareadsareadsareadsareadsareadsareadsareadsareadsareaddedusidocolon(

如何一次迭代兩個列表 如何一次迭代兩個列表 Jul 09, 2025 am 01:13 AM

在Python中同時遍歷兩個列表的常用方法是使用zip()函數(shù),它會按順序配對多個列表並以最短為準(zhǔn);若列表長度不一致,可使用itertools.zip_longest()以最長為準(zhǔn)並填充缺失值;結(jié)合enumerate()可同時獲取索引。 1.zip()簡潔實用,適合成對數(shù)據(jù)迭代;2.zip_longest()處理不一致長度時可填充默認值;3.enumerate(zip())可在遍歷時獲取索引,滿足多種複雜場景需求。

什麼是Python迭代器? 什麼是Python迭代器? Jul 08, 2025 am 02:56 AM

Inpython,IteratorSareObjectSthallowloopingThroughCollectionsByImplementing_iter __()和__next __()。 1)iteratorsWiaTheIteratorProtocol,使用__ITER __()toreTurnterateratoratoranteratoratoranteratoratorAnterAnteratoratorant antheittheext__()

Python Fastapi教程 Python Fastapi教程 Jul 12, 2025 am 02:42 AM

要使用Python創(chuàng)建現(xiàn)代高效的API,推薦使用FastAPI;其基於標(biāo)準(zhǔn)Python類型提示,可自動生成文檔,性能優(yōu)越。安裝FastAPI和ASGI服務(wù)器uvicorn後,即可編寫接口代碼。通過定義路由、編寫處理函數(shù)並返回數(shù)據(jù),可以快速構(gòu)建API。 FastAPI支持多種HTTP方法,並提供自動生成的SwaggerUI和ReDoc文檔系統(tǒng)。 URL參數(shù)可通過路徑定義捕獲,查詢參數(shù)則通過函數(shù)參數(shù)設(shè)置默認值實現(xiàn)。合理使用Pydantic模型有助於提升開發(fā)效率和準(zhǔn)確性。

See all articles