python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv

2023-11-10

python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv

在这篇技术博客中,我将介绍如何从头开始构建一个基于XPath的HTML解析爬取到的美食数据并可视化,并将其应用于一个具体的例子。我亲自写的完整代码+csv数据链接已放,
https://download.csdn.net/download/qq_22593423/87998282

介绍

在Web开发中,我们经常需要从网页中提取有用的信息。而HTML是一种常见的数据格式,它包含了网页的结构和内容。为了从HTML中提取信息,我们需要使用一种解析器来解析HTML,并使用一些技术来定位我们感兴趣的元素。

在本文中,我们将采用XPath作为解析HTML的技术。XPath是一种用于在XML文档中定位节点的语言,同时也可以用于HTML解析。它提供了一种简洁而强大的方式来定位HTML元素,并提取其属性或文本。

解析HTML内容

让我们首先看一下代码中的parse_html函数。这个函数接受一个HTML内容作为参数,并利用XPath表达式从中提取有关食物数据的信息。下面是函数的具体实现:

import re
from lxml import etree

def parse_html(content):
    # 解析HTML
    html = etree.HTML(content)
    
    # 使用XPath定位菜名
    names = html.xpath('//*[@class="listtyle1"]/a/div/div/div[1]/strong/text()')
    
    # 使用XPath定位评论数和人气数
    comments_and_views = html.xpath('//*[@class="listtyle1"]/a/div/div/div[1]/span/text()')
    
    # 使用正则表达式提取评论数和人气数
    comments, views = [], []
    for item in comments_and_views:
        match = re.search(r'(\d+)\s+评论\s+(\d+)\s+人气', item)
        if match:
            comments.append(int(match.group(1)))
            views.append(int(match.group(2)))
        else:
            comments.append(None)
            views.append(None)
    
    # 使用XPath定位发布者
    names1 = html.xpath('//*[@class="listtyle1"]/a/div/div/div[1]/em/text()')
    
    # 使用XPath定位图片链接
    images = html.xpath('//*[@class="listtyle1"]/a/img/@src')
    
    # 将所有信息打包成元组
    return zip(names, images, views, comments, names1)

在这个函数中,我们首先使用etree.HTML函数将HTML内容解析成一个可操作的对象。然后,利用XPath表达式定位到我们感兴趣的元素,并提取相关的数据。

对于菜名、评论数和人气数,我们使用xpath函数来定位相应的元素,并使用text方法来提取其文本内容。

对于评论数和人气数,我们使用正则表达式来提取其中的数字,并将其转换成整数类型。如果无法匹配到数字,则将其设为None

最后,我们使用zip函数将所有的信息打包成一个元组,并返回结果。

保存数据到CSV文件

接下来,让我们看一下代码中的save_data函数。这个函数接受一个包含食物数据的可迭代对象,并将其保存到一个CSV文件中。下面是函数的具体实现:

import csv

def save_data(foods):
    # 打开CSV文件,使用追加模式写入数据,并指定编码和换行符
    with open('foods.csv', mode='a', encoding='utf-8-sig', newline='') as stream:
        writer = csv.writer(stream)
        
        # 写入表头
        writer.writerow([
            '菜名',
            '人气',
            '评论',
            '发布者',
            '图片',
        ])
        
        # 写入数据
        for name, image, view, comment, name1 in foods:
            writer.writerow([
                name,
                view,
                comment,
                name1,
                image,
            ])

在这个函数中,我们首先使用open函数打开一个名为foods.csv的文件,并利用mode='a'参数来指定以追加模式写入数据。我们还通过encoding='utf-8-sig'参数指定编码为UTF-8,并使用newline=''参数来设置换行符。

然后,我们使用csv.writer创建一个写入器对象,并将其关联到文件流上。我们使用writer.writerow方法写入CSV文件的表头,也就是列名。

接着,我们使用一个循环来遍历食物数据,并将每个数据项写入CSV文件。我们使用writer.writerow方法将食物的菜名、人气数、评论数、发布者和图片链接写入CSV文件的一行。

最后,我们关闭文件流,完成数据写入操作。

总结

通过本文,介绍了从零开始构建基于XPath的HTML解析器的过程,并将其应用于一个具体的例子。我们使用XPath来定位HTML元素,并提取所需的信息。然后,我们将提取的数据保存到一个CSV文件中。这个过程展示了如何使用Python的lxml库和csv模块来解析HTML并处理数据。

