日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
使用Excel和Python從互聯(lián)網(wǎng)獲取數(shù)據(jù)

今天的文章主要分為兩個(gè)部分,一是用通過(guò)Python構(gòu)建一個(gè)數(shù)據(jù)網(wǎng)站?,二是分別使用Excel和Python從編寫(xiě)的Web網(wǎng)站上獲取數(shù)據(jù)。

成都創(chuàng)新互聯(lián)主要從事做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)汾陽(yáng),10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18980820575

一、構(gòu)建測(cè)試用網(wǎng)站數(shù)據(jù)

通過(guò)Python Flask Web框架分別構(gòu)建一個(gè)Web網(wǎng)站和一個(gè)Web API服務(wù)。

1.構(gòu)建Web網(wǎng)站

新建一個(gè)名為“5-5-WebTable.py”的Python腳本,創(chuàng)建一個(gè)包含表格的簡(jiǎn)單網(wǎng)頁(yè)。如果讀者對(duì)構(gòu)建方法不感興趣,可跳過(guò)以下代碼,直接執(zhí)行腳本“5-5-WebTable.py”打開(kāi)網(wǎng)站。

(1)安裝flask包。

pip install flask

(2)構(gòu)建包含表格的網(wǎng)頁(yè)。

from flask import Flask

app = Flask(__name__) # 創(chuàng)建Falsk Web應(yīng)用實(shí)例

# 將路由“/”映射到table_info函數(shù),函數(shù)返回HTML代碼
@app.route('/')
def table_info():

return """

HTML表格實(shí)例,用于提供給Excel和Python讀取














……….
用戶(hù)信息表
姓名 性別 年齡
小米 22
"""

if __name__ == '__main__':
app.debug = True # 啟用調(diào)試模式
app.run() # 運(yùn)行,網(wǎng)站端口默認(rèn)為5000

通過(guò)命令“python ./5-5-WebTable.py”啟動(dòng)網(wǎng)站,然后在瀏覽器中輸入http://127.0.0.1:5000/,出現(xiàn)如圖1所示的網(wǎng)頁(yè)內(nèi)容。

圖1  使用Flask構(gòu)建的測(cè)試網(wǎng)站

2.構(gòu)建Web API服務(wù)

新建一個(gè)名為“5-5-WebAPI.py”的Python腳本,使用flask_restplus包構(gòu)建Web API服務(wù)。如果讀者對(duì)構(gòu)建方法不感興趣,可跳過(guò)以下代碼,直接執(zhí)行腳本“5-5-WebAPI.py”打開(kāi)Web API服務(wù)。

(1)安裝flask_restplus包。

pip install flask-restplus

(2)導(dǎo)入必要的庫(kù)與初始化應(yīng)用對(duì)象。

from flask import Flask
# Api類(lèi)是Web API應(yīng)用的入口,需要用Flask應(yīng)用程序初始化
from flask_restplus import Api

# Resource類(lèi)是HTTP請(qǐng)求的資源的基類(lèi)
from flask_restplus import Resource

# fields類(lèi)用于定義數(shù)據(jù)的類(lèi)型和格式
from flask_restplus import fields

app = Flask(__name__) # 創(chuàng)建Falsk Web應(yīng)用實(shí)例

# 在flask應(yīng)用的基礎(chǔ)上構(gòu)建flask_restplus Api對(duì)象
api = Api(app, version='1.0',
title='Excel集成Python數(shù)據(jù)分析-測(cè)試用WebAPI',
description='測(cè)試用WebAPI', )

# 使用namespace函數(shù)生成命名空間,用于為資源分組
ns = api.namespace('ExcelPythonTest', description='Excel與Python Web API測(cè)試')
# 使用api.model函數(shù)生成模型對(duì)象
todo = api.model('task_model', {
'id': fields.Integer(readonly=True,
description='ETL任務(wù)唯一標(biāo)識(shí)'),
'task': fields.String(required=True,
description='ETL任務(wù)詳情')
})

(3)Web API數(shù)據(jù)操作類(lèi),包含增、刪、改、查等方法。

class TodoDAO(object):

def __init__(self):
self.counter = 0
self.todos = []

def get(self, id):
for todo in self.todos:
if todo['id'] == id:
return todo
api.abort(404, "ETL任務(wù) {} 不存在".format(id))

