最新手游用户爬取并分析

爬取最新手游信息

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

1.主题式网络爬虫名称:

    最新手游用户爬取并分析

2.主题式网络爬虫爬取的内容与数据特征分析:

    内容:爬取手游用户量和上线时间

3.网络爬虫设计方案概述:

    登录所要爬取的网址,鼠标移动至所需爬取的资料右击,审查元素,使用get请求和beautifulsoup解析工具进行爬取数据,使用pandas进行数据可视化

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

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

    网址:http://news.4399.cn/top/

 

 

2.结构分析

 

 

 

 

 

 

 

 

3.利用find_all函数进行遍历查找的方式爬取

三、网络爬虫程序设计

1.数据爬取和采集

 

 

 

 

 

 

 

保存到Excel

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 2.数据清洗和处理

 

 

 

 

 

 

 

 

 

 

4. 数据分析与可视化

 读取Excel表格前5数据

 

 游戏用户最多5项直方图分析(由1,2,3,4,5代替和平精英,王者荣耀,我的世界,迷你世界,公主连结)

 

 

 

 饼状图 

 

 

 

 折线图

 

 

 

 

 

 

 

 

 

 

 

 

 总代码

#导入库
import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import scipy as sp
from numpy import genfromtxt
import matplotlib
from pandas import DataFrame
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
import urllib.request as urlrequest
url='http://news.4399.cn/top/'#爬取网址
headers={'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'}#伪装爬虫
#发送请求
r=requests.get(url)
#统一编码
r.encoding=r.apparent_encoding
t=r.text
#beautifulsoup工具解析
soup=BeautifulSoup(t,'lxml')
#建立空表格
name=[]
user=[]
#find查询
for x in soup.find_all(class_="b1"):
         name.append(x.get_text().strip())
for y in soup.find_all(class_="s1"):
         user.append(y.get_text().strip())
data=[name,user]
#print(data)
D=pd.DataFrame(data,index=["游戏名称","游戏用户"])
#print(D.T)
D.T.to_excel('txgames.xlsx')
print('\n====各列是否有缺失值情况如下:====')
print(D.isnull()) 
print(D.duplicated())
print(D.isna().head()) 
print(D.describe())

直方图

plt.figure(figsize=(10, 10), dpi=80)
# 柱子总数
N = 5
# 包含每个柱子对应值的序列
values = (417311,4145673,3856180,3590172,3521835)
# 包含每个柱子下标的序列
index = np.arange(N)
# 柱子的宽度
width = 0.45
p2 = plt.bar(index, values, width, label="num", color="#87CEFA")
# 设置横轴标签
plt.xlabel('name')
# 设置纵轴标签
plt.ylabel('user')
# 添加标题
plt.title('relation diagram')
# 添加纵横轴的刻度
plt.xticks(index, ('1','2','3','4','5'))
# plt.yticks(np.arange(0, 10000, 10))
# 添加图例
plt.legend(loc="upper right")
plt.show()

饼状图

plt.pie([417311,4145673,3856180,3590172,3521835],labels=['hpjy','wzry','wdsj','mnsj','gzlj.Re:Dive'])

#设置显示图像为圆形

plt.axis('equal')

plt.title('game analyze')

plt.show()

折线图

def line_diagram():
x = ['hpjy','wzry','wdsj','mnsj','gzlj.Re:Dive']
y = [417311,4145673,3856180,3590172,3521835]
plt.xlabel('name')
plt.ylabel('user')
plt.plot(x,y)
plt.scatter(x,y)
plt.title("game analyze")
plt.show()
line_diagram()

#画一元二次回归方程

chinese=matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/simsun.ttc')

#调用中文

plt.rcParams['font.sans-serif']=['Arial Unicode MS']

plt.rcParams['axes.unicode_minus']=False

filename="C:/txgame.csv"

colnames=["rank","name","hot"]

df=pd.read_excel(filename,skiprows=1,names=colnames)

X=df.rank

Y=df.hot

#确定x,y轴

def func(params,x):

    a,b,c=params

    return a*x*x+b*x+c

def error(params,x,y):

    #设置误差函数

    return func(params,x)-y

p0=[1978,0]

#主函数

def main():

    plt.figure(figsize=(8,6))

    #画布尺寸

    p0=[1978,300,1]

    Para=leastsq(error,p0,args=(X,Y))

    a,b,c=Para[0]

    print("a=",a,"b=",b,"c=",c)

    plt.scatter(X,Y,color="green",label="样本数据",linewidth=2)

    x=np.linspace(1,25,25)

    y=a*x*x+b*x+c

    plt.plot(x,y,color="red",label="拟合曲线",linewidth=2)

    #画拟合曲线

    plt.legend()

    plt.title("各游戏游戏用户量")

    plt.grid()

    plt.show()

main()    

plt.savefig(fname="C:/各游戏游戏用户量.jpg",figsize=[1,1])

#保存图像



 

 

 

 

 

 

 四、结论

1.经过对主题数据的分析与可视化,可以得到哪些结论?

各游戏的受到用户的喜欢程度

2.对本次程序设计任务完成的情况做一个简单的小结。

对于细节知识的缺乏,在实操中遇到了不少困阻。

 

 

 

 

 

 

    

posted @ 2020-04-22 13:22  某灯  阅读(796)  评论(0)    收藏  举报