感谢那个勇敢的自己——苦尽甘来,我的数据转行之旅终于顺利通行!

一位94年大专毕业生分享了从广告会展行业转行至数据分析领域的经历,通过五个月的努力,克服困难,最终获得心仪offer。文章强调了自我提升、专注学习和明确职业目标的重要性。

更多精彩推荐,请关注我们

作者 | CDA就业班·毕业学员

坐在新的办公室,开始我转行后的第一天工作。回忆整个时间历经五个月,真的是五味杂陈,期间有过欢笑,有过痛苦,也有过迷茫和焦虑,但一切都将苦尽甘来——昨天刚和就业老师谈心,说了自己已经收到offer,也想就自己的转行之路分享一下这一路以来的几点人生心得,希望可以帮到也想转行到数据分析行业的你:

01

想要得到从来没有得到的东西,就要去做从没有做过的事情

我94年大专毕业,16年8月就误打误撞的进入广告会展行业,自己一直也说不上到底是否喜欢这个行业,但是刚毕业自己也不知道自己喜欢什么。只能把手上的工作先做好,能在上海这个大城市生存下来。工作的三年大大小小的项目都做过不少。有被客户刁难过的泪水,也有被客户认可的尊重。总体工作下来有成长。就自己对目前行业的理解和自己优劣势的分析,发现自己在软技能方面没有任何的发展,到现在自己在办公室软件的应用方面停留在小白的阶段,更多的是工作沟通技能,人际交往和跨部门协作方面有很大的提升。平时客户量多的时候,自己发现数据的重要性。然后自己在空闲的时间查资料了解数据行业的发展和未来前景,为转行做前期的准备。

02

挥洒汗水,痛并快乐着

在网上再三对比市面上的培训机构,北风网侧重可能是工程师的课程,CDA的教程比较偏入门和基础逻辑的教程。自己本身专业和工作性质都是偏文科类的,理工内容知识几乎都停留在初中阶段,高中概率数学也开始忘记了。所以选择会侧重容易上手的。刚开始全职脱产学习的一个星期特别痛苦,因为上课的知识点特别多。课程内容都是我平时都不擅长的,注意力需要全身心集中,高强度又高密度。因为有一分钟分心差不多一节课的内容都会拉半拍。晚上自习补课上的内容会超级痛苦,因为都是小的知识点贯穿一个小的知识点。同学彼此之间互相鼓励,互相学习。然后一起共同进步,一起熬夜学习和聚餐,也同时结交了志同道合的朋友。

03

找工作的迷茫和焦虑,都是每个人所面对的

八月底答辩结束之后面临九月份的就业季,其实自己有过3年的业务工作经验,对业务的理解和客户的需求和自身的优势衡量会更适合数据运营。课程内容后半部分的机器学习是自己完全用不上,自己对这方面也是完全都掌握不了,最多只能懂基本的底层逻辑。工作选择投简历的时候发现数据运营其实招聘公司对岗位没有很深入的了解,甚至都不知道数据运营在公司能起到什么样的作用。所有面试自己也比较佛系,边出去玩边对收到的面试公司进行简单的筛选。以确保工作内容和薪资待遇是我自己想要的。海投简历会让自己陷入更焦虑,后续自己在投简历的时候进行精投。幸运的是在国庆后收到心仪公司的面试邀请,开始自己新的人生旅程。

最后,也祝福各位在读的CDA小伙伴能够学有学成,前程似锦!

下面给大家介绍一下我的学习课程——CDA数据分析就业班,希望有致力于加入数据分析行业的朋友,可以和我一样,在CDA学习的这几个月里,开启人生新的方向,让我们都可以由此出发,走得越来越远,也发展得越来越好!

CDA数据分析就业班

CDA数据分析就业班课程是专门为想要从事数据分析类工作所研发的精品课程,该课程包含Excel、数据库、Power BI 、Tableau等业务数据分析相关内容以及数据挖掘的数学基础、SPSS软件基础、运用SPSS构建统计模型、Python基础、数据清洗、网络爬虫、Python机器学习等数据挖掘和机器学习相关内容,并结合评分卡、电商、零售等实战项目案例课程,帮助学员迅速掌握业务数据分析、数据挖掘、机器学习相关岗位技能,学员毕业后可推荐相关工作岗位。

专业师资团队为你保驾护航

 CDA部分学员就业信息 

CDA数据分析师就业班截至目前已累计在北京、上海、深圳、广州、成都、合肥、西安、郑州等地举办七十余期培训,培训学员数千名,就业率95%以上,平均薪资8500元+,在全国各地各大公司从事数据分析师的职务。

图为部分成都CDA就业班学员就业信息,因充分考虑学员隐私问题,仅提供部分信息,更详细就业情况欢迎到校区了解。

左右滑动查看更多

 近 期 开 课 时 间 

数据分析就业班(3个月)

2019年12月29日开课/@成都&重庆&北京

大数据就业班(5个月)

2019年12月29日开课/@成都&重庆&北京

扫描下方二维码联系课程顾问,获取详细课程大纲、试听视频。

end.

    CDA 课程咨询

    联系人:史老师

    联系电话:18080942131

