Ajax介紹
Ajax(Asynchronous JavaScript and XML)是一種用于在Web應(yīng)用程序中實現(xiàn)異步通信的技術(shù)。它允許在不刷新整個網(wǎng)頁的情況下,通過在后臺與服務(wù)器進(jìn)行數(shù)據(jù)交換,實時更新網(wǎng)頁的一部分。Ajax的主要特點包括:
-
異步通信: Ajax是異步的,這意味著它可以在不阻塞用戶界面的情況下進(jìn)行通信。用戶可以繼續(xù)與網(wǎng)頁交互,而不必等待服務(wù)器響應(yīng)。
-
數(shù)據(jù)交換: Ajax允許在客戶端和服務(wù)器之間交換數(shù)據(jù),通常使用XML、JSON或其他數(shù)據(jù)格式。這使得網(wǎng)頁能夠?qū)崟r加載、顯示和更新數(shù)據(jù),而無需完全重新加載整個頁面。
-
無需頁面刷新: 傳統(tǒng)的Web應(yīng)用程序通常在每次與服務(wù)器進(jìn)行交互時都需要刷新整個頁面。而Ajax可以僅刷新頁面的一部分,從而提供更流暢的用戶體驗。
-
動態(tài)內(nèi)容: Ajax使開發(fā)人員能夠創(chuàng)建動態(tài)的、實時更新的網(wǎng)頁內(nèi)容,這些內(nèi)容可以根據(jù)用戶的操作和需求進(jìn)行動態(tài)加載和修改。
-
多種用途: Ajax不僅可以用于加載數(shù)據(jù),還可以用于提交表單、驗證用戶輸入、自動完成搜索、實時聊天和其他許多Web應(yīng)用程序中的交互性功能。
Ajax通常由以下幾個核心組件組成:
-
XMLHttpRequest對象: 這是Ajax的核心,它允許JavaScript代碼與服務(wù)器進(jìn)行通信,發(fā)送HTTP請求并接收響應(yīng)?,F(xiàn)代Web開發(fā)中通常使用
fetch API
代替XMLHttpRequest
,因為它更簡單和強(qiáng)大。 -
服務(wù)器端腳本: 服務(wù)器端需要提供接受Ajax請求的端點,并能夠處理這些請求,執(zhí)行相應(yīng)的操作,并返回響應(yīng)數(shù)據(jù)。
-
異步事件處理: JavaScript代碼需要能夠在后臺處理Ajax請求和響應(yīng),以確保不會阻塞用戶界面。這通常涉及到使用回調(diào)函數(shù)或Promise來處理異步操作。
-
數(shù)據(jù)格式: Ajax可以使用多種數(shù)據(jù)格式來交換信息,包括XML、JSON、HTML和純文本等。
Ajax已經(jīng)成為現(xiàn)代Web應(yīng)用程序開發(fā)的重要組成部分,它提供了一種有效的方式來實現(xiàn)實時、交互性和動態(tài)性的用戶體驗。很多流行的Web應(yīng)用程序和框架(如React、Angular和Vue.js)都使用Ajax來處理數(shù)據(jù)的加載和交互。通過Ajax,Web應(yīng)用程序可以更好地響應(yīng)用戶的需求,提供更好的用戶體驗。
案列實戰(zhàn)
在上篇文章基礎(chǔ)上https://blog.csdn.net/rubyw/article/details/132714499?spm=1001.2014.3001.5501使用Ajax動態(tài)渲染頁面爬取,并存儲到本地mongo數(shù)據(jù)庫中
網(wǎng)站鏈接:https://spa1.scrape.center
只看菜單XHR下的信息,觀察頁面變化時的情況
第一頁
詳情頁
# Ajax + MongoDB存儲
import pymongo
import requests
import logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(levelname)s: %(message)s')
INDEX_URL = 'https://spa1.scrape.center/api/movie/?limit={limit}&offset={offset}'
MONGO_CONNECTION_STRING = 'mongodb://localhost:27017'
MONGO_DB_NAME = 'movies'
MONGO_COLLECTION_NAME = 'movies'
client = pymongo.MongoClient(MONGO_CONNECTION_STRING)
db = client['movies']
collection = db['movies']
# 處理 JSON 接口
def scrape_api(url):
logging.info('scraping %s...', url)
try:
response = requests.get(url)
if response.status_code == 200:
return response.json()
else:
logging.error('get invalid status code %s while scraping %s',
response.status_code, url)
return None
except requests.RequestException:
logging.error('error occurred while scraping %s', url, exc_info=True)
LIMIT = 10
def scrape_index(page):
url = INDEX_URL.format(limit=LIMIT, offset=LIMIT * (page - 1))
return scrape_api(url)
DETAIL_URL = 'https://spa1.scrape.center/api/movie/{id}'
def scrape_detail(id):
url = DETAIL_URL.format(id=id)
return scrape_api(url)
TOTAL_PAGE = 10
def save_data(data):
collection.update_one({
'name': data.get('name') # 根據(jù)name進(jìn)行查詢
}, {
'$set': data # 表示更新操作
}, upsert=True) # 存在即更新,不存在即插入
def main():
for page in range(1, TOTAL_PAGE + 1):
index_data = scrape_index(page)
for item in index_data.get('results'):
id = item.get('id')
detail_data = scrape_detail(id)
logging.info('detail data %s', detail_data)
save_data(detail_data)
logging.info('data saved successfully')
if __name__ == '__main__':
main()
可視化工具RoboMongo/Robo 3T,它使用簡單,功能強(qiáng)大,官方網(wǎng)站為https://robomongo.org/,三大平臺都支持,下載鏈接為https://robomongo.org/download。文章來源:http://www.zghlxwxcb.cn/news/detail-704269.html
最終在本地mongo數(shù)據(jù)庫中可以看到最終爬取保存的結(jié)果:文章來源地址http://www.zghlxwxcb.cn/news/detail-704269.html
到了這里,關(guān)于Python爬取電影信息:Ajax介紹、爬取案例實戰(zhàn) + MongoDB存儲的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!