希望本文能够帮助读者理解如何使用XPath进行HTML解析,以及如何将提取的数据保存到CSV文件中。通过利用HTML解析器,我们可以从网页中提取有用的信息,并用于数据分析、数据挖掘和其他数据处理任务。

完整代码和可视化代码都在资源链接中,详细说明如上所示,读者可以根据需要进行参考和使用。希望本文对读者有所帮助,谢谢评论以及资源下载!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv 的相关文章

  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • 如何计算numpy数组中元素的频率?

    我有一个 3 D numpy 数组 其中包含重复的元素 counterTraj shape 13530 1 1 例如 counterTraj 包含这样的元素 我只显示了几个元素 array 136 129 130 103 102 101 我
  • 以同步方式使用 FastAPI,如何获取 POST 请求的原始正文?

    在中使用 FastAPIsync not async模式 我希望能够接收 POST 请求的原始 未更改的正文 我能找到的所有例子都显示async代码 当我以正常同步方式尝试时 request body 显示为协程对象 当我通过发布一些内容来
  • 按百分比设置 bootstrap 模态身高

    我正在尝试制作一个带有主体的模态 当内容变得太大时 该主体会滚动 但是 我希望模式能够响应屏幕尺寸 当我将最大高度设置为 40 时 它没有任何效果 但是 如果我将最大高度设置为 400px 它会按预期工作 但不会响应 我确信我只是错过了一些
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • 将 JSON 对象传递给带有请求的 url

    所以 我想利用 Kenneth 的优秀请求模块 https github com kennethreitz requests 在尝试使用时偶然发现了这个问题自由库API http wiki freebase com wiki API 基本上
  • 如何使用列表作为pandas数据框中的值?

    我有一个数据框 需要列的子集包含具有多个值的条目 下面是一个带有 运行时 列的数据框 其中包含程序在各种条件下的运行时 df condition a runtimes 1 1 5 2 condition b runtimes 0 5 0 7
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • JSTL 在循环中每 5 个字段集创建一个新行

    您好 我目前正在迭代并在表中显示字段集列表 为了让布局变得更得体一些 我想在每次循环到达第五个字段集时创建一个新行 谢谢 JSP div class det table class det tr td td tr table div
  • 当鼠标悬停在上面时,intellisense vscode 不显示参数或文档

    我正在尝试将整个工作流程从 Eclipse 和 Jupyter Notebook 迁移到 VS Code 我安装了 python 扩展 它应该带有 Intellisense 但它只是部分更糟糕 我在输入句点后收到建议 但当将鼠标悬停在其上方
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas

