首页 > 编程语言 >分享一个Python爬虫入门实例带数据分析(有源码,学习使用)

分享一个Python爬虫入门实例带数据分析(有源码,学习使用)

时间:2024-06-04 17:31:57浏览次数:35  
标签:plt title Python 爬虫 df 源码 import counts opts

Python爬虫是一种使用Python编程语言实现的自动化获取网页数据的技术。它广泛应用于数据采集、数据分析、网络监测等领域。以下是对Python爬虫的详细介绍:

  1. 架构和组成

  • 下载器:负责根据指定的URL下载网页内容,常用的库有Requests和urllib。

  • 解析器:用于解析下载的网页内容,提取所需的数据。BeautifulSoup和lxml是常用的解析库。

  • 存储器:将提取的数据存储到本地或数据库中,以便于后续处理和分析。

  1. 优势

  • 易于学习和使用:Python语言简洁易懂,入门门槛低,适合初学者。

  • 强大的库支持:拥有丰富的第三方库,如Requests、BeautifulSoup和Scrapy,大大提高了开发效率。

  • 跨平台性:Python是跨平台的,可以在多种操作系统上运行。

  • 社区活跃:Python有着庞大的开发者社区,遇到问题时可以快速找到解决方案。

  1. 应用场景

  • 数据挖掘:从网站抓取大量数据进行市场分析、用户行为研究等。

  • 监控竞品:定期检查竞争对手的网站变化,如价格变动、新产品发布等。

  • 内容聚合:自动收集来自不同来源的内容,整合后提供给用户。

  • 自动化测试:模拟用户操作,进行网站的自动化测试。

案例:爬取大学排名数据(爬20条)

代码如下:

import requests
from bs4 import BeautifulSoup
import pandas as pd

ulist = []
# 爬取的网站的URL
# 爬取的网站的URL
url = "http://www.gaosan.com/gaokao/241219.html"
response = requests.get(url)
# 编码格式
response.encoding = 'utf-8'
# 编译数据
soup = BeautifulSoup(response.text, 'html.parser')
# 将数据存入定义好的ulist
for tr in soup.find('tbody').children:
    tds = tr('td')
    ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string, tds[4].string, tds[5].string])
# 获取指定数量的大学并打印:
# {:^10}表示将元素居中对齐,宽度为10个字符。
# \t表示制表符,用于分隔不同的列。
# chr(12288)通常用于中文文本的排版,以保持整齐的对齐。
for i in range(21):
    u=ulist[i]
    print("{:^10}\t{:^20}\t{:^10}\t{:^10}\t{:^10}\t{:^10}".format(u[0],u[1],u[2],u[3],u[4],u[5],chr(12288)))
# 创建一个pandas DataFrame对象
df=pd.DataFrame(ulist[1:21],columns=ulist[0])

# 将数据保存到Excel文件中
df.to_excel('学校排名.xlsx',index=False)

运行成功后打开文件:

简单数据分析

1.以matplotlib库为主:将爬取的大学排名数据进行分析。

import matplotlib.pyplot as plt
import pandas as pd

# 读取Excel文件
df = pd.read_excel('学校排名.xlsx')

# 解决坐标轴刻度负号乱码
plt.rcParams['axes.unicode_minus'] = False
# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['Simhei']

# 1.绘制柱状图,展示不同省份的大学数量
# 从df中提取出"所在地区"列的数据,存储在变量provinces中。
provinces = df['所在地区']
# 使用value_counts()函数统计每个省份出现的次数,并将结果存储在变量counts中。
counts = provinces.value_counts()
# 使用plt.bar()函数绘制柱状图,横坐标为省份名称,纵坐标为大学数量。
plt.bar(counts.index, counts.values)
# 使用plt.xlabel()、plt.ylabel()和plt.title()函数设置图表的横轴标签、纵轴标签和标题。
plt.xlabel('所在地区')
plt.ylabel('大学数量')
plt.title('不同省份的大学数量')
# 使用plt.show()函数显示图表。
plt.show()

