【小白必看】Python爬虫数据处理与可视化
  LyJBRSvfEdxZ 2023年11月02日 57 0

在这里插入图片描述

前言

本文分析了一段Python代码,主要功能是从网页中提取数据并进行数据处理与可视化。代码通过发送HTTP请求获取网页内容,使用XPath解析网页内容,并提取所需数据。然后使用pandas库构建数据结构,对数据进行统计与分组,并使用matplotlib库进行数据可视化。最后,对数据进行筛选、排序和保存操作。这段代码适用于需要从网页中提取数据并进行进一步处理与展示的场景。

excel 效果图

在这里插入图片描述

导入模块

在这里插入图片描述

import requests
from lxml import etree
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
  • 使用requests模块发送HTTP请求
  • 使用lxml模块处理HTML文档
  • 使用pandas库进行数据处理
  • 使用matplotlib库进行数据可视化
  • 使用FontProperties类设置自定义字体

发送HTTP请求获取网页内容

在这里插入图片描述

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
resp = requests.get('https://www.qb5.vip/top/allvisit/', headers=headers)
  • 设置请求头User-Agent,模拟浏览器发送请求
  • 使用requests.get()方法发送GET请求,获取网页内容,并将结果保存在resp变量中

解析网页内容

在这里插入图片描述

e = etree.HTML(resp.text)
  • 使用etree.HTML()方法对网页内容进行解析,得到一个可操作的XPath对象e

提取数据

在这里插入图片描述

types = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[1]/text()')
names = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[2]/a/text()')
authors = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[3]/text()')
counts = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[5]/text()')
nums = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[6]/text()')
  • 使用XPath语法从解析后的网页内容中提取所需数据,分别保存在typesnamesauthorscountsnums变量中

构建数据结构

在这里插入图片描述

datas = []
for t, name, author, count, num in zip(types, names, authors, counts, nums):
    datas.append([t, name, author, count[:-1], num])

df = pd.DataFrame(datas, columns=['类型', '书名', '作者', '字数', '推荐'])
df['推荐'] = df['推荐'].astype('int')
  • 使用循环将提取到的数据按照一定的格式构建为二维列表datas
  • 使用pandas.DataFrame()方法将二维列表转换为DataFrame对象df,每列分别命名为'类型''书名''作者''字数''推荐'
  • '推荐'列的数据类型转换为整型

数据统计与分组

在这里插入图片描述

df.describe()

df.groupby('类型').count()
  • 使用describe()方法对数据进行统计描述,包括计数、均值、标准差、最小值、最大值等
  • 使用groupby()方法按'类型'列进行分组,并使用count()方法统计每个分组的数量

数据可视化

font_path = 'caisemenghuanjingyu.ttf'  # 替换为自定义字体文件的路径
custom_font = FontProperties(fname=font_path)

df.类型.hist()
plt.xlabel('类型', fontproperties=custom_font)
plt.show()
  • 设置自定义字体的路径,并创建FontProperties对象custom_font
  • 使用hist()方法绘制'类型'列的直方图
  • 使用xlabel()方法设置x轴标签,并使用自定义字体
  • 使用show()方法显示图形

数据筛选与排序

df[df.类型 == '玄幻魔法'].sort_values(by='推荐')
  • 使用布尔索引筛选出'类型''玄幻魔法'的行,并按'推荐'列进行升序排序

数据保存

df = pd.DataFrame(datas, columns=['类型', '书名', '作者', '字数', '推荐'])
df.to_excel('data.xlsx', index=False)
  • 将之前构建的二维列表datas重新转换为DataFrame对象df
  • 使用to_excel()方法将DataFrame保存为Excel文件,文件名为data.xlsx,不包含索引列

完整代码

import requests  # 导入requests库,用于发送HTTP请求
from lxml import etree  # 导入etree模块,用于解析HTML文档
import pandas as pd  # 导入pandas库,用于数据处理
import matplotlib.pyplot as plt  # 导入matplotlib库,用于数据可视化
from matplotlib.font_manager import FontProperties  # 导入FontProperties类,用于设置字体

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
# 设置请求头,模拟浏览器发送请求的User-Agent

resp = requests.get('https://www.qb5.vip/top/allvisit/', headers=headers)
# 使用requests库发送GET请求,获取指定网页的内容

e = etree.HTML(resp.text)
# 使用etree.HTML()方法解析网页内容,得到一个可操作的XPath对象

types = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[1]/text()')
# 使用XPath语法提取网页中的书籍类型数据

names = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[2]/a/text()')
# 使用XPath语法提取网页中的书籍名称数据

authors = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[3]/text()')
# 使用XPath语法提取网页中的作者数据

counts = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[5]/text()')
# 使用XPath语法提取网页中的字数数据

nums = e.xpath('//div[@id="articlelist"]/ul[2]/li/span[6]/text()')
# 使用XPath语法提取网页中的推荐数数据

datas = []
# 创建一个空列表,用于存储提取到的数据

for t, name, author, count, num in zip(types, names, authors, counts, nums):
    # 使用zip()函数将多个列表按元素进行配对
    datas.append([t, name, author, count[:-1], num])
    # 将每个配对的数据以列表形式添加到datas列表中,
    # count[:-1]表示去掉count末尾的字符(单位)

df = pd.DataFrame(datas, columns=['类型', '书名', '作者', '字数', '推荐'])
# 使用pandas库将二维列表datas转换为DataFrame对象df,并为每一列命名

df['推荐'] = df['推荐'].astype('int')
# 将推荐列的数据类型转换为整型

df.describe()
# 使用describe()方法获取数据的统计描述信息

df.groupby('类型').count()
# 使用groupby()方法按照类型列进行分组,然后使用count()方法统计每个分组中的数量

font_path = 'caisemenghuanjingyu.ttf'  # 替换为自定义字体文件的路径
# 设置自定义字体的路径

custom_font = FontProperties(fname=font_path)
# 创建FontProperties对象,用于设置字体样式

df.类型.hist()
# 绘制类型列的直方图

plt.xlabel('类型', fontproperties=custom_font)
# 设置x轴标签,并使用自定义字体

plt.show()
# 显示图形

df[df.类型 == '玄幻魔法'].sort_values(by='推荐')
# 对df进行筛选,只保留类型为'玄幻魔法'的行,并按照推荐列进行升序排序

df = pd.DataFrame(datas, columns=['类型', '书名', '作者', '字数', '推荐'])
# 重新将二维列表datas转换为DataFrame对象df,并为每一列命名

df.to_excel('data.xlsx', index=False)
# 将DataFrame保存为Excel文件,文件名为data.xlsx,不包含索引列

结束语

本文分析了一段Python代码,其主要功能是从网页中提取数据并进行数据处理和可视化。代码利用requests模块发送HTTP请求获取网页内容,通过lxml模块解析HTML文档,并使用XPath语法提取数据。然后使用pandas库构建数据结构,对数据进行统计和分组。接下来,通过matplotlib库实现数据可视化,绘制直方图展示不同类型的数据分布情况。此外,代码还涉及数据筛选、排序和保存等操作,以满足更多需求。该代码适用于需要从网页中提取数据并进行进一步处理和展示的场景,为数据分析和可视化提供了一种简便的方法。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Fnpj8K6xSCR   2024年05月17日   101   0   0 Python
  xKQN3Agd2ZMK   2024年05月17日   70   0   0 Python
LyJBRSvfEdxZ