import requests import time from bs4 import BeautifulSoup import os import csv import queue import threading import random from concurrent.futures import ThreadPoolExecutor from fake_useragent import UserAgent import logging # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='crawler.log' ) # 全局变量 csv_lock = threading.Lock() header_written = False """生成待爬取的URL队列""" def getUrl(): urlQueue = queue.Queue() for i in range(0, 180, 20): # 0-160,每页20条,共9页 url = f"https://movie.douban.com/subject/36053256/comments?start={i}&limit=20&status=P&sort=new_score" urlQueue.put(url) return urlQueue """从URL队列获取内容并解析,带重试机制""" def getContent(urlQueue, max_retries=3): while True: try: # 使用timeout参数避免永久阻塞 url = urlQueue.get(timeout=5) except queue.Empty: logging.info("URL队列已空,退出内容获取线程") return retries = 0 while retries < max_retries: try: # 添加随机延迟,避免频繁请求 time.sleep(random.uniform(2, 5)) # 发送请求 html = requests.get(url, headers=getHeaders(), timeout=15) html.raise_for_status() # 检查HTTP状态码 # 检查是否被反爬 if "检测到有异常请求" in html.text: raise Exception("触发反爬机制") htmlValue = BeautifulSoup(html.text, 'html.parser') articles = htmlValue.select('.comment-item') # 验证是否获取到评论 if not articles: raise Exception("未找到评论元素,可能页面结构变化或被反爬") # 解析评论 comments = [] for article in articles: try: comment_info = article.select_one('span.comment-info') if not comment_info: continue # 提取用户名 user_name = comment_info.select_one('a').get_text(strip=True) if comment_info.select_one( 'a') else "匿名用户" # 提取评论时间 time_elem = comment_info.select_one('span.comment-time') comment_time = time_elem.get_text(strip=True) if time_elem else "未知时间" # 提取评论地点 location_elem = comment_info.select_one('span.comment-location') comment_place = location_elem.get_text(strip=True) if location_elem else "未知地区" # 提取评分 rate_elem = comment_info.select_one('span[class*="allstar"].rating[title]') comment_rate = rate_elem['title'] if rate_elem else "未评分" # 提取评论内容 content_elem = article.select_one('span.short') comment_content = content_elem.get_text(strip=True) if content_elem else "无内容" comments.append([user_name, comment_time, comment_place, comment_rate, comment_content]) except Exception as e: logging.error(f"解析评论时出错: {e}") continue # 批量保存评论 if comments: downloaderContent(comments) logging.info(f"成功处理页面: {url}, 获取到 {len(comments)} 条评论") break except requests.exceptions.RequestException as e: retries += 1 logging.warning(f"请求失败 ({url}): {e},尝试重试 ({retries}/{max_retries})") time.sleep(5 * retries) # 指数退避 except Exception as e: retries += 1 logging.error(f"处理页面时出错 ({url}): {e},尝试重试 ({retries}/{max_retries})") time.sleep(5 * retries) # 指数退避 else: logging.error(f"达到最大重试次数,跳过URL: {url}") urlQueue.task_done() # 标记任务完成 """生成随机请求头,增强反爬能力""" def getHeaders(): try: ua = UserAgent() return { 'User-Agent': ua.random, 'Referer': 'https://movie.douban.com/', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'TE': 'Trailers' } except Exception: # 备用User-Agent列表 user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11.5; rv:90.0) Gecko/20100101 Firefox/90.0' ] return { 'User-Agent': random.choice(user_agents), 'Referer': 'https://movie.douban.com/' } """线程安全的CSV写入,批量处理""" def downloaderContent(content): global header_written try: src = './qimocontent/' setDir(src) filename = os.path.join(src, 'douban_comments.csv') with csv_lock: file_exists = os.path.isfile(filename) with open(filename, 'a', newline='', encoding='utf-8-sig') as writer: f_csv = csv.writer(writer) if not file_exists or not header_written: f_csv.writerow(['用户名', '发表时间', '发表地点', '评级', '评论']) header_written = True f_csv.writerows(content) except Exception as e: logging.error(f"保存数据失败: {e}") """创建目录,增加异常处理""" def setDir(dirname): try: if not os.path.exists(dirname): os.makedirs(dirname) except Exception as e: logging.error(f"创建目录失败: {dirname}, 错误: {e}") """主函数,使用线程池管理并发""" def main(): start_time = time.time() logging.info("豆瓣评论爬虫启动...") try: # 初始化队列 url_queue = getUrl() # 使用线程池控制并发 with ThreadPoolExecutor(max_workers=3) as executor: for _ in range(3): # 创建3个工作线程 executor.submit(getContent, url_queue) # 等待所有任务完成 url_queue.join() logging.info(f"爬取完成!耗时: {time.time() - start_time:.2f}秒") logging.info(f"数据已保存到: ./qimocontent/douban_comments.csv") print(f"爬取完成!耗时: {time.time() - start_time:.2f}秒") print(f"数据已保存到: ./qimocontent/douban_comments.csv") except KeyboardInterrupt: logging.info("用户中断操作,程序退出") print("程序已被用户中断") except Exception as e: logging.critical(f"主程序异常: {e}", exc_info=True) print(f"程序发生严重错误: {e}") if __name__ == '__main__': main() 这是我对《苦尽甘来遇见你》在豆瓣网上的数据爬取的代码,但是爬取出来的数据有很多重复的,并且爬取到一定数据量后,就不允许爬取了,但我想爬取大约300条数据,可以根据我的要求帮我重新修改代码
06-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值