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解析器,我们可以从网页中提取有用的信息,并用于数据分析、数据挖掘和其他数据处理任务。
完整代码和可视化代码都在资源链接中,详细说明如上所示,读者可以根据需要进行参考和使用。希望本文对读者有所帮助,谢谢评论以及资源下载!