欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:網(wǎng)絡(luò)爬蟲之Ajax動態(tài)數(shù)據(jù)采集

柚子快報邀請碼778899分享:網(wǎng)絡(luò)爬蟲之Ajax動態(tài)數(shù)據(jù)采集

http://yzkb.51969.com/

動態(tài)數(shù)據(jù)采集

規(guī)則

??????? 有時候我們在用 requests 抓取頁面的時候,得到的結(jié)果可能和在瀏覽器中看到的不一樣,在瀏覽器中可以看到正常顯示的頁面教據(jù),但是使用 requests 得到的結(jié)果并沒有,這是因為requests 獲取的都是原始的 HTML 文檔,而瀏覽器中的頁面則是經(jīng)過 JavaScript 處理數(shù)據(jù)后生成的結(jié)果,這些數(shù)據(jù)的來源有多種,可能是通過 Ajax 加載的,可能是包含在 HTML 文檔中的,也可能是經(jīng)過 avaScript 和特定算法計算后生成的。 對于第一種情況,數(shù)據(jù)加載是一種異步加載方式,原始的頁面最初不會包含某些數(shù)據(jù),原始頁面加載完后,會再向服務(wù)器請求某個接口獲取數(shù)據(jù),然后數(shù)據(jù)才被處理從而呈現(xiàn)到網(wǎng)頁上,這其實就是發(fā)送了一個 Ajax 請求。 ????????照 Web 發(fā)展的趨勢來看,這種形式的頁面越來越多。網(wǎng)頁的原始 HTML 文檔不會包含任何數(shù)據(jù),數(shù)據(jù)都是過 Ajax 統(tǒng)一加載后再呈現(xiàn)出來的,這樣在 We 開發(fā)上可以做到前后端分離,而且降低服務(wù)器直接渲染頁面帶來的壓力。 ????????所以如果遇到這樣的頁面,直接利用 requests 等庫來抓取原始頁面,是無法獲取到有效數(shù)據(jù)的,這時需要分析網(wǎng)頁后臺向接口發(fā)送的Ajax 請求,如果可以用 requests 來模擬 Aiax 請求,那么就可以成功抓取了所以,本章我們的主要目的是了解什么是 Ajax 以及如何去分析和抓取 Ajax 請求。

什么是Ajax

????????Ajax,全稱為 Asynchronous JavaScript and XML,即異步的avaScript 和 XML,它不是-門編程語言,而是利用JavaScript在保證頁面不被刷新、頁面鏈接不改變的情況下與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁的技術(shù)。 ??????? 對于傳統(tǒng)的網(wǎng)頁,如果想更新其內(nèi)容,那么必須要刷新整個頁面,但有了 Ajax,便可以在頁面不被全部刷新的情況下更新其內(nèi)容。在這個過程中,頁面實際上是在后臺與服務(wù)器進行了數(shù)據(jù)交互,獲取到數(shù)據(jù)之后,再利用JavaScript 改變網(wǎng)頁,這樣網(wǎng)頁內(nèi)容就會更新了。

手寫Ajax接口

環(huán)境搭建

pip install flask

一個簡單請求過程

通俗地說,路由(Routing)就像是一種地圖,告訴服務(wù)器當用戶訪問一個特定的 URL 地址時該如何響應。在 Web 開發(fā)中,路由是將瀏覽器中的 URL 映射到后端應用程序中的一種功能或代碼塊的機制。

API 是“應用編程接口”(Application Programming Interface)的縮寫。它是一套預定義的規(guī)則和協(xié)議,用于構(gòu)建和集成軟件應用程序。簡單來說,API 是一種使得不同軟件組件之間可以相互溝通的方式。

Web API:通常指的是通過HTTP協(xié)議為Web服務(wù)器和客戶端或者兩個在線服務(wù)之間提供數(shù)據(jù)交換的接口。例如,天氣服務(wù)的API可以允許開發(fā)者獲取天氣預報數(shù)據(jù)。

