青春有你2选手图片爬取

  • 1、day01 Python基础练习
  • 2、day02 青春有你2选手信息爬取
    • 2.1、爬取百度百科中《青春有你2》中所有参赛选手信息,返回页面数据
    • 2.2、对爬取的页面数据进行解析,并保存为JSON文件
    • 2.3、爬取每个选手的百度百科图片,并进行保存
    • 2.4、打印爬取的所有图片的路径
  • 3、day03《青春有你2》选手数据分析
    • 3.1、绘制选手区域分布柱状图
    • 3.2、对选手体重分布进行可视化,绘制饼状图
  • 4、心得体会

1、day01 Python基础练习

第一题,输出乘法口诀表:

def table():#在这里写下您的乘法口诀表代码吧!for i in range(1,10):row=""for j in range(1,i+1):row+="{0}*{1}={2} " .format(j,i,i*j)print(row)if __name__ == '__main__':table()

这题参照博客写的

第二题,遍历”Day1-homework”目录下文件;找到文件名包含“2020”的文件;将文件名保存到数组result中;按照序号、文件名分行打印输出。

#导入OS模块
import os
#待搜索的目录路径
path = "Day1-homework"
#待搜索的名称
filename = "2020"
#定义保存结果的数组
result = []def findfiles():#在这里写下您的查找文件代码吧!for root, dirs, files in os.walk(path):# 遍历输出所有文件路径for name in files:# print(os.path.join(root, name))if filename in name:result.append(os.path.join(root, name))for k in result:print(result.index(k), ':', k)# 遍历输出目录路径# for name in dirs:#     print(os.path.join(root, name))if __name__ == '__main__':findfiles()

文件读写要牢记,很实用的。

import json
import re
import requests
import datetime
from bs4 import BeautifulSoup
import os#获取当天的日期,并进行格式化,用于后面文件命名,格式:20200420
today = datetime.date.today().strftime('%Y%m%d')    def crawl_wiki_data():"""爬取百度百科中《青春有你2》中参赛选手信息,返回html"""headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}url='https://baike.baidu.com/item/青春有你第二季'                         try:response = requests.get(url,headers=headers)print(response.status_code)#将一段文档传入BeautifulSoup的构造方法,就能得到一个文档的对象, 可以传入一段字符串soup = BeautifulSoup(response.text,'lxml')#返回的是class为table-view log-set-param的<table>所有标签tables = soup.find_all('table',{'class':'table-view log-set-param'})crawl_table_title = "参赛学员"for table in  tables:           #对当前节点前面的标签和字符串进行查找table_titles = table.find_previous('div').find_all('h3')for title in table_titles:if(crawl_table_title in title):return table       except Exception as e:print(e)

2、day02 青春有你2选手信息爬取

2.1、爬取百度百科中《青春有你2》中所有参赛选手信息,返回页面数据

import json
import re
import requests
import datetime
from bs4 import BeautifulSoup
import os#获取当天的日期,并进行格式化,用于后面文件命名,格式:20200420
today = datetime.date.today().strftime('%Y%m%d')    def crawl_wiki_data():"""爬取百度百科中《青春有你2》中参赛选手信息,返回html"""headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}url='https://baike.baidu.com/item/青春有你第二季'                         try:response = requests.get(url,headers=headers)print(response.status_code)#将一段文档传入BeautifulSoup的构造方法,就能得到一个文档的对象, 可以传入一段字符串soup = BeautifulSoup(response.text,'lxml')#返回的是class为table-view log-set-param的<table>所有标签tables = soup.find_all('table',{'class':'table-view log-set-param'})crawl_table_title = "参赛学员"for table in  tables:           #对当前节点前面的标签和字符串进行查找table_titles = table.find_previous('div').find_all('h3')for title in table_titles:if(crawl_table_title in title):return table       except Exception as e:print(e)

2.2、对爬取的页面数据进行解析,并保存为JSON文件

def parse_wiki_data(table_html):'''从百度百科返回的html中解析得到选手信息,以当前日期作为文件名,存JSON文件,保存到work目录下'''bs = BeautifulSoup(str(table_html),'lxml')all_trs = bs.find_all('tr')error_list = ['\'','\"']stars = []for tr in all_trs[1:]:all_tds = tr.find_all('td')star = {}#姓名star["name"]=all_tds[0].text#个人百度百科链接star["link"]= 'https://baike.baidu.com' + all_tds[0].find('a').get('href')#籍贯star["zone"]=all_tds[1].text#星座star["constellation"]=all_tds[2].text#身高star["height"]=all_tds[3].text#体重star["weight"]= all_tds[4].text#花语,去除掉花语中的单引号或双引号flower_word = all_tds[5].textfor c in flower_word:if  c in error_list:flower_word=flower_word.replace(c,'')star["flower_word"]=flower_word #公司if not all_tds[6].find('a') is  None:star["company"]= all_tds[6].find('a').textelse:star["company"]= all_tds[6].text  stars.append(star)json_data = json.loads(str(stars).replace("\'","\""))   with open('work/' + today + '.json', 'w', encoding='UTF-8') as f:json.dump(json_data, f, ensure_ascii=False)

