paddle之《Python小白逆袭大神》小记(上)
paddle之《Python小白逆袭大神》小记(上)
第一次听说AI Studio上的课程是在去年冬天班主任老师为我们推荐的。然而当时考(lan)试(ai)太(fa)多(zuo) ,自己又是小白担心没有基础无法完成,所有无心去搞。这学期学院王老师又大力推鉴,也是想充实一下在家的生活吧,就报名参加了百度深度学习7日打卡第六期:Python小白逆袭大神的活动。
事实证明,我来对了。
Day-1:python基础练习
第一天的作业主要是关于python的基础操作,比较容易。
作业一:输出 9*9 乘法口诀表(注意格式)
def table():
#在这里写下您的乘法口诀表代码吧!
for i in range(1, 10):
for j in range(1, i+1):
k = i*j
print(j, '*', i, '=', k, end = '\t')
#print('%d * %d = %d '%(j,i, i*j),end='\t')
print()
if __name__ == '__main__':
table()
作业二:查找特定名称文件,遍历”Day1-homework”目录下文件,找到文件名包含“2020”的文件,将文件名保存到数组result中;
#导入OS模块
import os
#待搜索的目录路径
path = "Day1-homework"
#待搜索的名称
filename = "2020"
#定义保存结果的数组
result = []
def findfiles():
#在这里写下您的查找文件代码吧!
i = 0
for root, dirs, files in os.walk(path):
# root 表示当前正在访问的文件夹路径
# dirs 表示该文件夹下的子目录名list
# files 表示该文件夹下的文件list
# 遍历文件
for f in files:
if filename in f:
i += 1
#连接路径
f=os.path.join(root, f)
print(i,",'" ,f,"'", end = '\n')
result.append(f)
if __name__ == '__main__':
findfiles()
ps:思路都比较清晰,但是好久没有用python真的感觉生疏了…在学校写大作业用C++比较多,遇到for/if总想着加括号…还是短练啊。
Day-2:《青春有你2》选手信息爬取
感觉第二天作业难度陡然上升,利用爬虫爬取小姐姐的图片。虽然班主任在视频中具体讲解了爬取办法,总结一下分为以下几步:
- 了解网页:利用开发者工具查看需要的标签类别和名字。
- 利用requests库爬取网页信息
- 利用BeautifulSoup解析网页
- 组织数据
在对每位选手爬取图片的部分,老师给的参考代码如下:
#获取解析界面,拼接第一层链接:选手百度百科词条中的summary—pic
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='https://baike.baidu.com'+pic_list_url
#第二层链接:选手图册
pic_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 = []
response = requests.get(url = link, headers = headers)
soup = BeautifulSoup(response.text, 'lxml')
href = 'https://baike.baidu.com' + soup.select('.summary-pic a')[0].get('href')
response = requests.get(href, headers = headers)
soup = BeautifulSoup(response.text, 'lxml')
div_target = soup.find('div', {'class':'pic-list'})
pic_list = div_target.find_all('a')
for pic in pic_list:
try:
pic_url = 'https://baike.baidu.com' + pic.attrs['href']
except:
pass
data = requests.get(pic_url, headers = headers)
soup = BeautifulSoup(data.text, 'lxml')
image_url = soup.find('img',{'id':'imgPicture'}).attrs['src']
pic_urls.append(image_url)
然而,这样依然存在问题…
遇到的问题
这样的爬取方法最终获得的结果是490张图片!注意,先前的方法爬取了482张!归根结底,是因为王姝慧选手的图册第31-38张图片是动态渲染的,也就是说,30-38张使用的都是第30张图的url。
附上一位大佬的链接,较为详细的分析了这个问题:
Day-3《青春有你2》选手数据分析
第三天的任务是对《青春有你2》对选手体重分布进行可视化,绘制饼状图,相对比较容易,略去完整代码。
遇到的问题
- 可视化时汉字被方框替代
解决方法有两种:重启系统和重新加载汉字… - 图例的完整表示
#修改前
plt.legend(labels = ['选手数'])
#修改后
plt.legend(labels = ['选手数',])
左图为修改前,右图为修改后