首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【小白必看】Python爬虫数据处理与可视化

【小白必看】Python爬虫数据处理与可视化

作者头像
全栈若城
发布2024-02-29 19:33:34
发布2024-02-29 19:33:34
1.4K0
举报
文章被收录于专栏:若城技术专栏若城技术专栏

前言

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

excel 效果图

导入模块

代码语言:javascript
复制
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请求获取网页内容

代码语言:javascript
复制
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变量中

解析网页内容

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

提取数据

代码语言:javascript
复制
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变量中

构建数据结构

代码语言:javascript
复制
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,每列分别命名为'类型''书名''作者''字数''推荐'
  • '推荐'列的数据类型转换为整型

数据统计与分组

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
df.describe()

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

数据可视化

代码语言:javascript
复制
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()方法显示图形

数据筛选与排序

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

数据保存

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

完整代码

代码语言:javascript
复制
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库实现数据可视化,绘制直方图展示不同类型的数据分布情况。此外,代码还涉及数据筛选、排序和保存等操作,以满足更多需求。该代码适用于需要从网页中提取数据并进行进一步处理和展示的场景,为数据分析和可视化提供了一种简便的方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • excel 效果图
  • 导入模块
  • 发送HTTP请求获取网页内容
  • 解析网页内容
  • 提取数据
  • 构建数据结构
  • 数据统计与分组
  • 数据可视化
  • 数据筛选与排序
  • 数据保存
  • 完整代码
  • 结束语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档