# 2.绘制饼图,展示办学层次的大学占比
# 从df中提取出"办学层次"列的数据,存储在变量batches中。
batches = df['办学层次']
# 使用value_counts()函数统计每个办学层次出现的次数,并将结果存储在变量counts中。
counts = batches.value_counts()
# 使用plt.pie()函数绘制饼图,参数labels指定标签,参数autopct指定百分比格式。
plt.pie(counts.values, labels=counts.index, autopct='%1.1f%%')
# 使用plt.axis('equal')函数设置饼图为正圆形。
plt.axis('equal')
# 使用plt.title()函数设置图表的标题。
plt.title('办学层次大学占比')
# 使用plt.show()函数显示图表。
plt.show()

# 3.绘制散点图,展示分数线与排名之间的关系
# 从df中提取出"综合得分"和"星级排名"两列的数据,分别存储在变量scores和ranks中。
scores = df['综合得分']
ranks = df['星级排名']
# 使用plt.scatter()函数绘制散点图,横坐标为星级排名,纵坐标为综合得分。
plt.scatter(ranks, scores)
# 使用plt.xlabel()、plt.ylabel()和plt.title()函数设置图表的横轴标签、纵轴标签和标题。
plt.xlabel('星级排名')
plt.ylabel('综合得分')
plt.title('综合得分与星级排名的关系')
# 使用plt.show()函数显示图表。
plt.show()

运行结果:

2.以Pyecharts库为主:将爬取的大学排名数据进行分析。

(1)绘制柱状图,展示不同省份的大学数量

import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts

# 读取Excel文件
file_path = '学校排名.xlsx'
df = pd.read_excel(file_path)

# 统计'所在地区'列中各个地区的出现次数。
department_count = df['所在地区'].value_counts()

# 绘制柱状图
bar = (
   Bar()
   # 将'所在地区'列中各个地区的名称添加到图表的X轴上。
  .add_xaxis(department_count.index.tolist())
   # 将'所在地区'列中各个地区的出现次数添加到图表的Y轴上,并将这个数据系列命名为"数量"。
  .add_yaxis("数量", department_count.values.tolist())
   # 设置图表的全局选项。这里将图表的标题设置为"不同省份的大学数量"。
  .set_global_opts(title_opts=opts.TitleOpts(title="不同省份的大学数量统计"))
)

# 生成HTML文件
bar.render('A-不同省份的大学数量.html')

运行之后生成html文件,打开html文件,结果如下:

(2)绘制饼图,展示办学层次的大学占比

import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts

file_path = '学校排名.xlsx'
df = pd.read_excel(file_path)

# 统计各学历人数
education_count = df['办学层次'].value_counts()

# 绘制饼图
pie = (
   Pie()
   # 将办学层次和对应的数量作为数据添加到饼图中。
   # 其中,education_count是一个包含办学层次和对应数量的Series对象
   # 通过zip函数将两个列表合并成一个元组列表,再使用list函数将其转换为列表形式。
   # 最后,使用add方法将数据添加到饼图中,并设置系列名称为"数量"。
  .add("数量", [list(z) for z in zip(education_count.index.tolist(), education_count.values.tolist())])
   # 设置饼图的全局配置项。这里设置标题为"办学层次大学占比统计"。
  .set_global_opts(title_opts=opts.TitleOpts(title="办学层次大学占比统计"))
   # 设置饼图的标签格式。label_opts参数用于设置标签选项,opts.LabelOpts方法用于创建一个标签选项对象,并设置标签格式为"{b}: {c}"。
   # 其中{b}表示办学层次,{c}表示数量。这样设置后,饼图中每个扇区的标签将显示为"教育层次:数量"的形式。
   # formatter作用: 格式化标签的参数。{b}、{c}代表占位符。
  .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)

# 生成HTML文件
pie.render('A-办学层次大学占比统计.html')

运行之后生成html文件,打开html文件,结果如下:

(3)绘制散点图,展示分数线与排名之间的关系

import pandas as pd
from pyecharts.charts import Scatter
from pyecharts import options as opts

# 读取Excel表格数据
file_path = '学校排名.xlsx'
df = pd.read_excel(file_path)

# 提取’星级排名‘和’综合分数‘数据
rank = df["星级排名"].tolist()
score = df["综合得分"].tolist()

# 创建散点图对象
scatter = Scatter()

# 添加X轴数据
scatter.add_xaxis(rank)
# 添加Y轴数据
scatter.add_yaxis("综合得分", score)

