最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python + Chrome抓取AJAX動(dòng)態(tài)數(shù)據(jù)的兩種方法

 更新時(shí)間:2025年04月15日 10:33:39   作者:小白學(xué)大數(shù)據(jù)  
在現(xiàn)代 Web 開發(fā)中,AJAX技術(shù)被廣泛應(yīng)用于動(dòng)態(tài)加載數(shù)據(jù),使得網(wǎng)頁(yè)能夠在不刷新的情況下更新內(nèi)容,本文將詳細(xì)介紹 Python + Chrome 如何抓取 AJAX 動(dòng)態(tài)數(shù)據(jù),并提供兩種方法的完整實(shí)現(xiàn)代碼,需要的朋友可以參考下

前言

在現(xiàn)代 Web 開發(fā)中,AJAX(Asynchronous JavaScript and XML) 技術(shù)被廣泛應(yīng)用于動(dòng)態(tài)加載數(shù)據(jù),使得網(wǎng)頁(yè)能夠在不刷新的情況下更新內(nèi)容。然而,這也給傳統(tǒng)爬蟲帶來了挑戰(zhàn)——使用 <font style="color:rgb(64, 64, 64);">requests</font> + <font style="color:rgb(64, 64, 64);">BeautifulSoup</font> 只能獲取初始 HTML,而無(wú)法捕獲 AJAX 返回的動(dòng)態(tài)數(shù)據(jù)。

解決方案:

  • Selenium + ChromeDriver:模擬瀏覽器行為,等待 AJAX 數(shù)據(jù)加載完成后再抓取。
  • 直接分析 AJAX 請(qǐng)求:通過 Chrome DevTools 捕獲 API 接口,用 requests 直接請(qǐng)求數(shù)據(jù)(更高效)。

本文將詳細(xì)介紹 Python + Chrome 如何抓取 AJAX 動(dòng)態(tài)數(shù)據(jù),并提供兩種方法的完整實(shí)現(xiàn)代碼。

1. 理解 AJAX 動(dòng)態(tài)加載

1.1 AJAX 工作原理

  • 用戶訪問網(wǎng)頁(yè) → 瀏覽器加載初始 HTML。
  • JavaScript 發(fā)起 AJAX 請(qǐng)求(通常是 fetch 或 XMLHttpRequest)。
  • 服務(wù)器返回 JSON/XML 數(shù)據(jù) → 前端動(dòng)態(tài)渲染到頁(yè)面。

1.2 傳統(tǒng)爬蟲的問題

import requests
from bs4 import BeautifulSoup

response = requests.get("https://example.com")
soup = BeautifulSoup(response.text, "html.parser")
# 只能獲取初始 HTML,無(wú)法得到 AJAX 數(shù)據(jù)!

2. 方法 1:使用 Selenium + Chrome 模擬瀏覽器

2.1 環(huán)境準(zhǔn)備

安裝必要的庫(kù)

2.2 示例:爬取動(dòng)態(tài)加載的新聞列表

假設(shè)目標(biāo)網(wǎng)站(如新浪新聞)通過 AJAX 加載更多新聞。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time

# 設(shè)置代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"

# 配置 Chrome 代理
chrome_options = Options()
chrome_options.add_argument(f"--proxy-server=http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}")

# 啟動(dòng) Chrome
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get("https://news.sina.com.cn/")

# 等待 AJAX 內(nèi)容加載(假設(shè)新聞列表通過 AJAX 渲染)
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, ".news-item"))
    )
except:
    print("超時(shí),未找到新聞列表")

# 提取新聞標(biāo)題和鏈接
news_items = driver.find_elements(By.CSS_SELECTOR, ".news-item")
for item in news_items:
    title = item.find_element(By.CSS_SELECTOR, "a").text
    link = item.find_element(By.CSS_SELECTOR, "a").get_attribute("href")
    print(f"標(biāo)題: {title}\n鏈接: {link}\n")

# 關(guān)閉瀏覽器
driver.quit()

2.3 關(guān)鍵點(diǎn)說明

  • WebDriverWait:顯式等待 AJAX 數(shù)據(jù)渲染完成。
  • EC.presence_of_element_located:檢查目標(biāo)元素是否已加載。
  • find_elements + CSS/XPath:定位動(dòng)態(tài)生成的內(nèi)容。

3. 方法 2:直接抓取 AJAX API 數(shù)據(jù)(更高效)

3.1 分析 AJAX 請(qǐng)求

  1. 打開 Chrome → F12(開發(fā)者工具) → Network(網(wǎng)絡(luò)) 標(biāo)簽頁(yè)。
  2. 刷新頁(yè)面,篩選 XHR/fetch 請(qǐng)求。
  3. 找到返回目標(biāo)數(shù)據(jù)的 API 接口(通常是 json 格式)。

3.2 示例:爬取豆瓣電影 AJAX 數(shù)據(jù)

豆瓣電影首頁(yè)通過 AJAX 加載熱門電影列表。

步驟 1:分析 API

  • 打開 https://movie.douban.com → F12 → Network → 篩選 XHR。
  • 發(fā)現(xiàn) API:https://movie.douban.com/j/search_subjects?...

步驟 2:用 Python 直接請(qǐng)求 API

import requests
import json

# 豆瓣電影 AJAX API
url = "https://movie.douban.com/j/search_subjects?type=movie&tag=熱門&sort=recommend&page_limit=20&page_start=0"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

response = requests.get(url, headers=headers)
data = response.json()  # 直接解析 JSON

