2020年当下软件园软件下载总排行榜

2020年当下软件园软件下载总排行榜一、主题式网络爬虫设计设计方案1.爬虫名称:2020年当下软件园软件下载总排行榜。2.爬取内容:排名、软件类型、软件名称、用户评分、内存大小、评级。3.爬虫设计方案概述:(1)思路:找到要爬取

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、主题式网络爬虫设计设计方案

1.爬虫名称:2020年当下软件园软件下载总排行榜。

2.爬取内容:排名、软件类型、软件名称、用户评分、内存大小、评级。

3.爬虫设计方案概述:

      (1)思路:找到要爬取的网页,按F12查看网页代码,找到所要爬取的数据及分析标签,导入相应库,然后开始对数据进行爬取,进行数据的清洗、处理、可视化和保存。

      (2)技术难点:爬取内容多不好做数据可视化处理和回归方程,对python理解不够透彻,回归方程不是很理解。实在是不会;而且代码做不到400行。

二、主题页面的结构特征分析

1.主题页面的结构与特征分析

2020年当下软件园软件下载总排行榜

 

 

2.Htmls页面解析

2020年当下软件园软件下载总排行榜

 

  3.节点查找

2020年当下软件园软件下载总排行榜

 

 

三、网络爬虫程序设计

1.数据爬取与采集

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import bs4
 4 import pandas as pd
 5 import matplotlib.pyplot as plt
 6 import numpy as np
 7 import re
 8 import scipy as sp
 9 from scipy.optimize import leastsq
10 import matplotlib as mpl
11 from numpy import genfromtxt
12 import seaborn as sns 
13 url = 'http://www.downxia.com/downtop/1_1.html'
14 def f(s):
15     try:
16         headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
17         r=requests.get(s,timeout=30,headers=headers)
18         r.raise_for_status()
19         r.encoding=r.apparent_encoding
20         soup=BeautifulSoup(r.text,'lxml')
21         return soup
22     except:
23         return ""
24 soup=f(url)
25 type1=[]
26 name=[]
27 fraction=[]
28 size_=[]
29 grade_=[]
30 for link1 in soup.find_all(class_='type'): 
31     type1.append(link1.get_text())
32 for link2 in soup.find_all(class_='tit'):
33     name.append(link2.get_text().strip())
34     
35 for link3 in soup.find_all('td',class_='fa'):
36     fraction.append(link3.get_text().strip())
37 for i in range(0,200):
38     if i%2==0:
39         del fraction[0]
40     else:
41         fraction.append(fraction[0])
42         del fraction[0]
43 
44 for link4 in soup.find_all("img"):
45     grade_.append(link4)
46 grade_s=re.findall("s[0-5]",str(grade_))
47 grade=re.findall("\d",str(grade_s))
48 #print(len(grade),grade)
49 
50 size_= re.findall("<td>[A-Za-z0-9|.]+[A-Z]</td>",str(soup))
51 size=re.findall("[0-9|.]+[A-Z]",str(size_))
52 #print(len(size),size)
53 paiming=[]
54 for i in range(len(name)):
55     paiming.append("第{:}名".format(i+1))
56 data=pd.DataFrame([paiming,type1,name,fraction,size,grade],index=["排名","软件类型","软件名称","用户评分","内存大小","评级"]).T
57 print(data.loc[0:100,])
58 
59 index=range(0,len(type1))
60 s=pd.Series(type1,index)
61 #print(s.value_counts().iloc[0:3])
62 
63 fraction.sort(reverse=True)
64 #正常显示中文文字
65 mpl.rcParams['font.sans-serif'] = ['KaiTi']
66 mpl.rcParams['font.serif'] = ['KaiTi']
67 mpl.rcParams['axes.unicode_minus'] = False 
68 
69 
70 #print(soup)
71 # print(fraction)
72 # print(type1)
73 # print(name)
74 # print(fraction)
75 
76 # plt.figure(figsize=(10,6))
77 # plt.scatter(str(type1),fraction.color="green",label="样本数据",linewidth=2)
78 # plt.grid()
79 # plt.show()
80 
81 # a=type1[0:100]
82 # b=fraction[0:100]
83 # print(a,b)
84 # print(len(type1),len(fraction))
85 # sns.regplot(str(a),b)

 

2020年当下软件园软件下载总排行榜

 

 2020年当下软件园软件下载总排行榜

 

 2020年当下软件园软件下载总排行榜

 

 

 

 

 

2.对数据进行清洗和处理

1 #读取文件显示前10行
2 
3 wb = pd.DataFrame(pd.read_excel('D:\\2020年当下软件园总排行榜.xlsx'))
4 wb.head(10)

2020年当下软件园软件下载总排行榜

 

 

1 #检查是否有空值
2 
3 
4 
5 wb.isnull().sum()

2020年当下软件园软件下载总排行榜

 

#检查是否有缺失值



wb.isnull()

2020年当下软件园软件下载总排行榜

 

 

