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

首頁(yè) 后端開發(fā) Python教程 使用'加載更多”按鈕抓取無限滾動(dòng)頁(yè)面:分步指南

使用'加載更多”按鈕抓取無限滾動(dòng)頁(yè)面:分步指南

Jan 13, 2025 pm 06:09 PM

嘗試從動(dòng)態(tài)網(wǎng)頁(yè)加載數(shù)據(jù)時(shí),您的抓取工具是否卡住了?您是否對(duì)無限滾動(dòng)或那些討厭的“加載更多”按鈕感到沮喪?

你并不孤單。如今,許多網(wǎng)站都實(shí)施這些設(shè)計(jì)來改善用戶體驗(yàn),但它們對(duì)于網(wǎng)絡(luò)抓取工具來說可能具有挑戰(zhàn)性。

本教程將指導(dǎo)您完成適合初學(xué)者的演練,使用 加載更多 按鈕抓取演示頁(yè)面。目標(biāo)網(wǎng)頁(yè)如下所示:

Demo web page for scraping

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

  • 設(shè)置 Selenium 進(jìn)行網(wǎng)頁(yè)抓取。
  • 自動(dòng)化“加載更多”按鈕交互。
  • 提取產(chǎn)品數(shù)據(jù),例如名稱、價(jià)格和鏈接。

讓我們開始吧!

第 1 步:先決條件

開始之前,請(qǐng)確保滿足以下先決條件:

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

所需的圖書館:

  • 請(qǐng)求:用于發(fā)送 HTTP 請(qǐng)求。
  • BeautifulSoup:用于解析 HTML 內(nèi)容。
  • Selenium:用于模擬用戶交互,例如瀏覽器中的按鈕單擊。

您可以在終端中使用以下命令安裝這些庫(kù):

pip install requests beautifulsoup4 selenium

在使用 Selenium 之前,您必須安裝與您的瀏覽器匹配的網(wǎng)絡(luò)驅(qū)動(dòng)程序。在本教程中,我們將使用 Google Chrome 和 ChromeDriver。不過,您可以對(duì) Firefox 或 Edge 等其他瀏覽器執(zhí)行類似的步驟。

安裝網(wǎng)絡(luò)驅(qū)動(dòng)程序

  1. 檢查您的瀏覽器版本
  2. 打開 Google Chrome 并導(dǎo)航至 幫助 >關(guān)于 Google Chrome 從三點(diǎn)菜單中查找 Chrome 版本。

  3. 下載 ChromeDriver:

  4. 訪問 ChromeDriver 下載頁(yè)面。

  5. 下載與您的 Chrome 版本匹配的驅(qū)動(dòng)程序版本。

  6. 將 ChromeDriver 添加到您的系統(tǒng)路徑:
    解壓下載的文件并將其放置在 /usr/local/bin (Mac/Linux) 或 C:WindowsSystem32 (Windows) 等目錄中。

驗(yàn)證安裝

在項(xiàng)目目錄中初始化一個(gè) Python 文件 scraper.py 并通過運(yùn)行以下代碼片段測(cè)試一切設(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()

您可以通過在終端上運(yùn)行以下命令來執(zhí)行上述文件代碼:

pip install requests beautifulsoup4 selenium

如果上面的代碼運(yùn)行沒有錯(cuò)誤,它將啟動(dòng)瀏覽器界面并打開演示頁(yè)面 URL,如下所示:

Demo Page in Selenium Browser Instance

Selenium 隨后將提取 HTML 并打印頁(yè)面標(biāo)題。你會(huì)看到這樣的輸出 -

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()

這將驗(yàn)證 Selenium 是否可以使用。安裝所有要求并準(zhǔn)備使用后,您可以開始訪問演示頁(yè)面的內(nèi)容。

第 2 步:訪問內(nèi)容

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

您將通過使用 Python 中的 Requests 庫(kù)發(fā)送 GET 請(qǐng)求來檢索頁(yè)面 URL 的 HTML 內(nèi)容。代碼如下:

python scraper.py

上面的代碼將輸出包含前 12 個(gè)產(chǎn)品數(shù)據(jù)的原始 HTML。

HTML 的快速預(yù)覽可確保請(qǐng)求成功并且您正在使用有效的數(shù)據(jù)。

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

要訪問剩余的產(chǎn)品,您需要以編程方式單擊頁(yè)面上的“加載更多”按鈕,直到?jīng)]有更多產(chǎn)品可用。由于此交互涉及 JavaScript,因此您將使用 Selenium 來模擬按鈕單擊。

