欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

在現(xiàn)代 Web 開發(fā)中,AJAX(Asynchronous JavaScript and XML) 技術(shù)被廣泛應用于動態(tài)加載數(shù)據(jù),使得網(wǎng)頁能夠在不刷新的情況下更新內(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,而無法捕獲 AJAX 返回的動態(tài)數(shù)據(jù)。

解決方案:

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

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

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

1.1 AJAX 工作原理

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

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

import requests
from bs4 import BeautifulSoup

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

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

2.1 環(huán)境準備

安裝必要的庫

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

假設目標網(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

# 設置代理信息
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}")

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

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

# 提取新聞標題和鏈接
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"標題: {title}\n鏈接: {link}\n")

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

2.3 關(guān)鍵點說明

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

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

3.1 分析 AJAX 請求

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

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

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

步驟 1:分析 API

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

步驟 2:用 Python 直接請求 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"評分: {movie['rate']}")
    print(f"鏈接: {movie['url']}\n")

3.3 優(yōu)勢與限制

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

4. 總結(jié)

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

最佳實踐建議

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

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

相關(guān)文章

  • Python數(shù)據(jù)分析中Groupby用法之通過字典或Series進行分組的實例

    Python數(shù)據(jù)分析中Groupby用法之通過字典或Series進行分組的實例

    下面小編就為大家分享一篇Python數(shù)據(jù)分析中Groupby用法之通過字典或Series進行分組的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • python中nan與inf轉(zhuǎn)為特定數(shù)字方法示例

    python中nan與inf轉(zhuǎn)為特定數(shù)字方法示例

    這篇文章主要給大家介紹了將python中nan與inf轉(zhuǎn)為特定數(shù)字的方法,文中給出了詳細的示例代碼和運行結(jié)果,對大家的理解和學習具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Python OpenCV 圖像區(qū)域輪廓標記(框選各種小紙條)

    Python OpenCV 圖像區(qū)域輪廓標記(框選各種小紙條)

    這篇文章主要介紹了Python OpenCV 圖像區(qū)域輪廓標記(框選各種小紙條),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python map及filter函數(shù)使用方法解析

    Python map及filter函數(shù)使用方法解析

    這篇文章主要介紹了Python map及filter函數(shù)使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • wtfPython—Python中一組有趣微妙的代碼【收藏】

    wtfPython—Python中一組有趣微妙的代碼【收藏】

    Wtfpython講解了大量的Python編譯器的內(nèi)容。這篇文章主要介紹了wtfPython-Python中一些奇妙的代碼,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-08-08
  • 關(guān)于Python 常用獲取元素 Driver 總結(jié)

    關(guān)于Python 常用獲取元素 Driver 總結(jié)

    今天小編就為大家分享一篇關(guān)于Python 常用獲取元素 Driver 總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解Python with/as使用說明

    詳解Python with/as使用說明

    這篇文章主要介紹了Python with/as使用說明,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 基于Python制作個搶紅包的工具

    基于Python制作個搶紅包的工具

    快過年了,剛剛收到了兩個消息,一個好消息,一個壞消息。好消息就是微信群里有人要發(fā)紅包,壞消息是不一定能都搶到。所以本文就來用Python做一個搶紅包工具,需要的可以參考一下
    2023-01-01
  • Pycharm配置Qt Designer及Pyuic的實現(xiàn)方法

    Pycharm配置Qt Designer及Pyuic的實現(xiàn)方法

    本文介紹了如何安裝Qt designer和Pyuic以及他們的基本用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Python搭建HTTP服務過程圖解

    Python搭建HTTP服務過程圖解

    這篇文章主要介紹了Python搭建HTTP服務過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12

最新評論