1 删除无效行和列
2 
3 wb.drop('内存大小', axis=1, inplace = True)
4 wb.drop('评级', axis=1, inplace = True)
5 wb.head(10)

2020年当下软件园软件下载总排行榜

 

 

 3,数据分析和可视化

1 #绘制折线图
2 
3 
4 plt.plot(['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名'],
5         [5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5],label="前10名排名与用户评分柱状图")
6 plt.title("前十名排名和用户评分之间的关系")
7 plt.legend()
8 plt.show()

2020年当下软件园软件下载总排行榜

 

 

1 绘制垂直柱状图
2 
3 plt.bar(['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名'],
4         [5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5],label="前10名排名与用户评分柱状图")

2020年当下软件园软件下载总排行榜

 

 

1 #水平柱状图
2 
3 plt.barh(['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名'],
4         [5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5],label="前10名排名与用户评分柱状图")

2020年当下软件园软件下载总排行榜

 

 

1 plt.rcParams['font.sans-serif']=['Arial Unicode MS'] #用来正常显示中文标签
2 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
3 data=np.array([5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5])
4 index=['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名']
5 s = pd.Series(data, index)
6 s.name='前10名排名与用户评分柱状图'
7 s.plot(kind='bar',title='前10名排名与用户评分柱状图')
8 plt.show()

2020年当下软件园软件下载总排行榜

 

 

 

 

5.持久化

1 #创建文件名
2 
3 wb ='D:\\2020年当下软件园总排行榜.xlsx'
4 #将数据保存
5 
6 data.to_excel(wb)

2020年当下软件园软件下载总排行榜

 

 

6.附上完整代码

 

  1 #导入相应库
  2 
  3 import requests
  4 from bs4 import BeautifulSoup
  5 import bs4
  6 import pandas as pd
  7 import matplotlib.pyplot as plt
  8 import numpy as np
  9 import re
 10 import scipy as sp
 11 from scipy.optimize import leastsq
 12 import matplotlib as mpl
 13 from numpy import genfromtxt
 14 import seaborn as sns 
 15 url = 'http://www.downxia.com/downtop/1_1.html'#网站网址
 16 def f(s):
 17     try:                                                                                 #伪装爬虫
 18         headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
 19         r=requests.get(s,timeout=30,headers=headers)
 20         r.raise_for_status()
 21         r.encoding=r.apparent_encoding
 22         soup=BeautifulSoup(r.text,'lxml')
 23         return soup
 24     except:
 25         return ""
 26 soup=f(url)   #设置空列表
 27 #储存软件类型
 28 type1=[]
 29 #储存软件名称
 30 name=[]
 31 #储存用户评分
 32 fraction=[]
 33 #储存内存大小
 34 size_=[]
 35 #储存评级
 36 grade_=[]
 37 
 38 #用for循环爬取需要的数据
 39 
 40 for link1 in soup.find_all(class_='type'): 
 41     type1.append(link1.get_text())
 42 for link2 in soup.find_all(class_='tit'):
 43     name.append(link2.get_text().strip())
 44     
 45 for link3 in soup.find_all('td',class_='fa'):
 46     fraction.append(link3.get_text().strip())
 47 for i in range(0,200):
 48     if i%2==0:
 49         del fraction[0]
 50     else:
 51         fraction.append(fraction[0])
 52         del fraction[0]
 53 
 54 for link4 in soup.find_all("img"):
 55     grade_.append(link4)
 56 grade_s=re.findall("s[0-5]",str(grade_))
 57 grade=re.findall("\d",str(grade_s))
 58 #print(len(grade),grade)
 59 
 60 size_= re.findall("<td>[A-Za-z0-9|.]+[A-Z]</td>",str(soup))
 61 size=re.findall("[0-9|.]+[A-Z]",str(size_))
 62 #print(len(size),size)
 63 paiming=[]
 64 for i in range(len(name)):
 65     paiming.append("第{:}名".format(i+1))
 66 data=pd.DataFrame([paiming,type1,name,fraction,size,grade],index=["排名","软件类型","软件名称","用户评分","内存大小","评级"]).T
 67 print(data.loc[0:100,])
 68 
 69 index=range(0,len(type1))
 70 s=pd.Series(type1,index)
 71 #print(s.value_counts().iloc[0:3])
 72 
 73 fraction.sort(reverse=True)
 74 #正常显示中文文字
 75 mpl.rcParams['font.sans-serif'] = ['KaiTi']
 76 mpl.rcParams['font.serif'] = ['KaiTi']
 77 mpl.rcParams['axes.unicode_minus'] = False 
 78 
 79 #数据清洗和处理
 80 
 81 #读取文件显示前10行 
 82 wb = pd.DataFrame(pd.read_excel('D:\\2020年当下软件园总排行榜.xlsx'))
 83 wb.head(10)
 84 
 85 #检查是否有空值
 86 wb.isnull().sum()
 87 
 88 #检查是否有缺失值
 89 wb.isnull()
 90 
 91 #删除无效行和列
 92 wb.drop('内存大小', axis=1, inplace = True)
 93 wb.drop('评级', axis=1, inplace = True)
 94 wb.head(10)
 95 
 96 #绘制前十名折线图
 97 
 98 import matplotlib as mpl
 99 plt.plot(['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名'],
100         [5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5],label="前10名排名与用户评分柱状图")
101 plt.title("前十名排名和用户评分之间的关系")
102 plt.legend()
103 plt.show()
104 
105 #绘制前十名垂直柱状图
106 
107 plt.bar(['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名'],
108         [5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5],label="前10名排名与用户评分柱状图")
109 
110 #绘制前十名水平柱状图
111 
112 plt.barh(['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名'],
113         [5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5],label="前10名排名与用户评分柱状图")
114 
115 #绘制前十名散点图
116 
117 plt.scatter(['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名'],
118         [5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5],label="前10名排名与用户评分柱状图")
119 plt.title("前十名排名和用户评分之间的关系")
120 plt.legend()
121 plt.show()
122 
123 
124 plt.rcParams['font.sans-serif']=['Arial Unicode MS'] #用来正常显示中文标签
125 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
126 data=np.array([5,5.4,7,8.1,7.2,8.1,8.6,8.4,6.9,7.5])
127 index=['第一名','第二名','第三名','第四名','第五名','第六名','第七名','第八名','第九名','第十名']
128 s = pd.Series(data, index)
129 s.name='前10名排名与用户评分柱状图'
130 s.plot(kind='bar',title='前10名排名与用户评分柱状图')
131 plt.show()
132 
133 
134    
135 
136 #数据持久化
137 
138 #创建文件名
139 wb ='D:\\2020年当下软件园总排行榜.xlsx'
140 #将数据保存
141 data.to_excel(wb)
142 
143 #print(soup)
144 # print(fraction)
145 # print(type1)
146 # print(name)
147 # print(fraction)
148 
149 # plt.figure(figsize=(10,6))
150 # plt.scatter(str(type1),fraction.color="green",label="样本数据",linewidth=2)
151 # plt.grid()
152 # plt.show()
153 
154 # a=type1[0:100]
155 # b=fraction[0:100]
156 # print(a,b)
157 # print(len(type1),len(fraction))
158 # sns.regplot(str(a),b)

 

 

