前言
本文分析了一段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语法从解析后的网页内容中提取所需数据,分别保存在
types
、names
、authors
、counts
、nums
变量中
构建数据结构
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,text,爬虫,df,小白必,使用,font,数据,datas From: https://blog.51cto.com/u_14522592/7918847本文分析了一段Python代码,其主要功能是从网页中提取数据并进行数据处理和可视化。代码利用requests模块发送HTTP请求获取网页内容,通过lxml模块解析HTML文档,并使用XPath语法提取数据。然后使用pandas库构建数据结构,对数据进行统计和分组。接下来,通过matplotlib库实现数据可视化,绘制直方图展示不同类型的数据分布情况。此外,代码还涉及数据筛选、排序和保存等操作,以满足更多需求。该代码适用于需要从网页中提取数据并进行进一步处理和展示的场景,为数据分析和可视化提供了一种简便的方法。