今天的文章主要分为两个部分,一是用通过Python构建一个数据网站,二是分别使用Excel和Python从编写的Web网站上获取数据。
通过Python Flask Web框架分别构建一个Web网站和一个Web API服务。
新建一个名为“5-5-WebTable.py”的Python脚本,创建一个包含表格的简单网页。如果读者对构建方法不感兴趣,可跳过以下代码,直接执行脚本“5-5-WebTable.py”打开网站。
(1)安装flask包。
图1 使用Flask构建的测试网站2.构建Web API服务新建一个名为“5-5-WebAPI.py”的Python脚本,使用flask_restplus包构建Web API服务。如果读者对构建方法不感兴趣,可跳过以下代码,直接执行脚本“5-5-WebAPI.py”打开Web API服务。(1)安装flask_restplus包。pip install flask-restplus
(2)导入必要的库与初始化应用对象。
图2 WebAPI服务请求方法列表2、抓取用网页数据Excel可以通过“数据”选项卡下的“自网站”功能抓取网页数据。Python可以使用 requests 库、Beautiful Soup包、Scrapy框架抓取网页数据。1.通过Excel抓取单击“数据”→“自其他源”→“自网站”功能。Excel可读取的网页数据有局限:动态网页数据无法自动识别,非表格数据无法自动识别。(1)单击“数据”→“自其他源”→“自网站”功能。(2)确保在5.5.1节中编写的Web网站已经开启。(3)输入网站URL地址“http://127.0.0.1:5000/”单击“高级”按钮可配置更详细的HTTP请求信息,然后单击“确定”按钮,如图3所示。图3 配置要读取网站的URL(4)在“导航器”窗口中选择导入数据。如图4所示,Excel自动识别网页中的表格数据,选择表名后单击“加载”按钮即可。图4 Excel自动识别网页中的表格数据2.使用Python抓取下面演示使用requests库抓取整个网页中的数据,然后使用Beautiful Soup解析网页。读者可参考本书代码素材文件“5-5-web.ipynb”进行学习。(1)通过requests读取网页数据。import requests #导入requests包 url ='http://127.0.0.1:5000/' strhtml= requests.get(url) #使用get方法请求网页数据
(2)通过Beautiful Soup解析网页。
from bs4 import BeautifulSoup soup = BeautifulSoup(strhtml.text)# 将网页内容作为参数,创建soup对象 table = soup.find('table')# 查找网页中的table元素 table_body = table.find('tbody')# 查找table元素中的tbody元素 data = [] rows = table_body.find_all('tr')# 查找表中的所有tr元素 for row in rows:# 遍历数据 cols = row.find_all('td') cols = [ele.text.strip() for ele in cols] data.append([ele for ele in cols if ele]) # 结果输出:[[], ['小米', '女', '22'],['小明','男','23'],……
Excel可以通过“数据”选项卡下的“自网站”功能调用Web API服务。Python可以使用 requests 库、Beautiful Soup包、Scrapy框架调用Web API获取数据。
(1)确保5.5.1节中编写的Web API服务已经开启。
(2)输入Web API方法对应的URL:http://127.0.0.1:8000/ExcelPythonTest/。
(3)处理返回的数据。
调用Web API服务后数据以JSON格式返回,按照5.4.3小节中介绍的方法处理JSON数据。
使用requests库调用Web API方法,然后对返回的JSON数据进行处理,读者可参考本书代码素材文件“5-5-api.ipynb”进行学习。
import requests#导入requests包 url ='http://127.0.0.1:8000/ExcelPythonTest/' strhtml= requests.get(url)#使用get方法获取网页数据 import pandas as pd frame= pd.read_json(strhtml.text)#使用Pandas包中的read_json函数 print(frame) #结果输出: id task 0 1 ETL-抽取数据操作 1 2 ETL-数据清洗转换 2 3 ETL-数据加载操作
表1所示为Excel和Python抓取互联网数据方法的对比。需要注意Excel从互联网抓取数据的功能并不完善。
表1 Excel和Python抓取互联网数据方法对比