社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

今天你教高考生一个装逼神技!利用Python爬取历年高考成绩!

Python学习交流 • 5 年前 • 477 次点击  



2.爬取数据

1.获取各省的分数线信息



获取各省份的链接:


# 获取分数线 def get_score(url): 
 web_data = requests.get(url, headers=header) 
 soup = BeautifulSoup(web_data.content, 'lxml') 
 # 获取省份信息 
 provice = soup.select('.col-nav span')[0].text[0:-5] 
 # 获取文理科 
 categories = soup.select('h3.ft14'


    
) 
 category_list = [] 
 for item in categories: 
 category_list.append(item.text.strip().replace(' ', ''))#替换空格 
 # 获取分数 
 tables = soup.select('h3 ~ table') 
 for index, table in enumerate(tables): 
 tr = table.find_all('tr', attrs={'class': re.compile('^c_\S*')})#使用正则匹配 
 for j in tr: 
 td = j.select('td') 
 score_list = [] 
 for k in td: 
 # 获取每年的分数 
 if 'class' not in k.attrs: 
 score = k.text.strip() 
 score_list.append(score) 
 
 # 获取分数线类别 
 elif 'class' in k.attrs: 
 score_line = k.text.strip() 
 
 score_data = { 
 'provice': provice.strip(),#省份 
 'category': category_list[index],#文理科分类 
 'score_line': score_line,#分数线类别 
 'score_list'


    
: score_list#分数列表 
 } 
 score_detail.insert_one(score_data)#插入数据库 


3.数据可视化

爬取数据只是第一步,接下来就要对数据进行处理展示了。从mongodb 中查找出数据,对数据进行清洗整理,由于我这里的pyecharts有点问题,所以使用echarts进行展示

1).筛选省份等信息

直接通过mongodb的find函数,限制查找的内容

import pymongo 
import charts 
client = pymongo.MongoClient('localhost', 27017) 
gaokao = client['gaokao'] 
score_detail = gaokao['score_detail'] 
 
# 筛选分数线、省份、文理科 
def get_score(line,pro,cate): 
 score_list=[] 
 for i in score_detail.find({"$and":[{"score_line":line},{"provice":pro},{'category': cate}]}): 
 score_list = i['score_list'] 
 score_list.remove('-')#去掉没有数据的栏目 
 score_list = list(map(int, score_list)) 
 score_list.reverse() 
 return score_list 

2).定义相关数据




    
# 获取文理科分数 line = '一本' 
pro = '北京' 
cate_wen = '文科' 
cate_li = '理科' 
wen=[] 
li = [] 
wen=get_score(line,pro,cate_wen)#文科 li=get_score(line,pro,cate_li)#理科 
 
 # 定义年份 year = [2017,2016,2015,2014,2013,2012,2011,2010,2009] 
year.reverse() 

3).折线图展示

series = [ 
 { 
 'name': '文 科', 
 'data': wen, 
 'type': 'line' }, { 
 'name': '理科', 
 'data': li, 
 'type': 'line', 
 'color':'#ff0066' } 
 ] 
options = { 
 'chart' : {'zoomType':'xy'}, 
 'title' : {'text': '{}省{}分数线'.format(pro,line)}, 
 'subtitle': {'text': 'Source: gaokao.com'}, 
 'xAxis' : {'categories': year}, 
 'yAxis' : {'title': {'text': 'score'


    
}} 
 } 
 
charts.plot(series, options=options,show='inline')

进群:125240963   即可获取源码!!





今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/AM0gdZOaau
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/13559
 
477 次点击