完整的解决方案:使用 Excel 和 Python 从互联网获取数据

优采云 发布时间: 2022-09-22 08:14

  完整的解决方案:使用 Excel 和 Python 从互联网获取数据

  学习 Python 的人生太短了!

  互联网上有极其丰富的数据资源。使用Excel自动读取部分网页中的表格数据,使用Python编写爬虫程序读取网页内容。

  今天的文章主要分为两部分,一是通过Python构建数据网站,二是使用Excel和Python从写好的Web获取数据网站 .

  1、构建测试网站数据

  通过 Python Flask Web 框架分别构建一个 Web网站 和一个 Web API 服务。

  1.构建网络网站

  创建一个名为“5-5-WebTable.py”的新 Python 脚本来创建一个收录表格的简单网页。如果读者对构造方法不感兴趣,可以跳过以下代码,直接执行脚本“5-5-WebTable.py”打开网站。

  (1)安装烧瓶包。

  pip install flask

  (2)用表格构建网页。

  from flask import Flask

app = Flask(__name__)  # 创建Falsk Web应用实例

# 将路由“/”映射到table_info函数,函数返回HTML代码

@app.route('/')

def table_info():

    

    return """HTML表格实例,用于提供给Excel和Python读取

    

      用户信息表

        

            姓名

            性别

            年龄

        

        

            小米

            女

            22

        

        ……….

    """

if __name__ == '__main__':

    app.debug = True  # 启用调试模式

    app.run()  # 运行,网站端口默认为5000

  通过命令“python ./5-5-WebTable.py”启动网站,然后在浏览器中输入:5000/,就会出现如图1所示的网页内容。

  图 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)导入必要的库并初始化应用对象。

  from flask import Flask

# Api类是Web API应用的入口,需要用Flask应用程序初始化

from flask_restplus import Api

# Resource类是HTTP请求的资源的基类

from flask_restplus import Resource

# fields类用于定义数据的类型和格式

from flask_restplus import fields

app = Flask(__name__)  # 创建Falsk Web应用实例

# 在flask应用的基础上构建flask_restplus  Api对象

api = Api(app, version='1.0',

          title='Excel集成Python数据分析-测试用WebAPI',

          description='测试用WebAPI', )

# 使用namespace函数生成命名空间,用于为资源分组

ns = api.namespace('ExcelPythonTest', description='Excel与Python Web API测试')

# 使用api.model函数生成模型对象

todo = api.model('task_model', {

<p>

    &#39;id&#39;: fields.Integer(readonly=True,

                         description=&#39;ETL任务唯一标识&#39;),

    &#39;task&#39;: fields.String(required=True,

                          description=&#39;ETL任务详情&#39;)

})

