首页 > 编程语言 >【小白必看】Python爬虫数据处理与可视化

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

时间:2023-10-18 16:08:10浏览次数:53  
标签:Python text 爬虫 df 小白必 使用 font 数据 datas

在这里插入图片描述

前言

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

标签:Python,text,爬虫,df,小白必,使用,font,数据,datas
From: https://blog.51cto.com/u_14522592/7918847

相关文章

  • 【小白必看】使用Python批量下载英雄联盟皮肤图片的技术实现
    前言英雄联盟是一款备受喜爱的团队对战游戏,游戏中每位英雄都有各种精美的皮肤供玩家选择。本文将介绍一个使用Python编写的英雄联盟皮肤下载器,可以快速获取所有英雄的皮肤图片,让您更方便地欣赏和收藏这些皮肤。运行效果截图导入必要的模块和库importrequests#pipi......
  • 【小白必看】使用Python爬取喜马拉雅音频并保存的示例代码
    前言本文介绍了如何使用Python中的requests库来获取音频文件并保存到本地。在这个例子中,我们使用了喜马拉雅平台上的一个API接口来获取音频ID和名称,并使用这些信息构造音频地址,然后通过发送HTTP请求将音频内容下载保存到本地。运行效果截图导入requests库importrequests......
  • 【小白必看】Python爬取NBA球员数据示例
    前言使用Python爬取NBA球员数据的示例代码。通过发送HTTP请求,解析HTML页面,然后提取出需要的排名、姓名、球队和得分信息,并将结果保存到文件中。导入需要的库和模块importrequestsfromlxmlimportetree使用requests库发送HTTP请求。使用lxml库进行HTML解析。......
  • 【小白必看】Python词云生成器详细解析及代码实现
    前言本文介绍了如何使用Python编写代码来生成词云图。在生成词云图之前,我们需要导入一些必需的库,包括numpy、wordcloud、PIL、matplotlib.pyplot和openpyxl。其中,numpy用于数据处理,wordcloud用于生成词云,PIL用于图像处理,matplotlib.pyplot用于在笔记本中显示图片,openpyxl用于读......
  • 【小白必看】Python爬虫实战之批量下载女神图片并保存到本地
    前言爬取网络上的图片是一种常见的需求,它可以帮助我们批量下载大量图片并进行后续处理。本文将介绍如何使用Python编写一个简单的爬虫,从指定网页中获取女神图片,并保存到本地。运行结果部分图片1.引入所需库首先需要导入两个库:requests用于发送网络请求,lxml用于解析......
  • 【小白必看】Python图片合成示例之使用PIL库实现多张图片按行列合成
    前言本文介绍了一个用于图片合成的Python代码示例。该代码使用了PIL库来处理图片文件,并通过嵌套循环将多张图片按照指定的行数和列数进行合成。最终生成的合成图片保存在本地。效果图1.导入必要的库fromPILimportImageimportos这段代码导入了PIL库中的Image模块,......
  • 【玩转python系列】【小白必看】使用Python爬虫技术获取代理IP并保存到文件中
    前言这篇文章介绍了如何使用Python爬虫技术获取代理IP并保存到文件中。通过使用第三方库requests发送HTTP请求,并使用lxml库解析HTML,我们可以从多个网页上获取IP、Port和地址信息。本文将逐步解析代码的每一部分,帮助读者更好地理解爬虫的工作原理。导入依赖库importrequ......
  • 【玩转Python系列】【小白必看】使用Python爬取双色球历史数据并可视化分析
    前言本文介绍了如何使用Python编程语言获取双色球历史数据,并使用数据可视化工具Matplotlib绘制了红球数量的折线图。通过对双色球历史数据的分析,我们可以更好地了解双色球的开奖规律和趋势。导入库importrequestsfromlxmlimportetreeimportcsvimportmatplotlib.pypl......
  • 【玩转Python系列【小白必看】Python多线程爬虫:下载表情包网站的图片
    前言本文主要介绍了使用Python编写的多线程爬虫程序,用于下载表情包网站上的图片。通过解析网页内容和使用XPath定位,可以获取到图片的URL,并将其保存到本地。1.导入模块和库importrequestsfromlxmlimportetreefromthreadingimportThreadfromqueueimportQueueim......
  • 【python】Python tkinter库实现重量单位转换器的GUI程序
    前言这段代码是一个简单的重量单位转换器的GUI程序,使用了Python的tkinter库来创建图形界面。该程序可以将输入的重量从千克转换为克、磅和盎司,并通过三个文本框分别显示转换后的结果。学到什么?使用tkinter库创建一个GUI窗口。tkinter是Python标准库中的一个模块,用于......