一、主题式网络爬虫设计方案(15分)
1.主题式网络爬虫名称
对NBA球员勒布朗詹姆斯生涯信息进行爬取分析
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)
获取NBA球员勒布朗詹姆斯生涯信息,提取其中的赛况数据与比分累计。设计方案主要靠requests库结合beautifulsoup进行数据解析。技术难点主要是怎么对获取的信息做可视图分析。
技术路线:requests beautifulsoup
二、主题页面的结构特征分析(15分)
1.主题页面的结构特征
https://nba.hupu.com/players/lebronjames-650.html
2.Htmls页面解析
首先,通过request获取到整个页面的数据
3. 节点(标签)查找方法与遍历方法
(必要时画出节点树结构)
通过 devTool工具可以分析网页,找到对应的标签属性
<table class="players_table bott bgs_table">
即table.players_table.bott.bgs_table 可以获取到整个表格
<tr class="color_font1 borders_btm">
在属性一样的情况下,想要取出生涯数据,必须过滤掉第一个tr标签,才是我们想要的数据!
三、网络爬虫程序设计(60分)
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后面提供输出结果的截图。
1.数据爬取与采集
2.对数据进行清洗和处理
3.文本分析(可选):jieba分词、wordcloud可视化
4.数据分析与可视化
(例如:数据柱形图、直方图、散点图、盒图、分布图、数据回归分析等)
程序代码:
# -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup import pandas as pd list1 = [] #数据数组 list2 = [] # 数据数组 def gethtmltext(url): #获取网页数据 try: r = requests.get(url) r.raise_for_status() return r.text except: return "打不开" def getdata(html,list1,list2): newlist = [] # 解析源码 soup = BeautifulSoup(html, "html.parser") #选择器 tables = soup.select("table.players_table.bott.bgs_table > tbody > tr.color_font1.borders_btm") #循环取出每组数据 for table in tables: datas = table.get_text().split(‘\n‘) #去掉数据里的空元素 for i in datas: if len(i) == 0: datas.remove(i) # print(datas) #加入数据组 newlist.append(datas) for i in range(0,31): list2.append(newlist[i]) for i in range(31, len(newlist)): list1.append(newlist[i]) print(list2) print(list1) return newlist # 将这个赛季信息保存到excel文件中 def writerExcel1(path1,list1): writer = pd.ExcelWriter(path1) pf = pd.DataFrame(list1) pf.to_excel(writer) writer.save() # 将赛季信息保存到excel文件中 def writerExcel2(path2, list2): writer = pd.ExcelWriter(path2) pf = pd.DataFrame(list2) pf.to_excel(writer) writer.save() # 将数据保存到txt文件中 def writerTxt(list1): #保存数据 fo = open("basketball.txt", "w+") #循环取出每组数据 for datas in list1: #内循环单数据 for i in datas: fo.writelines(i + " ") #大循环换行 fo.writelines("\n") fo.close() newlist = [] html = gethtmltext("https://nba.hupu.com/players/lebronjames-650.html") newlist = getdata(html,list1,list2) writerTxt(newlist) writerExcel1("basketball1.xlsx", list1) writerExcel2("basketball2.xlsx", list2)
运行结果:
使用split函数切割文本,以换行符为特征,产生单数据组。
保存数据:
fo = open("data.txt", "w+") #循环取出每组数据 for datas in list: #内循环单数据 for i in datas: fo.writelines(i + " ") #大循环换行 fo.writelines("\n") fo.close()
结果图:
数据可视化
代码:
basketball1 = pd.read_excel("basketball1.xlsx")
print(basketball1.head(3))
basketball2 = pd.read_excel("basketball2.xlsx")
print(basketball2.head(3))
# 画出时间和篮板之间的散点图
sns.set(style="white")
sns.scatterplot(x="时间",y=‘篮板‘,data = basketball1)
# 显示篮板次数和赛季的箱型图
sns.boxplot(x=‘篮板‘,y=‘赛季‘, data=basketball1)
# 直方图查看basketball1中得分分布
sns.distplot(basketball1[‘得分‘])
# 统计这个赛季各球队出场次数
sns.countplot(basketball1[‘球队‘])
1.经过对数据的分析和可视化,可以得出哪些结论
可以看出詹姆斯各方面的数据都是非常顶尖的。
2.对本次程序设计任务完成的情况做一个简单的小结。
可能由于自己对课程的了解还不是非常深入,所以在pythono爬虫的时候遇到的困难比较多,自己在上网和看视频学习了很多之后才完成了这个题目,可能这个项目完成的不是很好希望以后通过努力能做的更好。
原文:https://www.cnblogs.com/ls20160907/p/12078086.html