四、结论

1.结论:用户评分和排名并无多大关系,数据可视化后看起来更直观和明了。

2.小结:通过此次作业,让自己对python爬虫工具和数据可视化有了更全面和更深的了解,同时也认知到自己的许多不足之处和使用爬虫工具的简便性和全面性,今后会非常用心去学习和了解python。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167943.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 锐捷交换机常用命令速查[通俗易懂]

    锐捷交换机常用命令速查[通俗易懂]准备工作       >Enable进入特权模式  #Exit  返回上一级操作模式  #End  返回到特权模式  #writememory或copyrunning-configstartup-config  保存配置文件  #delflash:config.text  删除配置文件(交换机及1700系列路由器)  #erasestartup-co

    2022年6月23日
    179
  • linux中hdfs命令_linux下adb配置

    linux中hdfs命令_linux下adb配置Linux下的HDFS命令1.hdfs常用操作的命令格式  hadoopfs-ls对hdfs下一级目录的查看  hadoopfs-lsr对hdfs目录的递归查看  hadoopfs-mkdir创建目录  hadoopfs-put从linux上传文件到hdfs  hadoopfs-get从hdfs下载文件到linux  hadoopfs-text查看文件内容  hadoopfs-rm删除文件  hadoopfs-rm

    2022年10月5日
    2
  • MySQL数据库:主从复制Replication

    MySQL数据库:主从复制Replication

    2021年4月9日
    147
  • CImage 类

    CImage 类CImage提供增强的位图支持,包括加载和保存采用JPEG、GIF、BMP和可移植网络图形格式的图像(PNG)格式。说明无法在Windows运行时中执行的应用程序中使用此类及其成员。语法classCImage成员公共构造函数公共构造函数 “属性” 说明 CImage::CImage 构造函数。 公共方法公共方法 “属性” 说明 CImage::AlphaBlend 显示具有透明或半透明像素的位图。 CImage:.

    2022年6月30日
    35
  • 由华为裁员传闻引发的思考:年轻人如何避免中年危机?「建议收藏」

    由华为裁员传闻引发的思考:年轻人如何避免中年危机?「建议收藏」看到这个话题,让我想起来之前在知乎上看到的一句话,找了半天当时的截图,没找到。最后在QQ留言板上找到了:这句话确实是让人细思极恐,时间再也没有童年那么漫长了,变得越来越快。20岁时,你可以没有钱,买不起iphone4送给女朋友。总说莫欺少年穷,是因为你有大把的未来去提高自己,同时提高自己的经济实力。不然的话。30岁时,你舍不得给老婆买iphone8。40岁时,你的妻子就会因为压力迅速苍老,然后你的…

    2022年7月18日
    40
  • 经典Sql面试题收集!!

    经典Sql面试题收集!!

    2021年8月11日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号