随机推荐

  • qt的visible hide 等布局隐藏函数

    https blog csdn net dbzhang800 article details 6300021
  • xpath手册

    XPath手册 源于ZVON AAA AAA CCC AAA DDD BBB BBB DDD BBB AAA CCC DDD BBB AAA BBB 1 AAA BBB last id BBB id BBB name BBB BBB not
  • 手机驱动工程师门,准备转行了吗

    前80后从事手机研发的年轻人目前已经人到中年后了 时间过得真的很快 从2004左右开始红火的山寨手机 已经耗去了你们青春 你们中的不少人也从中过得不错的收益 但随着iPhone的出现 智能手机视乎在一瞬间就冒了出来 大佬Nokia都没有缓过
  • 交换机与路由器技术-05-路由器工作原理

    目录 一 路由器的工作原理 1 1 回顾交换机的工作原理 1 2 回顾路由器相关知识 1 3 网络层IP数据包格式 二 路由器工作原理 2 1 路由 2 2 路由器工作模式 2 3 路由表 2 4 静态路由 2 5 动态路由 2 6 分层次
  • 独占指针 std::unique_ptr

    学习智能指针之前需要知道的 智能指针是原始指针的封装 在头文件
  • Unity延迟,协程

    Unity 学习笔记 主要记录一些重要以及易错的知识点 笔记目录 Unity 学习笔记 1 unity延时方法Invoke和InvokeRepeating 1 Unity Time类 2 Invoke 延迟后调用一次 3 InvokeRep
  • 关于看病报销额度

    1 社保医保 职工医保 统筹账户 在住院时可以报销大额医疗费用 个人账户 可以用来看门诊 药店刷卡买药等 城乡居民医保是没有个人账户的 所以不能用来刷卡买药等 只能用作报销 医保卡门诊每年报销400可以买药用的 参保居民在门诊统筹定点医疗机
  • wps如何自己制作流程图_怎么制作流程图,wps自动生成流程图方法

    在职场中我们要会熟练使用各种办公软件 才能提高我们的工作效率 下面我为大家分享三种制作流程图的方法 非常简单哦 一 在Word中制作流程图 1 首先点击 插入 再点击 形状 点击新建绘图画布 就出来画布了 2 再点击 插入 形状 会出现流程
  • IDEA配置tomcat并发布web项目的步骤

    目录 一 配置Tomcat具体步骤 1 创建一个项目 2 新建一个模块 3 添加框架支持 4 在IDEA 中部署工程到Tomcat 上运行 5 运行web程序 二 Tomcat服务器 1 Tomcat服务器介绍 2 Tomcat目录的介绍
  • 上海万应云数科——全国企业大数据信息底座

    上海万应云数字科技有限公司 基于企业全量数据库 重点具有如下几方面能力 1 量化管理 量化企业现状 全量信息 工商 行政 司法 知识产权 上市 经营等 量化企业标识 特征信息 五型经济 资质 产 业链 业务方向 信用 风险 量化企业发展 评
  • 【磕盐随记】关于位姿估计中的左导和右导,局部扰与全局扰动

    昨天写了一个点面ICP的小程序 用于评估退化性 我自己加一个扰动当作先验状态x0 R0 然后试图让扰动后的点云帧与地图匹配 以恢复扰动前的位置 原理很简单 只需要用高斯牛顿法求解 然后每次迭代重新搜索关联匹配就行了 但是 在这一过程中 我发
  • 【三分钟教程】docker快速部署nginx服务

    1 下载nginx镜像 root localhost docker pull nginx 1 14 1 14 Pulling from library nginx 27833a3ba0a5 Pull complete 0f23e58bd0b
  • 【Elasticsearch】学好Elasticsearch系列-Mapping

    本文已收录至Github 推荐阅读 Java随想录 先看后赞 养成习惯 点赞收藏 人生辉煌 文章目录 Mapping 的基本概念 查看索引 Mapping 字段数据类型 数字类型 基本数据类型 Keywords 类型 Dates 时间类型
  • Python3中出现'gbk' codec can't encode characte的成功解决方法?

    亲身测试 所遇问题完全解决 2018 07 08 21 37 环境 windows Pycharm python3 6 2 使用Python写文件的时候 或者将网络数据流写入到本地文件的时候 大部分情况下会遇到 UnicodeEncodeE
  • 爱心css特效,CSS3 SVG点击爱心散开动画特效

    margin 0 padding 0 box sizing border box position relative svg like position fixed z index 10 top calc 50vh 160px left c
  • C#_基础题1-10套

    one 1 用户输入一个整数 用if else判断是偶还是奇 2 输入一个字母 判断是大写还是小写字母 3 求1 99所有奇数的和 用while语句 4 用户输入三个整数 将最大数和最小数输出 5 输入三个数 按从小到大的顺序排列 6 将1
  • 【JavaWeb】 CSS基础 学习笔记

    CSS 一 CSS选择器 标签名选择器 id选择器 class 选择器 类选择器 组合选择器 二 常用样式 字体颜色 宽度 和 高度 背景颜色 字体样式 红色 1 像素实线边框 DIV 居中 文本居中 超连接去下划线 表格细线 列表去除修饰
  • 2022-02-08 读书笔记:《精通特征工程》1 基础特征工程

    精通特征工程 速读学习1 基础特征工程 该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 time 2022 02 08 学习目标 通过Python示例掌握特征工程基本原则和实际应用 增强机器学习算法效果 目录 第1
  • 每日一题(最长回文长度字符串)

    题目要求 给你一个字符串 s 找到 s 中最长的回文子串 原串中连续不断的串 如果字符串的反序与原始字符串相同 则该字符串称为回文字符串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 输入 s
  • python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv

    python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv 在这篇技术博客中 我将介绍如何从头开始构建一个基于XPath的HTML解析爬取到的美食数据并可视化 并将其应用于一个具体的例子 我亲自写的完整代码 c