使用Python爬取信息403解决,并统计汇总绘制直方图,柱状图,折线图

news/2024/9/22 9:40:29

使用Python爬取信息403解决,并统计汇总绘制直方图,柱状图,折线图

写这篇博客源于博友的提问:
在这里插入图片描述

1. 效果图

拟录取专业-人数分布直方图效果图如下:
在这里插入图片描述

拟录取专业-人数效果图如下:
在这里插入图片描述

拟录取专业-人数柱状图效果图如下:

在这里插入图片描述

拟录取专业-人数折线图效果图如下:
在这里插入图片描述

2. 原理

  • 爬取403,可以在请求request里加入header,cookie;
  • 观察结果值为html以及td,class不太一样,介于标题和值不一样,最终决定找所有td进行处理

在这里插入图片描述

  • matplotlib图例超出范围,设置plt.tight_layout(),不太管用,fig.savefig(‘tight.png’, bbox_inches=‘tight’)查看保存后的图ok。

直接savefig时显示不全

fig.savefig(‘withoutTight.png’)

savefig时加上 bbox_inches=‘tight’ 后,可以解决

fig.savefig(‘tight.png’, bbox_inches=‘tight’)

3. 源码

# 1. 爬取数据:http://www.cdzy.cn/zsb/HTML/2021lq4.htm
# 2. 考生号,姓名,准考证号,拟录取专业保存到new_data.xls
# 3. 按"拟录取专业"统计各专业录取人数
# 4. 绘制“拟录取专业-录取人数”,直方图,柱状图,折线图
# -*- coding:utf-8 -*-
# USAGE
# python ask_pa_plot.pyimport matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import requests
from lxml import html# 正确显示中文和负号plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = Falsedef getData(url):print(url)# # 设置请求超时(20s) 报错403# r = requests.get(url, timeout=1)# print(r) # # 报错403# headers = {#     'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}# r = requests.get(url=url, headers=headers)# print('addHeader: ', r)headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','Cookie': 'cf_clearance=1159d2ca806b3ebf2a85a8706f4b8c90ff6abc01-1517488982-1800'}r = requests.get(url, headers=headers)if r.status_code == requests.codes.ok:print('=== status_code === ', r.status_code)  # 响应码print('=== headers === ', r.headers)  # 响应头print('=== Content-Type === ', r.headers.get('Content-Type'))  # 获取响应头中的Content-Type字段# 解析数据r.encoding = 'utf-8'# print('content: ', type(r.text))# print(r.content)f = open("out.txt", "w", encoding='utf-8')f.write(r.text)f.close()tree = html.parse(url)d = {}all_td_val = tree.xpath('//td')print('all: ', len(all_td_val))# 跳过前6行无效行all_td_val = all_td_val[6:]# 获取标题列# th_td_val = tree.xpath('//td[@class="xl6931833"]')th_td_val = all_td_val[:4]header = []for i in th_td_val:hd = i.xpath('./text()')[0]header.append(hd)d.setdefault(str(hd), [])# 获取值,跳过标头4列all_td_val = all_td_val[4:]for i in range(len(all_td_val) // 4):for j in range(4):if (i * 4 + j >= len(all_td_val)): breakval = all_td_val[i * 4 + j].xpath('./text()')if (len(val) == 0): continueval = all_td_val[i * 4 + j].xpath('./text()')[0]d[header.__getitem__(j)].append(val)print(d.keys())return d# 直方图绘制
def plot_hist(pd):# print(np.unique(pd.values))# print(len(pd.values), len(np.unique(pd.values)))# edgecolor加分割线plt.hist(pd.values, bins=len(np.unique(pd.values)), edgecolor='black')labels = [i for i in pd.index]print(labels)# 设置图片标题plt.title("拟录取专业-人数分布直方图")plt.xlabel('专业')plt.ylabel('人数')plt.tight_layout()plt.show()# 柱状图绘制
def plot_bar(pd):# 画图,plt.bar()可以画柱状图print(type(pd.keys), type(pd.values), type(pd.index))print(pd.keys)print(pd.values)print(pd.index[0])labels = [i for i in pd.index]bar = plt.bar(pd.keys(), pd.values, label=labels)# # 添加图例名称到图标# plt.legend(handles=bar.legend_elements()[0],#            labels=pd.keys(),#            title="拟录取专业", loc="upper right")plt.show()fig = plt.figure()for i, (x, y) in enumerate(pd.items()):print(i, x, y)plt.bar(x, y, label=x)# 设置图片标题plt.title("拟录取专业-人数柱状图")# 设置x轴标签名plt.xlabel("拟录取专业")# 设置y轴标签名plt.ylabel("人数")plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)plt.tight_layout()# 显示plt.show()# 直接savefig时显示不全fig.savefig('withoutTight.png')# savefig时加上 bbox_inches='tight' 后,可以解决fig.savefig('tight.png', bbox_inches='tight')# 折线图绘制
def plot_line(pd):fig = plt.figure()label = np.arange(len(pd.values))scatter = plt.scatter(pd.keys(), pd.values, c=label, marker="*")labels = [i for i in pd.index]plt.plot(pd.keys(), pd.values, label='拟录取专业人数', c='red', lw=5.0, ls="--")# 添加图例名称到图标plt.legend(handles=scatter.legend_elements()[0],labels=labels,title="拟录取专业", bbox_to_anchor=(-0.2, 1))# plt.legend(bbox_to_anchor=(-0.2, 1), loc='upper right', borderaxespad=0.)# 设置图片标题plt.title("拟录取专业-人数折线图")# 设置x轴标签名plt.xlabel("拟录取专业")# 设置y轴标签名plt.ylabel("人数")plt.tight_layout()# 显示plt.show()# 直接savefig时显示不全fig.savefig('withoutTight_z.png')# savefig时加上 bbox_inches='tight' 后,可以解决fig.savefig('tight_z.png', bbox_inches='tight')url = 'http://www.cdzy.cn/zsb/HTML/2021lq4.htm'
dict = getData(url)
# print(dict)
pd = pd.DataFrame(dict)pd_x = pd.groupby('拟录取专业')['姓名'].count()
print(pd_x)
# pd_arr = np.array(pd_x)
# for i, j in enumerate(pd_arr):
#     print(i, j)plot_hist(pd['拟录取专业'])
plot_bar(pd_x)
plot_line(pd_x)

