Python爬蟲處理網頁中的動態內容

文章目錄

  • 前言
  • 一、Python環境搭建
    • 1.Python安裝
    • 2.選擇Python開發環境
  • 二、Python爬蟲處理網頁中的動態內容
    • 1. 使用 Selenium 庫
    • 2. 使用 Pyppeteer 庫
    • 3. 分析 API 請求


前言

在網頁中,動態內容通常是指那些通過 JavaScript 在頁面加載后動態生成或更新的內容,傳統的基于 requests 庫直接獲取 HTML 的方式無法獲取這些動態內容。以下為你介紹幾種使用 Python 爬蟲處理網頁中動態內容的方法:


一、Python環境搭建

1.Python安裝

訪問 Python 官方網站,根據你的操作系統(Windows、Mac 或 Linux)下載并安裝 Python 3.x 版本。安裝時勾選 “Add Python to PATH”,方便在命令行中使用 Python。

Python 3.7安裝教程:https://blog.csdn.net/u014164303/article/details/145620847
Python 3.9安裝教程:https://blog.csdn.net/u014164303/article/details/145570561
Python 3.11安裝教程:https://blog.csdn.net/u014164303/article/details/145549489

2.選擇Python開發環境

下載 PyCharm 社區版(免費)或專業版(需付費或申請教育版)。安裝完成后,打開 PyCharm,創建一個新的項目,在項目設置中選擇之前創建的虛擬環境作為項目的 Python 解釋器。PyCharm 功能強大,提供代碼自動補全、調試等功能,適合開發大型項目。

Pycharm安裝教程:https://blog.csdn.net/u014164303/article/details/145674773
PyCharm下載地址:https://pan.quark.cn/s/5756c8cf8b2a

二、Python爬蟲處理網頁中的動態內容

1. 使用 Selenium 庫

Selenium 是一個自動化測試工具,它可以模擬用戶在瀏覽器中的操作,等待 JavaScript 代碼執行完成后再獲取頁面內容。
安裝依賴

pip install selenium

此外,你還需要下載對應瀏覽器的驅動,如 Chrome 瀏覽器需要下載 ChromeDriver,下載地址為:ChromeDriver 下載 ,下載后將其添加到系統的環境變量中。
示例代碼

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time# 設置 ChromeDriver 的路徑
chrome_driver_path = 'path/to/chromedriver'
service = Service(chrome_driver_path)# 創建 Chrome 瀏覽器實例
driver = webdriver.Chrome(service=service)# 打開網頁
url = 'https://example.com'
driver.get(url)# 等待頁面加載,可根據實際情況調整等待時間
time.sleep(5)# 獲取動態加載的元素
element = driver.find_element(By.ID, 'dynamic-element-id')
print(element.text)# 關閉瀏覽器
driver.quit()

2. 使用 Pyppeteer 庫

Pyppeteer 是一個 Python 版本的 Puppeteer 庫,Puppeteer 是 Google 開發的一個 Node.js 庫,用于控制 Chrome 或 Chromium 瀏覽器。Pyppeteer 可以實現與瀏覽器的交互,處理動態內容。
安裝依賴

pip install pyppeteer

示例代碼

import asyncio
from pyppeteer import launchasync def main():# 啟動瀏覽器browser = await launch()page = await browser.newPage()# 打開網頁url = 'https://example.com'await page.goto(url)# 等待頁面加載await page.waitForSelector('#dynamic-element-id')# 獲取動態元素的文本內容element = await page.querySelector('#dynamic-element-id')text = await page.evaluate('(element) => element.textContent', element)print(text)# 關閉瀏覽器await browser.close()# 運行異步函數
asyncio.get_event_loop().run_until_complete(main())

3. 分析 API 請求

有些網頁的動態內容是通過調用后端 API 獲取的,你可以通過瀏覽器的開發者工具(如 Chrome 的開發者工具)分析網絡請求,找到這些 API 的 URL 和請求參數,然后使用 requests 庫直接調用這些 API 獲取數據。
示例步驟
打開網頁,在 Chrome 瀏覽器中按下 F12 打開開發者工具,切換到 “Network” 標簽頁。
刷新頁面,觀察網絡請求,找到與動態內容相關的 API 請求。
分析請求的 URL、請求方法(GET 或 POST)和請求參數。
使用 requests 庫發送請求獲取數據。
示例代碼