# 设置全局选项
scatter.set_global_opts(
   # 设置标题名称
   title_opts=opts.TitleOpts(title="综合得分与星级排名关系散点图"),
   # 设置X轴名称
   xaxis_opts=opts.AxisOpts(name="星级排名"),
   # 设置Y轴名称以及纵坐标的大小
   yaxis_opts=opts.AxisOpts(name="综合得分",min_=70, max_=100),
)

# 渲染图表
scatter.render("A-综合得分与星级排名关系散点图.html")

运行之后生成html文件,打开html文件,结果如下:

标签:plt,title,Python,爬虫,df,源码,import,counts,opts
From: https://blog.csdn.net/xyh2004/article/details/139448116

相关文章

  • superAGI核心源码分析
    main.pyimportrequestsfromfastapiimportFastAPI,HTTPException,Depends,Request,status,Queryfromfastapi.middleware.corsimportCORSMiddlewarefromfastapi.responsesimportJSONResponsefromfastapi.responsesimportRedirectResponsefromfastapi_......
  • 自动化Reddit图片收集:Python爬虫技巧
    引言Reddit,作为一个全球性的社交平台,拥有海量的用户生成内容,其中包括大量的图片资源。对于数据科学家、市场研究人员或任何需要大量图片资源的人来说,自动化地从Reddit收集图片是一个极具价值的技能。本文将详细介绍如何使用Python编程语言,结合requests和BeautifulSoup库,来......
  • 基于51单片机的RFID密码锁门禁系统设计资料(源码+原理图等)
    目录1、实物图  2、原理图3、PCB4、器件清单5、设计描述6、源码 7、资料清单资料下载地址:基于51单片机的RFID密码锁门禁系统设计资料(源码+原理图+论文等)​​​​​​​1、实物图  2、原理图3、PCB 4、器件清单5、设计描述 本设计采用STC89C52作......
  • Python教程-快速入门基础必看课程09-文件处理
    该视频主要讲述了Python中文件的读写操作和pandas库中的subt函数来处理CSV文件。在Python中,文件的读写操作需要使用open函数打开文件,并指定路径和模式。读取文件时,可以使用f.read()方法读取内容,并使用f.close()方法关闭文件。写入文件时,可以使用f.write()方法写入内容,并使用......
  • 基于Java+Dijkstra算法的地铁线路换乘最短路径项目(免费提供全部源码)
    下载地址如下:基于Java+Dijkstra算法的地铁线路换乘最短路径项目(免费提供全部源码)资源-CSDN文库项目介绍背景随着城市化进程的不断推进,地铁已成为现代大城市公共交通系统的核心组成部分。地铁线路的日益复杂和站点的不断增加,使得乘客在出行时面临换乘路线选择的困扰。为了提......
  • Python--PyQT5图像
    fromPyQt5importQtCore,QtGuiimportsysimportcv2if__name__=='__main__':app=QtWidgets.QApplication(sys.argv)main_win=QtWidgets.QMainWindow()main_win.setWindowTitle("QLabel图像显示演示")image_label=QtWidge......
  • Python---PyQT5水平垂直布局
    fromPyQt5importQtWidgetsfromPyQt5importQtCore,QtGuiimportsysimportcv2if__name__=='__main__':app=QtWidgets.QApplication(sys.argv)main_win=QtWidgets.QMainWindow()main_win.setWindowTitle("QLabel图像显示演示"......
  • Python---PyQT5之QPushButton
    fromPyQt5importQtWidgetsfromPyQt5importQtCore,QtGuiimportsysimportcv2classButtonPanel(QtWidgets.QWidget):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)select_btn=QtWidgets.QPushButton("......
  • containerd 源码分析:创建 container(二)
    文接containerd源码分析:创建container(一)1.2.2创建容器进程创建container成功后,接着创建task,task将根据containermetadata创建容器进程。1.2.2.1创建task进入tasks.Newtask创建task://containerd/cmd/ctr/commands/tasks/tasks_unix.gofuncNewTask(ctxg......
  • 华为OD机试2024年最新题库(Python、JAVA、C、C++合集)C卷+D卷
    介绍博主介绍:CSDN领军人物top1的作者,全网粉丝30w+,文章累计被阅读3800w+,直接帮助200+,间接帮助800+同学进入od添加或私信博主免费获取本题解析以及代码24年5月份开始,考的都是OD统一考试(D卷),题库已经整理好了,命中率95%以上。5-10月份考的都是D卷真题,都是原题,圈内有多种......