2.3、爬取每个选手的百度百科图片,并进行保存

def crawl_pic_urls():'''爬取每个选手的百度百科图片,并保存''' with open('work/'+ today + '.json', 'r', encoding='UTF-8') as file:json_array = json.loads(file.read())headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' }for star in json_array:print(star)name = star['name']link = star['link']response = requests.get(link,headers=headers)bs = BeautifulSoup(response.text,'lxml')pic_list_url = bs.select('.summary-pic a')[0].get('href')pic_list_url = 'http://baike.baidu.com'+pic_list_urlpic_list_response = requests.get(pic_list_url,headers=headers)# 解析图片列表页面bs = BeautifulSoup(pic_list_response.text,'lxml')pic_list_html = bs.select('.pic-list img ')pic_urls=[]for pic_html in pic_list_html:pic_url = pic_html.get('src')pic_urls.append(pic_url)#!!!根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中!!!down_pic(name,pic_urls)# if __name__ == '__main__':
#     crawl_pic_urlsdef down_pic(name,pic_urls):'''根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中,'''path = 'work/'+'pics/'+name+'/'if not os.path.exists(path):os.makedirs(path)for i, pic_url in enumerate(pic_urls):try:pic = requests.get(pic_url, timeout=15)string = str(i + 1) + '.jpg'with open(path+string, 'wb') as f:f.write(pic.content)print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))except Exception as e:print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))print(e)continue

2.4、打印爬取的所有图片的路径

def show_pic_path(path):'''遍历所爬取的每张图片,并打印所有图片的绝对路径'''pic_num = 0for (dirpath,dirnames,filenames) in os.walk(path):for filename in filenames:pic_num += 1print("第%d张照片:%s" % (pic_num,os.path.join(dirpath,filename)))           print("共爬取《青春有你2》选手的%d照片" % pic_num)
if __name__ == '__main__':#爬取百度百科中《青春有你2》中参赛选手信息,返回htmlhtml = crawl_wiki_data()#解析html,得到选手信息,保存为json文件parse_wiki_data(html)#从每个选手的百度百科页面上爬取图片,并保存crawl_pic_urls()#打印所爬取的选手图片路径show_pic_path('/home/aistudio/work/pics/')print("所有信息爬取完成!")

3、day03《青春有你2》选手数据分析

3.1、绘制选手区域分布柱状图

import matplotlib.pyplot as plt
import numpy as np
import json
import matplotlib.font_manager as font_manager#显示matplotlib生成的图形
%matplotlib inlinewith open('data/data31557/20200422.json', 'r', encoding='UTF-8') as file:json_array = json.loads(file.read())#绘制小姐姐区域分布柱状图,x轴为地区,y轴为该区域的小姐姐数量zones = []
for star in json_array:zone = star['zone']zones.append(zone)
print(len(zones))
print(zones)zone_list = []
count_list = []for zone in zones:if zone not in zone_list:count = zones.count(zone)zone_list.append(zone)count_list.append(count)print(zone_list)
print(count_list)# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体plt.figure(figsize=(20,15))plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)plt.legend()
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/bar_result.jpg')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
import json
import matplotlib.font_manager as font_manager
import pandas as pd#显示matplotlib生成的图形
%matplotlib inlinedf = pd.read_json('data/data31557/20200422.json')
#print(df)grouped=df['name'].groupby(df['zone'])
s = grouped.count()zone_list = s.index
count_list = s.values# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体plt.figure(figsize=(20,15))plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)plt.legend()
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/bar_result02.jpg')
plt.show()

3.2、对选手体重分布进行可视化,绘制饼状图