在編寫代碼之前,我們先檢查一下頁(yè)面以定位:

  • “加載更多” 按鈕選擇器 (load-more-btn)。
  • 保存產(chǎn)品詳細(xì)信息的 div (product-item)。

您將通過加載更多產(chǎn)品來獲得所有產(chǎn)品,通過運(yùn)行以下代碼為您提供更大的數(shù)據(jù)集:

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

此代碼打開瀏覽器,導(dǎo)航到頁(yè)面,并與“加載更多”按鈕交互。然后提取更新后的 HTML(現(xiàn)在包含更多產(chǎn)品數(shù)據(jù))。

如果你不希望Selenium每次運(yùn)行這段代碼時(shí)都打開瀏覽器,它還提供了無頭瀏覽器功能。無頭瀏覽器具有實(shí)際 Web 瀏覽器的所有功能,但沒有圖形用戶界面 (GUI)。

您可以通過定義 ChromeOptions 對(duì)象并將其傳遞給 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)您運(yùn)行上述代碼時(shí),Selenium 將啟動(dòng)一個(gè)無頭 Chrome 實(shí)例,因此您將不再看到 Chrome 窗口。這對(duì)于在服務(wù)器上運(yùn)行抓取腳本時(shí)不想在 GUI 上浪費(fèi)資源的生產(chǎn)環(huán)境來說是理想的選擇。

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

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

在此步驟中,您將使用 BeautifulSoup 解析 HTML 并識(shí)別產(chǎn)品元素。然后,您將提取每個(gè)產(chǎn)品的關(guān)鍵詳細(xì)信息,例如名稱、價(jià)格和鏈接。

pip install requests beautifulsoup4 selenium

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

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 數(shù)據(jù)組織成結(jié)構(gòu)化格式,使其更容易使用和準(zhǔn)備輸出數(shù)據(jù)以進(jìn)行進(jìn)一步處理。

第 5 步:將產(chǎn)品信息導(dǎo)出到 CSV

您現(xiàn)在可以將提取的數(shù)據(jù)組織到 CSV 文件中,這使得分析或共享變得更加容易。 Python 的 CSV 模塊對(duì)此有所幫助。

python scraper.py

上述代碼將創(chuàng)建一個(gè)新的 CSV 文件,其中包含所有必需的產(chǎn)品詳細(xì)信息。

以下是概述的完整代碼:

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

上面的代碼將創(chuàng)建一個(gè) 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è)您想要識(shí)別價(jià)格最高的前 5 個(gè)產(chǎn)品,并從其各個(gè)頁(yè)面中提取其他數(shù)據(jù)(例如產(chǎn)品描述和 SKU 代碼)。您可以使用以下代碼來做到這一點(diǎn):

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)

...

此代碼按價(jià)格降序?qū)Ξa(chǎn)品進(jìn)行排序。然后,對(duì)于價(jià)格最高的前 5 個(gè)產(chǎn)品,腳本打開其產(chǎn)品頁(yè)面并使用 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é)論

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

本教程展示了如何從演示頁(yè)面檢索和處理產(chǎn)品數(shù)據(jù),并將其保存為結(jié)構(gòu)化格式以便快速輕松地訪問。

在此處查看所有代碼片段。

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

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

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

Python函數(shù)參數(shù)和參數(shù) Python函數(shù)參數(shù)和參數(shù) Jul 04, 2025 am 03:26 AM