import requests# API 的 URL
api_url = 'https://example.com/api/data'# 請求參數
params = {'param1': 'value1','param2': 'value2'
}# 發送 GET 請求
response = requests.get(api_url, params=params)# 檢查響應狀態碼
if response.status_code == 200:data = response.json()print(data)
else:print(f"請求失敗,狀態碼: {response.status_code}")

通過以上幾種方法,你可以有效地處理網頁中的動態內容,實現更全面的數據抓取。在實際應用中,需要根據具體情況選擇合適的方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70491.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70491.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

重學SpringBoot3-Spring Retry實踐

更多SpringBoot3內容請關注我的專欄:《SpringBoot3》 期待您的點贊??收藏評論 重學SpringBoot3-Spring Retry實踐 1. 簡介2. 環境準備3. 使用方式 3.1 注解方式 基礎使用自定義重試策略失敗恢復機制重試和失敗恢復效果注意事項 3.2 編程式使用3.3 監聽重試過程 監…

vue3中解決組件間 css 層級問題最佳實踐(Teleport的使用)

定義&#xff1a; <Teleport> 是 Vue 3 中引入的一個內置組件&#xff0c;用于將組件的內容渲染到 DOM 中的指定位置&#xff0c;而不受組件層級結構的限制。這在處理模態框、通知、下拉菜單等需要脫離當前組件層級的情況下非常有用。 通俗來說&#xff0c;Teleport的功…

密度提升30%!Intel 18A工藝正式開放代工

快科技2月23日消息&#xff0c;Intel官方網站悄然更新了對于18A(1.8nm級)工藝節點的描述&#xff0c;稱已經做好了迎接客戶項目的準備&#xff0c;將在今年上半年開始流片&#xff0c;有需求的客戶可以隨時聯系。 Intel宣稱&#xff0c;這是在北美地區率先量產的2nm以下工藝節…

docker中常用的命令

一、服務命令 systemctl start docker.service 啟動docker服務 systemctl stop docker.service 關閉docker服務 systemctl enable docker.service 設置docker服務開機啟動 systemctl disable docker.service .禁止docker服務開機自啟動 二、鏡像命令 d…

架構師論文《智慧醫療系統中的數據集成與共享》

智慧醫療系統中的數據集成與共享 摘要 隨著醫療信息化的發展&#xff0c;如何實現跨系統、跨機構的數據集成與共享成為智慧醫療建設的核心問題。2019年&#xff0c;我所在的醫療科技公司承接了某省衛生健康委員會主導的“區域醫療信息化平臺”項目。該平臺旨在整合區域內三甲醫…

請求go構建緩存,go clean -cache

go clean -cache go 構建時會產生很多緩存&#xff0c; 一般是目錄&#xff1a;/Users/xxx/Library/Caches/go-build 此目錄README&#xff1a; This directory holds cached build artifacts from the Go build system. Run "go clean -cache" if the directory …

mybatis從接口直接跳到xml的插件

在使用 MyBatis(包括 MyBatis-Plus)時,如果你希望從接口方法直接跳轉到對應的 XML 映射文件中的 SQL 語句定義,可以借助一些開發工具或插件來實現這一功能。以下是幾種常見的方法和插件推薦: 方法一:使用 IDE 內置功能 IntelliJ IDEA IntelliJ IDEA 提供了對 MyBatis …

計算機視覺行業洞察--影像行業系列第一期

計算機視覺行業產業鏈的上下游構成相對清晰&#xff0c;從基礎技術研發到具體應用場景的多個環節相對成熟。 以下是我結合VisionChina經歷和行業龍頭企業對計算機視覺行業產業鏈上下游的拆解總結。 上下游總結 上游產業鏈分為軟硬件兩類&#xff0c;視覺的硬件主要指芯片、…

Spring事務原理 二

在上一篇博文《Spring事務原理 一》中&#xff0c;我們熟悉了Spring聲明式事務的AOP原理&#xff0c;以及事務執行的大體流程。 本文中&#xff0c;介紹了Spring事務的核心組件、傳播行為的源碼實現。下一篇中&#xff0c;我們將結合案例&#xff0c;來講解實戰中有關事務的易…

邏輯函數的神經網絡實現

