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

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

 更新時(shí)間:2025年04月15日 10:33:39   作者:小白學(xué)大數(shù)據(jù)  
在現(xiàn)代 Web 開(kāi)發(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 開(kāi)發(fā)中,AJAX(Asynchronous JavaScript and XML) 技術(shù)被廣泛應(yīng)用于動(dòng)態(tài)加載數(shù)據(jù),使得網(wǎng)頁(yè)能夠在不刷新的情況下更新內(nèi)容。然而,這也給傳統(tǒng)爬蟲(chóng)帶來(lái)了挑戰(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)求:通過(guò) 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èn)網(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)爬蟲(chóng)的問(wèn)題

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)站(如新浪新聞)通過(guò) 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è)新聞列表通過(guò) 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)說(shuō)明

  • 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. 打開(kāi) Chrome → F12(開(kāi)發(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è)通過(guò) AJAX 加載熱門(mén)電影列表。

步驟 1:分析 API

  • 打開(kāi) 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=熱門(mén)&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數(shù)據(jù)分析中Groupby用法之通過(guò)字典或Series進(jìn)行分組的實(shí)例

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

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

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

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

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

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

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

    這篇文章主要介紹了Python map及filter函數(shù)使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    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é),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 詳解Python with/as使用說(shuō)明

    詳解Python with/as使用說(shuō)明

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

    基于Python制作個(gè)搶紅包的工具

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

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

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

    Python搭建HTTP服務(wù)過(guò)程圖解

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

最新評(píng)論