Python高级应用程序设计任务要求
Posted 凯风快晴。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python高级应用程序设计任务要求相关的知识,希望对你有一定的参考价值。
用Python实现一个面向主题的网络爬虫程序,并完成以下内容:
(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台)
一、主题式网络爬虫设计方案(15分)
1.主题式网络爬虫名称
NBA球员拉塞尔-威斯布鲁克生涯表现
2.主题式网络爬虫爬取的内容与数据特征分析
对NBA球员拉塞尔-威斯布鲁克生涯信息进行爬取分析
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)
获取NBA球员拉塞尔-威斯布鲁克生涯信息,提取其中的赛况数据与比分累计。设计方案主要靠requests库结合beautifulsoup进行数据解析。技术难点主要是怎么对获取的信息做可视图分析。
技术路线:requests beautifulsoup
二、主题页面的结构特征分析(15分)
1.主题页面的结构特征
https://nba.hupu.com/players/russellwestbrook-3016.html
2.Htmls页面解析
3. 节点(标签)查找方法与遍历方法
(必要时画出节点树结构)
利用find标签进行查找
三、网络爬虫程序设计(60分)
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后面提供输出结果的截图。
1.数据爬取与采集
2.对数据进行清洗和处理
3.文本分析(可选):jieba分词、wordcloud可视化
4.数据分析与可视化
(例如:数据柱形图、直方图、散点图、盒图、分布图、数据回归分析等)
程序代码:
# -*- coding: utf-8 -*- import requests import pandas as pd import matplotlib.pyplot as plt from bs4 import BeautifulSoup list = [] #数据数组 def getWeb(url): #获取网页数据 try: r = requests.get(url) r.raise_for_status() return r.text except: return "响应失败" def getdata(html): #初始化 soup = BeautifulSoup(html, "html.parser") #选择器 table = soup.select("table.players_table.bott.bgs_table > tbody > tr.color_font1.borders_btm") #循环取出每组数据 for tables in table: datas = tables.get_text().split(\'\\n\') #去掉数据里的空元素 for i in datas: if len(i) == 0: datas.remove(i) #加入数据组 list.append(datas) #保存数据 fo = open("russellwestbrook.txt", "w+") #循环取出每组数据 for datas in list: #内循环单数据 for i in datas: fo.writelines(i + " ") print(i) #大循环换行 fo.writelines("\\n") fo.close() def table(html): #设置空列表保存数据 list=[] soup = BeautifulSoup(html, "html.parser") #寻找球员各对手战队数据的助攻数,并添加进列表 for i in soup.find_all(\'tr\' ,class_=\'color_font1 borders_btm\'): j=i.select(\'td\')[11].text list.append(j) #将前六个对手战队的助攻数作为整型返回 results = ([int(x) for x in list[2:8]]) #设置图表绘制模式 plt.rcParams[\'font.sans-serif\'] = [\'SimHei\'] plt.rcParams[\'font.family\'] = \'sans-serif\' #绘制图表 s=pd.Series([results[0],results[1],results[2],results[3],results[4],results[5]],[\'马刺\',\'魔术\',\'骑士\',\'国王\',\'太阳\',\'猛龙\']) s.plot(kind=\'bar\',title=\'助攻数量\') plt.show() if __name__==\'__main__\': html = getWeb("https://nba.hupu.com/players/russellwestbrook-3016.html") getdata(html) table(html)
运行结果:
- 数据爬取与采集
# -*- coding: utf-8 -*- import requests import pandas as pd import matplotlib.pyplot as plt from bs4 import BeautifulSoup list = [] #数据数组 def getWeb(url): #获取网页数据 try: r = requests.get(url) r.raise_for_status() return r.text except: return "响应失败" def getdata(html): #初始化 soup = BeautifulSoup(html, "html.parser") #选择器 table = soup.select("table.players_table.bott.bgs_table > tbody > tr.color_font1.borders_btm") #循环取出每组数据 for tables in table: datas = tables.get_text().split(\'\\n\') #去掉数据里的空元素 for i in datas: if len(i) == 0: datas.remove(i) #加入数据组 list.append(datas)
- 数据取出与保存
#保存数据 fo = open("russellwestbrook.txt", "w+") #循环取出每组数据 for datas in list: #内循环单数据 for i in datas: fo.writelines(i + " ") print(i) #大循环换行 fo.writelines("\\n") fo.close() def table(html): #设置空列表保存数据 list=[] soup = BeautifulSoup(html, "html.parser") #寻找球员各对手战队数据的助攻数,并添加进列表 for i in soup.find_all(\'tr\' ,class_=\'color_font1 borders_btm\'): j=i.select(\'td\')[11].text list.append(j) #将前六个对手战队的助攻数作为整型返回 results = ([int(x) for x in list[2:8]])
- 数据可视化
#设置图表绘制模式 plt.rcParams[\'font.sans-serif\'] = [\'SimHei\'] plt.rcParams[\'font.family\'] = \'sans-serif\' #绘制图表 s=pd.Series([results[0],results[1],results[2],results[3],results[4],results[5]],[\'马刺\',\'魔术\',\'骑士\',\'国王\',\'太阳\',\'猛龙\']) s.plot(kind=\'bar\',title=\'助攻数量\') plt.show() if __name__==\'__main__\': html = getWeb("https://nba.hupu.com/players/russellwestbrook-3016.html") getdata(html) table(html)
- 经过对主题数据的分析与可视化,可以得到哪些结论?
易看出助攻的数量在猛龙与太阳队最多,在马刺队最少。
- 对本次程序设计任务完成的情况做一个简单的小结。
由于自己对于requests库的不熟练,无法把爬虫做到面面俱到,经过这次任务加深了我对python爬虫的认识也加深了我对爬虫学习的兴趣。
以上是关于Python高级应用程序设计任务要求的主要内容,如果未能解决你的问题,请参考以下文章