在Web開發(fā)中,視圖通常指的是用戶請求特定URL時服務(wù)器返回的頁面。例如,在一個Web應用中,服務(wù)器可能會根據(jù)用戶請求的不同路徑(比如/home或/products)來提供不同的HTML內(nèi)容。在Web框架中,視圖還可以是模板,模板中的數(shù)據(jù)會由服務(wù)器動態(tài)填充,然后渲染成最終的HTML發(fā)送給客戶端。

在Web開發(fā)領(lǐng)域,模板特指的是用于動態(tài)生成HTML頁面的預設(shè)文件。這些模板文件包含了靜態(tài)的HTML標記,以及用于插入動態(tài)內(nèi)容的特殊模板標簽或占位符。當服務(wù)器接收到一個請求時,它會結(jié)合模板和相關(guān)的數(shù)據(jù)來生成最終的HTML頁面,然后發(fā)送給客戶端。

例如,在Python的Flask框架中,模板可能會使用Jinja2模板引擎編寫:

{{ title }}

Hello, {{ name }}!

在上面的例子中,{{ title }} 和 {{ name }} 是模板變量,它們在渲染過程中會被實際的值所替換。

編寫網(wǎng)絡(luò)爬蟲爬取蛋卷基金信息并存儲

import requests

import pymysql

# 創(chuàng)建數(shù)據(jù)庫連接

db = pymysql.connect(host='localhost', user='root', password='123456', port=3306)

cursor = db.cursor()

cursor.execute('use spiders')

def get_data():

url = 'https://danjuanfunds.com/djapi/fund/growth/011102?day=1m'

headers = {

'User-Agent':'111222333444'

}

resp = requests.get(url, headers=headers).json()

data = resp.get('data')['fund_nav_growth']

for item in data:

date = item.get('date') # 如果沒有就返回 None

value = item.get('value')

than_value = item.get('than_value')

print('日期:', date, '\n', '本產(chǎn)品:', value, '滬深:', than_value)

# 保存數(shù)據(jù)到數(shù)據(jù)庫

save_data(date, value, than_value)

def save_data(date, value, than_value):

sql = 'INSERT INTO funds(date, value, than_value) VALUES(%s, %s, %s)'

cursor.execute(sql, (date, value, than_value))

db.commit() # 提交事務(wù)

# 獲取并保存數(shù)據(jù)

get_data()

# 關(guān)閉光標和數(shù)據(jù)庫連接

cursor.close()

db.close()

編寫網(wǎng)絡(luò)爬蟲爬取虎牙信息并存儲

import requests,pymysql

def conn_mysql():

db = pymysql.connect(host='localhost',user='root',password='123456',database='spiders')

cursor = db.cursor()

return cursor,db

def get_date(url):

resp = requests.get(url).json()

dates = []

try:

date = resp.get('vList')

for item in date:

indurce = item.get('sIntroduction')

author = item.get('sNick')

home_numb = item.get('sGameHostName')

# print('主播名:',author,'簡介:',indurce,'房間號:',home_numb)

dates.append([author,indurce,home_numb])

save_date(dates)

except Exception as e:

print(e)

def save_date(data):

cursor, db = conn_mysql()

cursor.execute('use spiders')

sql = 'insert into huya(author,indurce,home_numb) values(%s,%s,%s)'

for d in data:

print(d)

try:

cursor.execute(sql,(d[0],d[1],d[2]))

db.commit()

except Exception as e:

print(e)

db.rollback()

urls = []

for i in range(1,127):

url = 'https://live.huya.com/liveHttpUI/getLiveList?iGid=0&iPageNo={}&iPageSize=120'.format(i)

if url not in urls:

urls.append(url)

for url in urls:

print(i)

get_date(url)

柚子快報邀請碼778899分享:網(wǎng)絡(luò)爬蟲之Ajax動態(tài)數(shù)據(jù)采集

http://yzkb.51969.com/

推薦文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18138154.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