</p>

  (3)Web API数据操作类,包括增删改查等方法。

  class TodoDAO(object):

    def __init__(self):

        self.counter = 0

        self.todos = []

    def get(self, id):

        for todo in self.todos:

            if todo[&#39;id&#39;] == id:

                return todo

        api.abort(404, "ETL任务 {} 不存在".format(id))

    def create(self, data):

        todo = data

        todo[&#39;id&#39;] = self.counter = self.counter + 1

        self.todos.append(todo)

        return todo

# 实例化数据操作,创建3条测试数据

DAO = TodoDAO()

DAO.create({&#39;task&#39;: &#39;ETL-抽取数据操作&#39;})

DAO.create({&#39;task&#39;: &#39;ETL-数据清洗转换&#39;})

DAO.create({&#39;task&#39;: &#39;ETL-数据加载操作&#39;})

  (4)为 Web API 构建路由图。

  HTTP资源请求类继承自Resource类,然后映射到不同的路由,指定可以使用HTTP方法。

  @ns.route(&#39;/&#39;)  # 路由“/”对应的资源类为TodoList,可使用get方法和post方法进行请求

class TodoList(Resource):

    @ns.doc(&#39;list_todos&#39;)  # @doc装饰器对应API文档的信息

    @ns.marshal_list_with(todo)  # @marshal_xxx装饰器对模型数据进行格式转换与输出

    def get(self):  # 定义get方法获取所有的任务信息

        return DAO.todos

    @ns.doc(&#39;create_todo&#39;)

    @ns.expect(todo)

    @ns.marshal_with(todo, code=201)

    def post(self):  # 定义post方法获取所有的任务信息

        return DAO.create(api.payload), 201

# 路由/对应的资源类为Todo,可使用get、delete、put方法进行请求

@ns.route(&#39;/&#39;)

@ns.response(404, &#39;未发现相关ETL任务&#39;)

@ns.param(&#39;id&#39;, &#39;ETL任务ID号&#39;)

class Todo(Resource):

    @ns.doc(&#39;get_todo&#39;)

    @ns.marshal_with(todo)

    def get(self, id):

        return DAO.get(id)

    @ns.doc(&#39;delete_todo&#39;)

    @ns.response(204, &#39;ETL任务已经删除&#39;)

    def delete(self, id):

        DAO.delete(id)

        return &#39;&#39;, 204

    @ns.expect(todo)

    @ns.marshal_with(todo)

    def put(self, id):

        return DAO.update(id, api.payload)

if __name__ == &#39;__main__&#39;:

    app.run(debug=True, port=8000)  # 启动Web API服务,端口为8000

  

  (4)打开 Web API 服务。

  通过命令“python ./5-5-WebAPI.py”启动Web API服务,在浏览器中输入“:8000/”,显示Web API服务请求方法列表如图5-23所示。

  图2 WebAPI服务请求方法列表

  2、网页数据抓取

  Excel可以通过“数据”选项卡下的“来自网站”功能抓取网页数据。 Python 可以使用 requests 库、Beautiful Soup 包和 Scrapy 框架来抓取 Web 数据。

  1.通过 Excel 抓取

  点击“数据”→“来自其他来源”→“来自网站”功能。 Excel能读取的网页数据有局限性:动态网页数据无法自动识别,非表格数据无法自动识别。

  (1)点击“数据”→“来自其他来源”→“来自网站”功能。

  (2)确保5.5.1部分中写的Web网站已开启。

  (3)输入网站URL地址“:5000/”

  点击“高级”按钮配置更详细的HTTP请求信息,然后点击“确定”按钮,如图3所示。

  图3 配置URL读取网站

  (4)在导航器窗口中选择导入数据。

  如图4所示,Excel自动识别网页中的表格数据,选择表格名称,点击“加载”按钮。

  图4 Excel自动识别网页中的表格数据

  2.用 Python 爬行

  下面的演示使用 requests 库从整个网页中获取数据,然后使用 Beautiful Soup 来解析网页。读者可以参考本书中的代码资料文件“5-5-web.ipynb”进行学习。

  (1)通过请求读取网页数据。

  import requests #导入requests包

url =&#39;http://127.0.0.1:5000/&#39;

strhtml= requests.get(url) #使用get方法请求网页数据

  (2)通过 Beautiful Soup 解析网页。

  from bs4 import BeautifulSoup

soup = BeautifulSoup(strhtml.text)  # 将网页内容作为参数,创建soup对象

table = soup.find(&#39;table&#39;)  # 查找网页中的table元素

table_body = table.find(&#39;tbody&#39;)  # 查找table元素中的tbody元素

data = []

rows = table_body.find_all(&#39;tr&#39;)  # 查找表中的所有tr元素

for row in rows:  # 遍历数据

    cols = row.find_all(&#39;td&#39;)

    cols = [ele.text.strip() for ele in cols]

data.append([ele for ele in cols if ele])

# 结果输出:[[],

[&#39;小米&#39;, &#39;女&#39;, &#39;22&#39;],[&#39;小明&#39;,&#39;男&#39;,&#39;23&#39;],……

  3、调用 Web API 服务

  Excel 可以通过“数据”选项卡下的“From网站”函数调用 Web API 服务。 Python 可以使用 requests 库、Beautiful Soup 包和 Scrapy 框架调用 Web API 获取数据。

  1.用Excel调用

  (1)确保5.5.1节中编写的Web API服务已启用。

  (2)输入Web API方法对应的URL::8000/ExcelPythonTest/.

  (3)处理返回的数据。

  调用Web API服务后,返回JSON格式的数据,按照5.4.3小节描述的方法处理JSON数据。

  2.使用 Python 调用

  使用 requests 库调用 Web API 方法,然后处理返回的 JSON 数据。读者可以参考本书中的代码资料文件“5-5-api.ipynb”进行学习。

  import requests    #导入requests包

url =&#39;http://127.0.0.1:8000/ExcelPythonTest/&#39;

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-数据加载操作

  4、两种方法的比较

  表 1 显示了用于抓取 Internet 数据的 Excel 和 Python 方法的比较。需要注意的是,Excel 从互联网上抓取数据的能力并不完美。

  表1 Excel和Python捕获Internet数据的方法比较

  解决方案:百度seo快速见效方法(移动跨境流量)

  做独立跨境电商网站的人经常问我,“谷歌SEO需要多长时间才能看到结果?”今天,Kenny 将在 2 分钟内为您解答所有疑惑。

  随着搜索引擎算法技术的成熟和越来越多的在线内容,在搜索页面中占据一席之地已经成为一个大工程。 SEO(搜索引擎优化)是通过优化 网站 内容以提高搜索引擎排名和曝光率的有机搜索实践。有效的 SEO 可以更好地向搜索引擎证明您的内容是用户最想要的搜索结果。下面我们总结了一些关于SEO的常见问题,希望能帮助您更好地理解和使用SEO。

  1.SEO优化的本质是什么?

  SEO的本质是根据搜索引擎的最新算法来改进你的内容,从而增加你的内容的曝光率。例如,只需对 关键词 的使用进行一些调整,原创内容就可以使您的 网站 的新搜索流量增加一倍以上。但不要低估翻倍的新搜索流量。据统计,78%的有目的的搜索可以实现购买转化。

  

  2.一般多久可以看到SEO的结果?

  这个问题的答案是个案,但好的 SEO 通常需要大约六个月的时间才能得到回报。当然,也有个别站长回应称,用一些“技巧”可以在两周内看到优化的效果,但从长远来看,速度重于质量可能会带来网站的负面影响,因为谷歌可能会将 网站 视为垃圾邮件。一旦被谷歌搜索引擎当成垃圾邮件,网站的排名就很难提升了,应该尽量避免。

  3.为什么SEO优化的结果需要这么长时间才能看到?

  简单来说,就是因为搜索引擎算法技术的成熟。出现在搜索结果的第一页不再只是网站上的一堆关键词。在这个阶段,想要通过好的优化策略达到满意的搜索结果排名,需要从多方面入手。受趋势和搜索趋势的影响,很多时候 SEO 已经成为一个不断适应的过程,其中包括识别受众和对客户偏好进行关键词 研究。同时,您的网站域名年龄、入站链接和网站权限也与您的搜索排名密切相关。建立权限和接收入站链接取决于用户活动,搜索引擎算法和谷歌本身都需要一段时间来检索和发现用户活动的网站变化,从而延长了SEO的有效性。

  4.精通SEO需要多少钱?

  

  截至2020年,美国大部分SEO服务月费为750-7000美元(主要变量为页数网站/更新速度/所需服务),一般来说好的SEO专家的平均费用每小时 80-200 美元。

  5. SEO优化后,是否需要经常查看网站数据?

  是的,SEO 是一个不断变化的领域。客户感兴趣的关键词和内容会随着当前的趋势和时事发生变化,而搜索引擎的算法也在不断变化,因此及时更新SEO策略非常重要。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线