参考

  • matplotlib 图标签超出范围,如何设置?
  • 使用Python,PCA对iris数据集降维2维/3维并进行2D,3D散点图绘制(包括有图例&无图例,有标题Label&无标题Label)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

使用Python对图像进行不同级别量化QP,使用RLE计算压缩比,并计算对应的PSNR

写这篇博客源于 博友的提问&#xff1a; 1.效果图 原图 VS QP2 VS QP4 VS QP8效果图如下&#xff1a; QP量化是指把原始图像按像素级别划分取值。如QP2&#xff0c;则<128 取0&#xff0c;>128取128. QP4&#xff0c;则<64取0&#xff0c;<128取64&#xff0c;&…

使用Python,SMTP发邮件到qq邮箱(文本/超链接/图片/表格/附件表格)

使用Python&#xff0c;SMTP发邮件到qq邮箱&#xff08;文本/超链接/图片/表格/附件表格&#xff09; 这篇博客将介绍如何利用SMTP&#xff0c;使用Python向qq邮箱自动发邮件&#xff0c;包括正文文本超链接图片表格&#xff0c;附件图片表格&#xff0c;收件人可多个&#xf…

图像搜索引擎1|使用Python颜色直方图在数据集中搜索视觉上相似的图像

图像搜索引擎1|使用Python颜色直方图在数据集中搜索视觉上相似的图像 这篇博客将介绍如何从头到尾创建图像搜索引擎。第一步是选择一个图像描述符——使用3D RGB直方图来表征图像的颜色。然后通过提取特征向量(即直方图)使用描述符对数据集中的每个图像进行索引。然后使用卡…

读书笔记3|使用Python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱绘制

读书笔记3|《群山回唱》-卡勒德胡赛尼 踉跄前行中&#xff0c;你总能在他们身上找到丢失的那一部分记忆。 一度看不下去这本书&#xff0c;因为最开始的章节里太痛了&#xff0c;加上我也离开我的孩子&#xff0c;生活已经够苦&#xff0c;我需要一点糖。这次实在太无聊了&…

使用Python,Open3D对点云散点投影到面上并可视化,使用3种方法计算面的法向量及与平均法向量的夹角

使用Python&#xff0c;Open3D对点云散点投影到面上并可视化&#xff0c;使用3种方法计算面的法向量及与平均法向量的夹角 写这篇博客源于博友的提问&#xff0c;他坚定了我继续坚持学习的心&#xff0c;带给了我充实与快乐。 将介绍以下5部分&#xff1a; 随机生成点云点投影…

DB2 9 使用拓荒(733 检讨)认证指南,第 2 部分: DB2 数据操作(6)

学习根柢根底观观点操作游标游标措置概述在本节中&#xff0c;您将更进一步看到若安在嵌入式 SQL 使用次第中运用游标。异常&#xff0c;根柢根底的步骤照旧是声明、翻开、获取、更新/删除&#xff08;可选&#xff09;和封闭。为了赞助看法游标的观观点&#xff0c;假定 DB2 构…

计算机视觉|针孔成像,相机内外参及相机标定,矫正的重要性

计算机视觉读书笔记|相机内外参及相机标定&#xff0c;矫正的重要性 这篇博客将介绍针孔成像&#xff0c;透镜&#xff08;弥补了针孔成像曝光不足成像速度慢的缺点&#xff0c;但引进了畸变&#xff0c;主要是径向畸变和切向畸变&#xff0c;径向畸变主要是离中心越远越弯曲&…

计算机视觉|投影与三维视觉

这一篇将学习投影与三维视觉&#xff0c;沿用上一篇 计算机视觉|针孔成像&#xff0c;相机内外参及相机标定&#xff0c;矫正的重要性 摄像机内参数矩阵M、畸变参数、旋转矩阵R、平移向量T以及但影响矩阵H。回顾放射和投影变换&#xff0c;并使用POSIT算法从一幅图像中查找获得…