# 提取電影信息
for movie in data["subjects"]:
    print(f"電影名: {movie['title']}")
    print(f"評(píng)分: {movie['rate']}")
    print(f"鏈接: {movie['url']}\n")

3.3 優(yōu)勢(shì)與限制

  • 優(yōu)勢(shì):速度快,無(wú)需加載完整頁(yè)面。
  • 限制:需手動(dòng)分析 API,部分接口可能有加密或鑒權(quán)。

4. 總結(jié)

方法適用場(chǎng)景優(yōu)點(diǎn)缺點(diǎn)
Selenium復(fù)雜動(dòng)態(tài)渲染頁(yè)面能模擬完整瀏覽器行為速度慢,資源占用高
直接請(qǐng)求 API結(jié)構(gòu)化數(shù)據(jù)(如 JSON)高效,速度快需手動(dòng)分析接口,可能受限

最佳實(shí)踐建議

  • 優(yōu)先分析 AJAX API:如果目標(biāo)網(wǎng)站有清晰的接口,直接請(qǐng)求更高效。
  • Selenium 備用:適用于無(wú)法直接獲取 API 或需要交互的頁(yè)面。
  • 遵守 Robots.txt:避免高頻請(qǐng)求,防止被封禁。

到此這篇關(guān)于Python + Chrome抓取AJAX動(dòng)態(tài)數(shù)據(jù)的兩種方法的文章就介紹到這了,更多相關(guān)Python Chrome抓取AJAX數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python difflib模塊示例講解

    python difflib模塊示例講解

    這篇文章主要為大家詳細(xì)介紹了python difflib模塊的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 淺析pip安裝第三方庫(kù)及pycharm中導(dǎo)入第三方庫(kù)的問題

    淺析pip安裝第三方庫(kù)及pycharm中導(dǎo)入第三方庫(kù)的問題

    這篇文章主要介紹了淺析pip安裝第三方庫(kù)及pycharm中導(dǎo)入第三方庫(kù)的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python3兩數(shù)相加的實(shí)現(xiàn)示例

    python3兩數(shù)相加的實(shí)現(xiàn)示例

    這篇文章主要介紹了python3兩數(shù)相加的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python3使用pandas獲取股票數(shù)據(jù)的方法

    python3使用pandas獲取股票數(shù)據(jù)的方法

    今天小編就為大家分享一篇python3使用pandas獲取股票數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python使用切片快速刪除列表數(shù)據(jù)

    Python使用切片快速刪除列表數(shù)據(jù)

    在?Python?中,列表(list)是一種常用的數(shù)據(jù)結(jié)構(gòu),支持動(dòng)態(tài)增刪改查操作,但切片(slice)提供了一種更高效、更靈活的方式來刪除或修改列表的連續(xù)部分,本文將詳細(xì)介紹如何使用切片快速刪除列表數(shù)據(jù),需要的朋友可以參考下
    2026-04-04
  • Python根據(jù)文件名批量轉(zhuǎn)移圖片的方法

    Python根據(jù)文件名批量轉(zhuǎn)移圖片的方法

    今天小編就為大家分享一篇Python根據(jù)文件名批量轉(zhuǎn)移圖片的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python中的閉包詳細(xì)介紹和實(shí)例

    Python中的閉包詳細(xì)介紹和實(shí)例

    這篇文章主要介紹了Python中的閉包詳細(xì)介紹和實(shí)例,本文先是詳細(xì)講解了閉包的相關(guān)知識(shí),然后給出了python中閉包例子、lamada例子,需要的朋友可以參考下
    2014-11-11
  • 人臉識(shí)別具體案例

    人臉識(shí)別具體案例

    出于興趣和對(duì)IU的喜愛,筆者花了幾天嘗試用爬蟲從百度圖片獲取人物圖片并下載,利用深度神經(jīng)網(wǎng)絡(luò)從其中識(shí)別出人,并將圖片保存至文件夾。若讀者有興趣可以參考下
    2021-04-04
  • Python NumPy 數(shù)組索引的示例詳解

    Python NumPy 數(shù)組索引的示例詳解

    數(shù)組索引是指使用方括號(hào)([])來索引數(shù)組值,numpy提供了比常規(guī)的python序列更多的索引工具,除了按整數(shù)和切片索引之外,數(shù)組可以由整數(shù)數(shù)組索引、布爾索引及花式索引,這篇文章主要介紹了Python NumPy 數(shù)組索引,需要的朋友可以參考下
    2023-01-01
  • Python實(shí)現(xiàn)為Excel中每個(gè)單元格計(jì)算其在文件中的平均值

    Python實(shí)現(xiàn)為Excel中每個(gè)單元格計(jì)算其在文件中的平均值

    這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言實(shí)現(xiàn)對(duì)大量不同的Excel文件加以跨文件、逐單元格平均值計(jì)算,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10

最新評(píng)論

婺源县| 石台县| 屯门区| 土默特右旗| 东海县| 徐水县| 天祝| 三台县| 新余市| 扶余县| 自贡市| 德令哈市| 中江县| 会东县| 康保县| 秦皇岛市| 梧州市| 莫力| 长宁区| 睢宁县| 大名县| 进贤县| 荔波县| 许昌县| 苍梧县| 铅山县| 和平区| 阿城市| 上饶市| 邻水| 临漳县| 垫江县| 昂仁县| 德钦县| 错那县| 仙游县| 武宁县| 麦盖提县| 伊通| 铜陵市| 普兰店市|