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

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解析器,我们可以从网页中提取有用的信息,并用于数据分析、数据挖掘和其他数据处理任务。

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹山全栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值