分享一个Python爬虫入门实例(有源码,学习使用)
一、爬虫基础知识
Python爬虫是一种使用Python编程语言实现的自动化获取网页数据的技术。它广泛应用于数据采集、数据分析、网络监测等领域。以下是对Python爬虫的详细介绍:
- 架构和组成:
- 下载器:负责根据指定的URL下载网页内容,常用的库有Requests和urllib。
- 解析器:用于解析下载的网页内容,提取所需的数据。BeautifulSoup和lxml是常用的解析库。
- 存储器:将提取的数据存储到本地或数据库中,以便于后续处理和分析。
- 优势:
- 易于学习和使用:Python语言简洁易懂,入门门槛低,适合初学者。
- 强大的库支持:拥有丰富的第三方库,如Requests、BeautifulSoup和Scrapy,大大提高了开发效率。
- 跨平台性:Python是跨平台的,可以在多种操作系统上运行。
- 社区活跃:Python有着庞大的开发者社区,遇到问题时可以快速找到解决方案。
- 应用场景:
- 数据挖掘:从网站抓取大量数据进行市场分析、用户行为研究等。
- 监控竞品:定期检查竞争对手的网站变化,如价格变动、新产品发布等。
- 内容聚合:自动收集来自不同来源的内容,整合后提供给用户。
- 自动化测试:模拟用户操作,进行网站的自动化测试。
二、案例:爬取大学排名数据
代码实现:
import requests
from bs4 import BeautifulSoup
import pandas as pd
ulist = []
# 爬取的网站的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文件,结果如下:
关于Python学习指南
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
👉Python所有方向的学习路线👈
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python大厂面试资料👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。
👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
原文地址:https://blog.csdn.net/mate1357/article/details/137331138
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!