def create(self, data):
todo = data
todo['id'] = self.counter = self.counter + 1
self.todos.append(todo)
return todo

# 實(shí)例化數(shù)據(jù)操作,創(chuàng)建3條測(cè)試數(shù)據(jù)
DAO = TodoDAO()
DAO.create({'task': 'ETL-抽取數(shù)據(jù)操作'})
DAO.create({'task': 'ETL-數(shù)據(jù)清洗轉(zhuǎn)換'})
DAO.create({'task': 'ETL-數(shù)據(jù)加載操作'})

(4)構(gòu)建Web API的路由映射。

HTTP資源請(qǐng)求類(lèi)從Resource類(lèi)繼承,然后映射到不同的路由,同時(shí)指定可使用HTTP方法。

@ns.route('/')  # 路由“/”對(duì)應(yīng)的資源類(lèi)為T(mén)odoList,可使用get方法和post方法進(jìn)行請(qǐng)求
class TodoList(Resource):
@ns.doc('list_todos') # @doc裝飾器對(duì)應(yīng)API文檔的信息
@ns.marshal_list_with(todo) # @marshal_xxx裝飾器對(duì)模型數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換與輸出
def get(self): # 定義get方法獲取所有的任務(wù)信息
return DAO.todos

@ns.doc('create_todo')
@ns.expect(todo)
@ns.marshal_with(todo, code=201)
def post(self): # 定義post方法獲取所有的任務(wù)信息
return DAO.create(api.payload), 201

# 路由/對(duì)應(yīng)的資源類(lèi)為T(mén)odo,可使用get、delete、put方法進(jìn)行請(qǐng)求
@ns.route('/')
@ns.response(404, '未發(fā)現(xiàn)相關(guān)ETL任務(wù)')
@ns.param('id', 'ETL任務(wù)ID號(hào)')
class Todo(Resource):
@ns.doc('get_todo')
@ns.marshal_with(todo)
def get(self, id):
return DAO.get(id)

@ns.doc('delete_todo')
@ns.response(204, 'ETL任務(wù)已經(jīng)刪除')
def delete(self, id):
DAO.delete(id)
return '', 204

@ns.expect(todo)
@ns.marshal_with(todo)
def put(self, id):
return DAO.update(id, api.payload)

if __name__ == '__main__':
app.run(debug=True, port=8000) # 啟動(dòng)Web API服務(wù),端口為8000

(4)開(kāi)啟Web API服務(wù)。

通過(guò)命令“python ./5-5-WebAPI.py”啟動(dòng)Web API服務(wù),在瀏覽器中輸入“http://127.0.0.1:8000/”將出現(xiàn)如圖5-23所示的Web API服務(wù)請(qǐng)求方法列表。

圖2  WebAPI服務(wù)請(qǐng)求方法列表

2、抓取用網(wǎng)頁(yè)數(shù)據(jù)

Excel可以通過(guò)“數(shù)據(jù)”選項(xiàng)卡下的“自網(wǎng)站”功能抓取網(wǎng)頁(yè)數(shù)據(jù)。Python可以使用 requests 庫(kù)、Beautiful Soup包、Scrapy框架抓取網(wǎng)頁(yè)數(shù)據(jù)。

1.通過(guò)Excel抓取

單擊“數(shù)據(jù)”→“自其他源”→“自網(wǎng)站”功能。Excel可讀取的網(wǎng)頁(yè)數(shù)據(jù)有局限:動(dòng)態(tài)網(wǎng)頁(yè)數(shù)據(jù)無(wú)法自動(dòng)識(shí)別,非表格數(shù)據(jù)無(wú)法自動(dòng)識(shí)別。

(1)單擊“數(shù)據(jù)”→“自其他源”→“自網(wǎng)站”功能。

(2)確保在5.5.1節(jié)中編寫(xiě)的Web網(wǎng)站已經(jīng)開(kāi)啟。

(3)輸入網(wǎng)站URL地址“http://127.0.0.1:5000/”

單擊“高級(jí)”按鈕可配置更詳細(xì)的HTTP請(qǐng)求信息,然后單擊“確定”按鈕,如圖3所示。

圖3  配置要讀取網(wǎng)站的URL