參數(shù)(parameters)是定義函數(shù)時(shí)的占位符,而傳參(arguments)是調(diào)用時(shí)傳入的具體值。1.位置參數(shù)需按順序傳遞,順序錯(cuò)誤會(huì)導(dǎo)致結(jié)果錯(cuò)誤;2.關(guān)鍵字參數(shù)通過參數(shù)名指定,可改變順序且提高可讀性;3.默認(rèn)參數(shù)值在定義時(shí)賦值,避免重復(fù)代碼,但應(yīng)避免使用可變對(duì)象作為默認(rèn)值;4.args和*kwargs可處理不定數(shù)量的參數(shù),適用于通用接口或裝飾器,但應(yīng)謹(jǐn)慎使用以保持可讀性。

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

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

python`@classmethod'裝飾師解釋了 python`@classmethod'裝飾師解釋了 Jul 04, 2025 am 03:26 AM

類方法是Python中通過@classmethod裝飾器定義的方法,其第一個(gè)參數(shù)為類本身(cls),用于訪問或修改類狀態(tài)。它可通過類或?qū)嵗{(diào)用,影響的是整個(gè)類而非特定實(shí)例;例如在Person類中,show_count()方法統(tǒng)計(jì)創(chuàng)建的對(duì)象數(shù)量;定義類方法時(shí)需使用@classmethod裝飾器并將首參命名為cls,如change_var(new_value)方法可修改類變量;類方法與實(shí)例方法(self參數(shù))、靜態(tài)方法(無自動(dòng)參數(shù))不同,適用于工廠方法、替代構(gòu)造函數(shù)及管理類變量等場(chǎng)景;常見用途包括從

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

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

什么是python魔法方法或dunder方法? 什么是python魔法方法或dunder方法? Jul 04, 2025 am 03:20 AM

Python的magicmethods(或稱dunder方法)是用于定義對(duì)象行為的特殊方法,它們以雙下劃線開頭和結(jié)尾。1.它們使對(duì)象能夠響應(yīng)內(nèi)置操作,如加法、比較、字符串表示等;2.常見用例包括對(duì)象初始化與表示(__init__、__repr__、__str__)、算術(shù)運(yùn)算(__add__、__sub__、__mul__)及比較運(yùn)算(__eq__、__lt__);3.使用時(shí)應(yīng)確保其行為符合預(yù)期,例如__repr__應(yīng)返回可重構(gòu)對(duì)象的表達(dá)式,算術(shù)方法應(yīng)返回新實(shí)例;4.應(yīng)避免過度使用或以令人困惑的方

Python內(nèi)存管理如何工作? Python內(nèi)存管理如何工作? Jul 04, 2025 am 03:26 AM

Pythonmanagesmemoryautomaticallyusingreferencecountingandagarbagecollector.Referencecountingtrackshowmanyvariablesrefertoanobject,andwhenthecountreacheszero,thememoryisfreed.However,itcannothandlecircularreferences,wheretwoobjectsrefertoeachotherbuta

python`@property`裝飾師 python`@property`裝飾師 Jul 04, 2025 am 03:28 AM

@property是Python中用于將方法偽裝成屬性的裝飾器,允許在訪問屬性時(shí)執(zhí)行邏輯判斷或動(dòng)態(tài)計(jì)算值。1.它通過@property裝飾器定義getter方法,使外部像訪問屬性一樣調(diào)用方法;2.搭配.setter可控制賦值行為,如校驗(yàn)值合法性,不定義.setter則為只讀屬性;3.適用于屬性賦值校驗(yàn)、動(dòng)態(tài)生成屬性值、隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié)等場(chǎng)景;4.使用時(shí)注意屬性名與私有變量名不同名,避免死循環(huán),適合輕量級(jí)操作;5.示例中Circle類限制radius非負(fù),Person類動(dòng)態(tài)生成full_name屬

See all articles