1.單層感知器實現基本邏輯函數 先給大家拋出一道例題 &#xff08;一&#xff09;種類 a.OR函數 目標&#xff1a;當至少一個輸入為1時&#xff0c;輸出1&#xff1b;否則輸出0。 權重設置&#xff1a; 輸入權重&#xff1a;所有 wi1&#xff08;i1,2,...,m&#xff09;。…

SF-HCI-SAP問題收集1

最近在做HCI的集成&#xff0c;是S4的環境&#xff0c;發現很多東西都跑不通&#xff0c;今天開始收集一下錯誤點 如果下圖沖從0001變成0010&#xff0c;sfiom_rprq_osi表就會存數據&#xff0c;系統檢查到此表就會報錯&#xff0c;這個選項的作用就是自定義信息類型也能更新&a…

(面試經典問題之分布式鎖)分布式鎖的基本原理、作用以及實現

一、什么是分布式鎖 分布式鎖指的是在分布式場景中實現互斥類型的鎖。 分布式是什么意思&#xff1f;分布式表示運行的節點可能在不同的機器或不同的網段中&#xff0c;節點間通信通過socket。互斥類型是什么意思&#xff1f;互斥類型表示同一時刻只允許一個執行體進入臨界資…

機械硬盤與固態硬盤的區別-機械硬盤的未來在哪里?

隨著近年來固態硬盤的技術成熟和成本的下探&#xff0c;固態硬盤&#xff08;SSD&#xff09;儼然有要取代傳統機械硬盤&#xff08;HDD&#xff09;的趨勢&#xff0c;但目前單位容量下機械硬盤每GB價格相比閃存還有5-7倍的優勢&#xff0c;那么機械硬盤是否已經發展到極限&am…

06排序 + 查找(D1_排序(D1_基礎學習))

目錄 學習預熱&#xff1a;基礎知識 一、什么是排序 二、為什么要排序 三、排序的穩定性 四、排序穩定性的意義 五、排序分類方式 方式一&#xff1a;內外分類 方式二&#xff1a;比較分類 六、排序算法性能評估 1. 算法的時間復雜度 2. 算法的空間復雜度 七、知識小…

簡訊:Rust 2024 edition and v1.85.0 已發布

詳見 https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html 升級方法&#xff1a;rustup update stable

Python 錯誤和異常處理

目錄 try-except塊 例子&#xff1a; 輸出&#xff1a; 捕獲多種異常 例子&#xff1a; else和finally 例子&#xff1a; 輸出&#xff1a; 自定義異常 例子&#xff1a; 輸出&#xff1a; 好的&#xff0c;簡單來說&#xff0c;錯誤和異常處理是編程中用來處理程序…

Linux系統使用Docker部署Geoserver并做數據掛載進行地圖服務的發布和游覽

文章目錄 1、前提環境2、拉取geoserver鏡像3、創建數據掛載目錄4、 運行容器5、 測試使用&#xff08;發布shp數據為服務&#xff09;5.1、創建工作區5.2、添加數據存儲5.3、發布圖層5.4、服務游覽 1、前提環境 部署環境&#xff1a;Linux&#xff0c;Centos7 &#xff0c;Doc…

Innovus中快速獲取timing path邏輯深度的golden腳本

在實際項目中我們經常會遇到一條timing path級數特別多&#xff0c;可能是一兩頁都翻不完。此時&#xff0c;我們大都需要手工去數這條path上到底有哪些是設計本身的邏輯&#xff0c;哪些是PR工具插入的buffer和inverter。 數字IC后端手把手培訓教程 | Clock Gating相關clock …

Python爬蟲實戰:從零到一構建數據采集系統

文章目錄 前言一、準備工作1.1 環境配置1.2 選擇目標網站 二、爬蟲實現步驟2.1 獲取網頁內容2.2 解析HTML2.3 數據保存 三、完整代碼示例四、優化與擴展4.1 反爬應對策略4.2 動態頁面處理4.3 數據可視化擴展 五、注意事項六、總結互動環節 前言 在大數據時代&#xff0c;數據采…

SpringBoot中實現限流和熔斷功能

我們將使用Java的ScheduledExecutorService來實現一個簡單的令牌桶算法(Token Bucket Algorithm),并結合一個自定義的服務類來處理第三方API調用。 1. 創建限流器 首先,創建一個簡單的限流器類: import java.util.concurrent.*;public class SimpleRateLimiter {