(4)在“導(dǎo)航器”窗口中選擇導(dǎo)入數(shù)據(jù)。

如圖4所示,Excel自動(dòng)識(shí)別網(wǎng)頁(yè)中的表格數(shù)據(jù),選擇表名后單擊“加載”按鈕即可。

圖4  Excel自動(dòng)識(shí)別網(wǎng)頁(yè)中的表格數(shù)據(jù)

2.使用Python抓取

下面演示使用requests庫(kù)抓取整個(gè)網(wǎng)頁(yè)中的數(shù)據(jù),然后使用Beautiful Soup解析網(wǎng)頁(yè)。讀者可參考本書(shū)代碼素材文件“5-5-web.ipynb”進(jìn)行學(xué)習(xí)。

(1)通過(guò)requests讀取網(wǎng)頁(yè)數(shù)據(jù)。

import requests #導(dǎo)入requests包
url ='http://127.0.0.1:5000/'

strhtml= requests.get(url) #使用get方法請(qǐng)求網(wǎng)頁(yè)數(shù)據(jù)

(2)通過(guò)Beautiful Soup解析網(wǎng)頁(yè)。

from bs4 import BeautifulSoup

soup = BeautifulSoup(strhtml.text) # 將網(wǎng)頁(yè)內(nèi)容作為參數(shù),創(chuàng)建soup對(duì)象
table = soup.find('table') # 查找網(wǎng)頁(yè)中的table元素
table_body = table.find('tbody') # 查找table元素中的tbody元素
data = []
rows = table_body.find_all('tr') # 查找表中的所有tr元素

for row in rows: # 遍歷數(shù)據(jù)
cols = row.find_all('td')
cols = [ele.text.strip() for ele in cols]
data.append([ele for ele in cols if ele])
# 結(jié)果輸出:[[],
['小米', '女', '22'],['小明','男','23'],……

3、調(diào)用Web API服務(wù)

Excel可以通過(guò)“數(shù)據(jù)”選項(xiàng)卡下的“自網(wǎng)站”功能調(diào)用Web API服務(wù)。Python可以使用 requests 庫(kù)、Beautiful Soup包、Scrapy框架調(diào)用Web API獲取數(shù)據(jù)。

1.使用Excel調(diào)用

(1)確保5.5.1節(jié)中編寫(xiě)的Web API服務(wù)已經(jīng)開(kāi)啟。

(2)輸入Web API方法對(duì)應(yīng)的URL:http://127.0.0.1:8000/ExcelPythonTest/。

(3)處理返回的數(shù)據(jù)。

調(diào)用Web API服務(wù)后數(shù)據(jù)以JSON格式返回,按照5.4.3小節(jié)中介紹的方法處理JSON數(shù)據(jù)。

2.使用Python調(diào)用

使用requests庫(kù)調(diào)用Web API方法,然后對(duì)返回的JSON數(shù)據(jù)進(jìn)行處理,讀者可參考本書(shū)代碼素材文件“5-5-api.ipynb”進(jìn)行學(xué)習(xí)。

import requests    #導(dǎo)入requests包
url ='http://127.0.0.1:8000/ExcelPythonTest/'

strhtml= requests.get(url) #使用get方法獲取網(wǎng)頁(yè)數(shù)據(jù)

import pandas as pd

frame= pd.read_json(strhtml.text) #使用Pandas包中的read_json函數(shù)
print(frame)
#結(jié)果輸出:
id task
0 1 ETL-抽取數(shù)據(jù)操作
1 2 ETL-數(shù)據(jù)清洗轉(zhuǎn)換
2 3 ETL-數(shù)據(jù)加載操作

4、兩種方法對(duì)比

表1所示為Excel和Python抓取互聯(lián)網(wǎng)數(shù)據(jù)方法的對(duì)比。需要注意Excel從互聯(lián)網(wǎng)抓取數(shù)據(jù)的功能并不完善。

表1   Excel和Python抓取互聯(lián)網(wǎng)數(shù)據(jù)方法對(duì)比


文章名稱(chēng):使用Excel和Python從互聯(lián)網(wǎng)獲取數(shù)據(jù)
轉(zhuǎn)載來(lái)于:http://www.5511xx.com/article/djhegsg.html