今天的文章主要分为两部分,一是使用Python搭建数据网站,二是使用Excel和Python从书面Web获取数据地点。1.建立网站数据进行测试。通过PythonFlaskWeb框架构建Web网站和WebAPI服务。1.建立一个网站创建一个名为“5-5-WebTable.py”的新Python脚本来创建一个包含表格的简单网页。如果读者对构造方法不感兴趣,可以跳过下面的代码,直接执行脚本“5-5-WebTable.py”打开网站。(1)安装烧瓶包。pipinstallflask(2)构建一个包含表格的网页。fromflaskimportFlaskapp=Flask(__name__)#创建一个FalskWeb应用实例#将路由“/”映射到table_info函数,函数返回HTML代码@app.route('/')deftable_info():return"""
HTML表格示例,用于提供Excel和Python读取
用户信息表Name | 性别 | 年龄 |
---|
我 | 女 | 22 |
…………."""if__name__=='__main__':app.debug=True#启用调试模式app.run()#运行,网站端口为5000by默认通过命令“python./5-5-WebTable.py”启动网站,然后在浏览器中输入http://127.0.0.1:5000/,会出现如图1所示的网页内容.图1用Flask搭建的测试网站2.搭建WebAPI服务新建Python脚本,命名为“5-5-WebAPI.py”,使用flask_restplus包搭建WebAPI服务,如果读者不感兴趣吨构造方法,可以跳过以下代码,直接执行脚本“5-5-WebAPI.py”开启WebAPI服务。(1)安装flask_restplus包。pipinstallflask-restplus(2)导入必要的库并初始化应用对象。fromflaskimportFlask#Api类是WebAPI应用的入口,需要用Flask应用程序初始化fromflask_restplusimportApi#资源类是HTTP请求资源的基类fromflask_restplusimportResource#fields类定义来自flask_restplus的数据类型和格式importfieldsapp=Flask(__name__)#创建一个FalskWeb应用实例#在flask应用的基础上构建flask_restplusApi对象api=Api(app,version='1.0',title='Excel集成Python数据分析-用于测试的WebAPI',description='用于测试的WebAPI',)#使用命名空间函数生成用于分组资源的命名空间ns=api.namespace('ExcelPythonTest',description='ExcelandPythonWebAPI测试')#使用api.model函数生成模型对象todo=api.model('task_model',{'id':fields.Integer(readonly=True,description='ETL任务唯一标识符'),'task':fields.String(required=True,描述iption='ETL任务详情')})(3)WebAPI数据操作类,包括增删改查等方法。classTodoDAO(object):def__init__(self):self.counter=0self.todos=[]defget(self,id):fortodoinself.todos:iftodo['id']==id:returntodoapi.abort(404,"ETL任务{}不存在".format(id))defcreate(self,data):todo=datatodo['id']=self.counter=self.counter+1self.todos.append(todo)returntodo#实例化数据操作,创建3条测试数据DAO=TodoDAO()DAO.create({'task':'ETL-提取数据操作'})DAO.create({'task':'ETL-数据清洗转换'})DAO.create({'task':'ETL-数据加载操作'})(4)构建WebAPI的路由映射。HTTP资源请求类继承自Resource类,然后映射到不同的路由,同时指定可用的HTTP方法。@ns.route('/')#路由“/”对应的资源类是TodoList,可以使用get方法和post方法请求classTodoList(Resource):@ns.doc('list_todos')#@doc装饰器API文档对应的信息@ns.marshal_list_with(todo)#@marshal_xxx装饰器转换模型数据的格式并输出defget(self):#定义get方法获取所有任务信息returnDAO.todos@ns.doc('create_todo')@ns.expect(todo)@ns.marshal_with(todo,code=201)defpost(self):#定义post方法获取所有任务信息returnDAO.create(api.payload),201#Routing/对应的资源类是Todo,可以使用get、delete、put方法请求@ns.route('/')@ns。response(404,'NorelatedETLtaskfound')@ns.param('id','ETLtaskIDnumber')类Todo(Resource):@ns.doc('get_todo')@ns.marshal_with(todo)defget(self,id):返回DAO。get(id)@ns.doc('delete_todo')@ns.response(204,'ETL任务已被删除')defdelete(self,id):DAO.delete(id)return'',204@ns.expect(todo)@ns.marshal_with(todo)defput(self,id):returnDAO.update(id,api.payload)如果__name__=='__main__':app.run(debug=True,port=8000)#启动WebAPI服务,端口为8000(4)通过命令“python./5-5-WebAPI.py”启动WebAPI服务,输入“http://127.0.0.1:8000/”会显示如图5-23所示的WebAPI服务请求方法列表。图2WebAPI服务请求方式列表2.网页数据抓取Excel可以通过“数据”选项卡下的“从网站”功能抓取网页数据。Python可以使用requests库、BeautifulSoup包、Scrapy框架来爬取网页数据。1.爬取Excel,点击“数据”→“来自其他来源”→“来自网站”功能。Excel可以读取的网页数据有局限性:不能自动识别动态网页数据,不能自动识别非表格数据。(1)点击“数据”→“来自其他来源”→“来自网站”功能。(2)确认5.5.1中写的网站已经打开。(3)输入网站URL地址“http://127.0.0.1:5000/”点击“高级”按钮配置更详细的HTTP请求信息,然后点击“确定”按钮,如图3所示。图3配置读取网站的URL(4)在“Navigator”窗口中选择ImportData。如图4所示,Excel自动识别网页中的表格数据,选择表格名称,点击“加载”按钮。图4Excel自动识别网页中的表格数据2.使用Python抓取下面演示使用requests库抓取整个网页中的数据,然后使用BeautifulSoup解析网页。读者可以参考本书的代码素材文件“5-5-web.ipynb”进行学习。(1)通过requests读取网页数据。importrequests#导入requests包url='http://127.0.0.1:5000/'strhtml=requests.get(url)#使用get方法请求网页数据(2)通过BeautifulSoup解析网页。frombs4importBeautifulSoupsoup=BeautifulSoup(strhtml.text)#以网页内容为参数创建汤对象table=soup.find('table')#在网页中查找table元素table_body=table.find('tbody')#查找表元素中的tbody元素data=[]rows=table_body.find_all('tr')#查找表中所有tr元素forrowinrows:#遍历数据cols=row.find_all('td')cols=[ele.text.strip()foreleincols]data.append([eleforeleincolsifele])#结果输出:[[],['小米','female','22'],['小明','M','23'],...3.调用WebAPI服务Excel可以通过“Data”下的“FromWebsite”功能调用WebAPI服务“标签。Python可以使用requests库、BeautifulSoup包、Scrapy框架调用WebAPI获取数据。1、使用Excel调用(1)确保5.5.1节中编写的WebAPI服务已经启动。(2)输入WebAPI方法对应的URL:http://127.0.0.1:8000/ExcelPythonTest/。(3)处理返回数据。调用WebAPI服务后返回JSON格式的数据,JSON数据按照5.4.3节描述的方法进行处理。2、使用Python调用requests库的WebAPI方法,然后处理返回的JSON数据。读者可以参考本书的代码素材文件“5-5-api.ipynb”进行学习。importrequests#导入requests包url='http://127.0.0.1:8000/ExcelPythonTest/'strhtml=requests.get(url)#使用get方法获取网页数据importpandasaspdframe=pd.read_json(strhtml.text)#使用Pandas包中的read_json函数print(frame)#结果输出:idtask01ETL-提取数据操作12ETL-数据清洗转换23ETL-数据加载操作4.两种方式对比表1是Excel与Python抓取互联网数据方法的对比。需要注意的是,Excel从网上抓取数据的功能并不完善。表1Excel和Python爬取互联网数据方法对比