很多人都觉得35岁是个坎。
但是人一辈子总会面临各种选择,人生也会经历起起伏伏。
如何去接受这些变化,去打破僵局,才是我们最应该去思考的。
我们扇贝的编程之星——冯大少,作为黄帮主的学生,跟很多同学一样都是零基础学python的新手小白,毅然选择在39岁这个做什么都有很多顾虑的年纪,跳出了舒适圈,这份破釜沉舟、一往无前的勇气值得我们去敬佩。
让我们一起听一听,冯大少39岁再出发的人生故事。
Python小白从零开始
大家好,我叫冯大少,在船运公司从事了10多年的管理工作,航运工作比较单一,而且经常加班,于是我萌生了转行的想法。
2020年3月,我在微信偶然看到了编程学习的推荐,当时出于兴趣,参加了体验课。在闻闻老师的指引下,我开始初步了解和学习Python,我的工作转机就此开始。
在接触Python前,我觉得无论是Python, C++, 还是Java, 都是比较枯燥的。我毕业于通信工程专业,在大学期间学习过C++语言,但毕业后很少应用,基本都忘记了。
刚接触Python的我,几乎是从零开始学习。
从小我只对计算机硬件感兴趣,而如今要重新学习编程语言,说实话还是很担心学不出成效来。
一开始,我带有比较抗拒的情绪,但通过4节体验的交互课学习,大大改变了我的看法,我不仅学到了Python知识,更重要的是锻炼了我的思维,也就是一种计算机思维。
为了兴趣,也为了我自己未来的的发展,我相信我能学好它。
勤思考多练习,事半功倍
然而这只是跨过Python学习的第一道门槛,经过老师对后续课程的简单介绍,我决定继续学习。
有黄帮主等老师的答疑,也有很多同学讨论、提问,学习氛围很好,甚至有些学得比较快的、基础好的同学参与答疑,但我觉得自己和他们的差距比较大,学习的进度不理想。
所以,我为了强化记忆,天天都死记硬背每一节的知识要点,可越往后越发现这方法行不通。
我的大伯是一名已经退休的某重点大学的计算机专业教授。堂哥高中在多次全国奥数、计算机比赛中获得第一,被保送到国外大学,毕业后一直在微软总公司工作。堂弟在国外某科技公司从事软件开发的工作。堂姐在某500强的外资公司担任网络安全总监。
出生在计算机世家的我,却一直对计算机不感兴趣,导致我毕业之后还是计算机小白。
为了更好更有效率地学习,我在网络上向亲戚们请教学习编程的技巧。
原来学习这门课程,死记硬背是不行的,只有跟随老师的知识要点,先自己理解,再反复练习才可以事半功倍。
学习条件语句时,我刚开始有点懵,后来想了想,原来与日常使用的 Excel里的if函数中单向分支和双向分支的思路同理。
通过这个类比,我深刻理解了这节课的知识点,同时我也明白了方法不是唯一的,只要多思考,问题终能解决。
破茧成蝶,重获新生
经过半年的学习,我终于把基础知识、爬虫知识和数据分析这三科学完。
在这个过程中我收获很多,尤其是Selenium 自动化这一板块,非常有趣,课后通过对这一部分内容拓展学习,我掌握了更多知识。
总的来说,在学习过程中,遇到问题时,首先要自己想办法、找原因,不要马上问别人,依赖别人给你答案。
可以自己先在网上参考一些资料或者相关的解决方案,遇到报错情况,不要怕,要分析报错提示,最好能想出多种组合的可能性去尝试、去测试。
正如黄帮主所说,具体问题具体分析,就好像我们在构思代码时,也要分清什么时候要用面对过程的思路,什么时候用面对对象的思路,每个人的思维习惯不一样,但总会找到适合自己的学习方法。
经过半年左右的学习和题海战术,我顺利通过了2020年的Python二级考试。
船运公司合并重组后,我也换了工作,目前在一家提供信息服务的公司做爬虫的工作。
从管理岗到普通员工,心理落差是有的。但是既然认定了方向,就勇往直前吧。
学以致用,效率神速
Python的应用让我极大地提高了工作效率, 最后简单地分享介绍两个在日常工作中使用Selenium 和 Scrapy的例子。
1、Selenium 的应用——快速查询信息并下载,筛选所需信息
以著名的日本船公司ONE为例,当打开官网后,在 “SCHEDULE” 里,首先对 “Origin” 定位,
origin=browser.find_element_by_id('oriLocNm')
然后在输入框里,通过
origin.send_keys('SHEKOU, GUANGDONG, CHINA')
进行填充。
再对 “Destination” 定位,
destination = browser.find_element_by_id('destLocNm')
然后在输入框里,通过
destination.send_keys('HAMBURG, HH, GERMANY')
进行填充。
在 “Destination” 下,可见还有一个 “Period” 的 date range,网页默认为当天的日期开始计算1个月的时间范围,可以选择这个默认的范围,或者改为自己所需的日期范围。例如,选择从06/20/2021 - 06/28/2021
在 “Period” 包括 开始日期 ( name="srtDt") 和结束日期 (name="endDt"),在填充前,首先要通过clear()方法,把网页自带的日期先清除。
定位 “View”
view = browser.find_element_by_id('btnSchedule')
通过view.click() 的方法,执行查询。
浏览器自动打开一个新的分窗口,显示了各种的信息,定位 “Download”,然后执行下载。
下载了 Excel 后,还可以通过在数据分析课里学到的 Pandas 快速查询所需的信息。
读取下载的Excel, 例如我要查询相关的 Doc/VGM Cut off 和 Vessel/Voyage,代码如下:
df = pd.read_excel('Point to Point Schedule.xlsx')
print(df[['Doc/VGM Cut off','Vessel/Voyage']])
看看输出是什么样子,下图可以看到,在第一行却显示了 NaN ( Not a Number),而且在 Doc/VGM Cut off 这一列,还多了一个换行符 “\n”。
再打开下载的 Excel 观察,发现第一,二行是合拼了单元格,而且 Doc/VGM Cut off 这一列的每个单元格里,是用了 “Ctrl + Enter” 的换行方式。
在了解原因后,可以通过匿名函数 lambda 把换行符去掉,再把第一行的 NaN 删除。
代码如下:
df['Doc/VGM Cut off'] = df['Doc/VGM Cut off'].apply(lambda x:str(x).replace('\n',''))
df.drop(0, inplace=True)
最终的输出结果。
通过 Selenium,我们可以设定所需要的条件,达到自动下载符合条件的文件,减少手动选择的重复动作。
2、 Scrapy的应用: 快速下载多页的信息和相关超链接
同样也是通过ONE的官网,首先打开所有官方发布的消息页面。所有的消息,都是嵌套在 class=” news-list” 的 <div> label 里,而消息的超链接和内容分别是在一个 label和label 里。
然后定位 “Next Page”, 找到所有消息的超链接
response.css('div.news-list a::attr(href)').getall()
以及所有消息标题
response.css('div.news-list h3::text').getall()
编写完整的代码,如下:
最后打开输出的文件,就得到一份包括消息标题和相对应的超链接。这样我们就可以搜索想看的消息,同样,也可以应用Pandas去实现各种方法。
通过应用Scrapy爬取我们所需的信息,大大地提高工作效率,避免用手动逐个点击 “Next Page”去获取每一分页的内容。
通过以上两个在工作中的实例,相信同学们能感到自动化的强大和高效。
在 Selenium这部分,还有其它更加强大的应用,例如 Select库、ActionChains库,以及还可以结合 Java Script的应用等。有兴趣的同学,可以课外拓展学习。
让每个人都能通过学习变得更好
在文章的最后,冯大少再三感谢在学习编程的道路上遇见的每一位老师,也为努力毕业的同学们加油打气。
感谢冯大少的学习分享!黄帮主相信只要各位同学坚持系统性持续学习,加上大量的练习,肯定能开拓出属于自己的发展道路。