import matplotlib.pyplot as plt
import numpy as np
import json
import matplotlib.font_manager as font_manager
import pandas as pd#显示matplotlib生成的图形
%matplotlib inline# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_json('data/data31557/20200422.json')
#print(df)grouped=df['name'].groupby(df['weight'])
s = grouped.count()
# print(s)
area = df['weight'].value_counts()
# print(area)
print(list(area))
pct = [format(i/sum(list(area)),'.1%') for i in list(area)]
# print(pct)
text_label = ['{}({})'.format(i[0], i[1]) for i in zip(list(area.index), pct)]
# print(text_label)
fig, ax = plt.subplots(figsize=(12, 12*0.618), subplot_kw=dict(aspect="equal"))
explode = [0.02] * len(area)
wedges, texts = ax.pie(list(area), labels=text_label,autopct=None,wedgeprops=None,startangle=0, explode=explode)
plt.title('''《青春有你2》参赛选手体重分布''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/bar_result05.jpg')
plt.show()

4、心得体会

百度很良心,下次还参加。

百度飞桨之python小白逆袭训练营相关推荐

  1. PaddleHub百度飞桨【Python小白逆袭大神】七天打卡营心得

    第一次接触百度的paddlehub,之前有参加过CV疫情的打卡营,但是没坚持把作业做下来.这次参加打卡营吧几次作业都跟下来了.因为作者本人是做计算机视觉方向的,python之前使用的多为OpeanCV ...

  2. 百度飞桨深度学习Python小白逆袭大神7日结营心得

    很有幸参加了百度飞桨的Python小白逆袭大神7天打卡营.七天的学习已经接近了尾声.现在回顾一下这次的课程,收获颇丰.相信很多参加的学员都感受颇丰,从小白入门到自主大作业完成,我们不仅了解了深度学习的 ...

  3. python画饼图_百度飞桨PaddlePaddle之[Python小白逆袭大神]7天训练营

    第三次参加百度的7天训练营了 这次参加的主题是[Python小白逆袭大神],不过你别看是小白逆势...除非你一开始参加就逆袭完,不然你真的是python小白,这个课程还是有难难度的. 说一下个训练营的 ...

  4. Python小白逆袭大神七日打卡营飞桨paddlepaddle

    这里写自定义目录标题 Python小白逆袭大神七日打卡营全纪录 day1-Python基础 day2-<青春有你2>选手信息爬取 day3-<青春有你2>选手数据分析 day4 ...

  5. 我在百度Python小白逆袭大神课程中“打怪”欢乐之旅

          本文描述了作者在参加百度Python小白逆袭大神课程一些亲身经历,从开始的半信半疑,到最后坚定的革命信念,给没有参加过百度课程的同学一点参考,文中有高质量的数据分析.pyecharts动态 ...

  6. 百度深度学习paddlepaddle7日打卡——Python小白逆袭大神学习心得

    百度深度学习paddlepaddle7日打卡--Python小白逆袭大神学习心得 7日学习总结 第一天作业 第二天作业 第三天作业 第四天作业 第五天作业 7日学习总结 通过这7日打卡课程的学习,从小 ...

  7. Python小白逆袭大神-结营心得-alading

    Python小白逆袭大神-结营心得 赶在五一前结束的Python小白逆袭大神7天打卡营结束了,经过了7天的练习,我觉得收获还是很多的.经过整理总结,进行分享. 1. 本期培训重点 本期集训营主要是一些 ...

  8. python小白逆袭大神_python小白逆天(3),Python,小白逆袭,大神,三

    Python小白逆袭大神 作业三 作业: 对<青春有你2>对选手体重分布进行可视化,绘制饼状图 这个作业是根据第二天爬取获得的json文件进行数据的处理课可视化. with open('d ...

  9. 百度飞桨(Python+AI)入门

    第一次参加百度飞桨深度学习Python+AI的打卡训练营,整体课程由浅入深,连续每晚通过B站直播方式向我们介绍理论基础及实践操作,并且通过实践作业打卡和及时讲解让我们巩固知识的同时又能查漏补缺. 百度 ...

最新文章

  1. matlab内存管理(二)
  2. Upgrade after a crash is not supported. The redo log was created with Maria的解决办法
  3. 解密!谷歌这样搞定美军世纪难题,从眼科诊断到无人驾驶
  4. python语言需要变量生明吗_python需要定义变量吗
  5. vsphere通用配置_Mac环境下如何用Hexo+Github搭建个人博客
  6. % 在C语言中的用法
  7. Process Node.js 进程
  8. HDU-2036 改革春风吹满地 (多边形面积求解)
  9. Hello World程序的起源与历史
  10. SqlSessionFactoryBean
  11. Hadoop学习之旅
  12. fs2410开发板搭建网站服务器,FS2410开发板使用步骤
  13. 百度地图点聚合开发-地图找房功能
  14. 小米手机 MIUI稳定版刷成开发版怎么操作?
  15. 中国企业培训的十大缺陷(zt)
  16. CKEditor配置使用
  17. win10系统电池图标不见了怎么恢复
  18. API等级和Android版本对应关系以及历史
  19. 码蹄集 - MT2165 - 小码哥的抽卡之旅1
  20. c语言是学电脑吗,c语言入门至精通这些天一直有人问我,c语言好学吗?我是个新手...

热门文章

  1. python functools模块方法
  2. 怎么更改滚动条的位置php,给网站顶部添加一个滚动条位置百分比教程
  3. java 线程 定时器_java 多线程定时任务
  4. 度度熊的01世界 DFS
  5. OpenCV——解决使用rectangle()函数时出现“TypeError: function takes exactly 4 arguments (2 given)”错误
  6. Python中的数据遍历操作
  7. 给定随机数列求第k大的数字
  8. 【多线程】什么是线程安全?
  9. 算法不会,尚能饭否之折半查找(Binary search)
  10. RportViewer(20121023) 参数引起的异常