机缘
在CSDN这片浩瀚的技术海洋中,今天迎来了我创作的第256天纪念日。回望这段旅程的起点,心中不禁涌动着诸多感慨与感激。在这特别的日子里,我想与大家分享一下最初成为CSDN创作者的初心,以及这段旅程中的点滴机缘。
最初踏上CSDN这片土地,我的初心源自于实战项目中的经验分享。在软件开发的世界里,每一个项目都是一次全新的探索与挑战。我深知,在解决问题的过程中,那些让人头疼的bug、那些让人绞尽脑汁的优化方案,往往也是成长最快的时刻。因此,我渴望将这些宝贵的经验记录下来,与同行们共享,让后来者能够少走弯路,更快地迈向成功。
随着创作的深入,我发现CSDN不仅仅是一个分享经验的平台,更是一个技术交流的宝库。在这里,我遇到了来自五湖四海的开发者,他们有的初出茅庐,对技术充满好奇;有的则是经验丰富的老手,拥有独到的见解和深厚的底蕴。我们相互学习,相互启发,在每一次的交流中碰撞出思想的火花。
同时,我也意识到,创作不仅仅是为了分享经验,更是一种自我提升的过程。在撰写文章的过程中,我需要不断地查阅资料、深入思考,确保每一个观点都经得起推敲。这种严谨的态度,不仅让我的技术水平得到了显著提升,更让我学会了如何更好地表达自己,如何让自己的想法更加清晰、有条理。
如今,站在CSDN创作的第256天,我深感荣幸与自豪。这段旅程中,我收获了知识、友谊和成长。每一次的点击、每一个点赞、每一条评论,都是对我创作的最大支持与鼓励。我深知,自己还有很多需要学习和提升的地方,但正是这些机缘,让我更加坚定了在CSDN这片土地上继续前行的决心。
展望未来,我将继续秉承初心,用心记录每一次的技术探索与成长历程,与更多的开发者共同分享、共同进步。我相信,在CSDN这片充满机遇与挑战的土地上,我们将携手创造更多的辉煌与可能。
感谢CSDN,感谢每一位支持我、陪伴我的开发者朋友。让我们携手前行,在技术的海洋中乘风破浪,共同书写属于我们的精彩篇章!
收获
在这个充满挑战与机遇的数字时代,CSDN不仅是我技术探索的灯塔,更是我心灵成长的沃土。今天,迎来了我在CSDN创作的第256天纪念日,心中满载着沉甸甸的收获与无尽的感激。在此,我想与各位分享这段旅程中的点点滴滴,以及我在创作过程中所获得的宝贵财富。
首先,最直观的收获便是那日益增长的粉丝数量。从最初的寥寥数人,到如今数千位志同道合的伙伴关注着我的每一次更新,这份信任与支持如同温暖的阳光,照亮了我前行的道路。
还记得每次写完文章都会经常看看阅读量和读者对我的一些意见,增加了多少关注,这些都是对我的认可,也满足了一下我的成就感,仿佛大家都在认可我,正是这种感觉激励着我继续深耕技术,分享更多有价值的内容。
除了粉丝的关注,我还收获了无数正向的反馈。无论是文章下方的点赞、评论,还是那不断攀升的阅读量,都是对我创作内容的直接肯定。这些反馈如同一股股清泉,滋润着我创作的热情,让我更加坚信,每一个字、每一句话,都能在这个平台上激起共鸣,引发思考。特别是那些深入讨论、提出建设性意见的评论,更是让我受益匪浅,促使我在技术探讨的道路上越走越远。
在CSDN这片广阔的天地里,我还有幸结识了许多志同道合的领域同行。他们有的是技术大拿,用深厚的专业知识为我答疑解惑;有的是初出茅庐的新手,用他们的好奇心和求知欲激发我不断探索未知的热情。我们在线上交流心得,线下相约探讨技术,这些珍贵的友谊,成为了我创作道路上不可或缺的力量源泉。
更为重要的是,这段创作经历让我学会了如何更好地表达自己,如何将复杂的技术知识转化为通俗易懂的语言,让更多人受益。我学会了倾听,学会了从读者的角度出发,思考他们真正需要的是什么。这种转变,不仅提升了我的写作能力,更让我在人际交往中变得更加敏锐和体贴。
总之,CSDN的256天创作之旅,是我人生中一段难忘的经历。它让我收获了知识、友谊、成长,更重要的是,它让我找到了属于自己的声音,让我有勇气在这个瞬息万变的世界中,坚持自己的热爱,不断前行。未来,我将继续秉承初心,用文字记录技术的魅力,与更多志同道合的伙伴共同探索未知,创造更多可能。
日常
- 创作,于我而言,已经悄然融入了生活的每一个角落,成为不可或缺的一部分。每天,无论是清晨的第一缕阳光洒进书房,还是夜晚的星辰点缀天际,我都习惯性地打开CSDN,或是整理思绪撰写新文,或是浏览他人的佳作,汲取灵感。创作,就像是一场与自我对话的旅程,让我在忙碌的工作与学习之余,找到了一片属于自己的精神家园。
- 然而,生活总是充满了挑战。在有限的精力下,如何平衡创作、工作与学习,成为了我必须面对的问题。我的秘诀是,将三者视为一个相互促进、相辅相成的整体。工作中遇到的难题,往往成为我创作的灵感来源;学习中的新知,则为我提供了源源不断的素材。而创作,则是我整理思绪、深化理解的过程,它不仅帮助我更好地消化工作中的实践经验,也为学习提供了新的视角和深度。
- 为了保持这种平衡,我养成了良好的时间管理习惯。我会根据任务的紧急程度和重要性,合理规划每一天的时间安排。早晨,通常是我最为清醒的时刻,我会选择进行深度创作或是学习新知识;下午和傍晚,则是处理工作事务、回复邮件和进行项目推进的时间;而夜晚,则是我反思总结、准备次日计划的时刻。这样的安排,既保证了工作的效率,也为创作和学习留出了充足的空间。
- 当然,平衡并非一成不变,它需要根据实际情况不断调整。有时,我会因为某个项目的紧急需求,暂时放下创作的笔,全身心投入到工作中;有时,又会因为某个技术难题的困扰,暂时放下工作,沉浸在学习的海洋中。但无论如何,我都始终保持着对创作的热爱和对知识的渴望,让这三者在我的生活中和谐共生。
成就
不知不觉已经获得了这么多勋章,虽然这些跟大佬们的比起来还什么都不是,但是每一个勋章的获取都让自己荣誉感满满,就好像军工勋章一样挂在自己身上
还记得最开始写作的时候,最让我满意的一次就是Python爬虫获取BOSS直聘,为了写这篇文章,特意去研究了好久的反爬机制,并且把反爬机制通过一篇文章进行了总结,虽然费了不少汗水,但是收获也颇多,现在再来回看一下当时的爬取BOSS直聘的代码
python
# 自动化获取boss招聘网的信息
# 引入By Class,辅助元素定位
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep
import pandas as pd
import undetected_chromedriver as uc
import random
#BOOS招聘网站
url = "https://www.zhipin.com/shanghai/"
#创建谷歌浏览器
browser = uc.Chrome()
#打开网页
browser.get(url=url)
#等待10秒钟,最好别访问太快
sleep(10)
# 选择搜索框
searching = browser.find_element(By.XPATH,
'//input[@type="text" and @name="query" and @class="ipt-search" and @placeholder="搜索职位、公司"]')
# 输入金融,搜素金融相关的公司
searching.send_keys("金融")
# 点击搜索,通过回车点击
searching.send_keys(Keys.ENTER)
# 等待10秒
sleep(10)
#获取表格数据
#定义一个变量来判断循环的次数
num = 1
#定义一个空数组,后面用来存储数据
pd_lis = []
while True :
#定位到岗位信息所在的li标签,通过num变量来确认获取哪一行的岗位信息
mess = f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]'
li = browser.find_element(By.XPATH,mess)
# 指定职位等信息
div_1 = li.find_element(By.XPATH, f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/a')
# 获取职位
job_title = div_1.find_element(By.XPATH,
f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/a/div[@class="job-title clearfix"]/span[@class="job-name"]').text
# 获取公司位置
job_address = div_1.find_element(By.XPATH,
f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/a/div[@class="job-title clearfix"]/span[@class="job-area-wrapper"]/span[@class="job-area"]').text
# 获取薪资
salary = div_1.find_element(By.XPATH, f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/a/div[@class="job-info clearfix"]/span[@class="salary"]').text
# 确认工作经验所属位置
work_experience = div_1.find_element(By.XPATH, f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/a/div[@class="job-info clearfix"]/ul[@class="tag-list"]')
# 获取学历和工作经验
work_experience_lis = work_experience.find_elements(By.TAG_NAME, 'li')
# 定义一个变量,用来拼接学历和工作经验,因为有的公司有两个信息,有的公司有三个信息,有的公司没有信息
work_experience = ""
for we_li in work_experience_lis:
work_experience = work_experience + we_li.text if work_experience == "" else work_experience + '/' + we_li.text
# 获取招聘人员加招聘人员职位
recruiter_position = div_1.find_element(By.XPATH,
f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/a/div[@class="job-info clearfix"]/div[@class="info-public"]').text
# 获取招聘人员职位
position = div_1.find_element(By.XPATH, f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/a/div[@class="job-info clearfix"]/div[@class="info-public"]/em').text
# 将招聘人员加招聘人员职位中剔除招聘人员职位,直接替换成空
recruiter = recruiter_position.replace(position, "")
# 指定公司信息
div_2 = li.find_element(By.XPATH,
f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/div[@class="job-card-right"]/div[@class="company-info"]')
# 公司名称
company_name = div_2.find_element(By.TAG_NAME, 'h3').text
# 获取公司类型/融资情况/人员规模
company_type_ul = div_2.find_element(By.XPATH, f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]/div[@class="job-card-body clearfix"]/div[@class="job-card-right"]/div[@class="company-info"]/ul[@class="company-tag-list"]')
company_type_lis = company_type_ul.find_elements(By.TAG_NAME, 'li')
company_join = ""
for company in company_type_lis:
#获取公司类型/融资情况/人员规模
company_join = company_join + company.text if company_join == "" else company_join + '/' + company.text
# 获取公司对职位的要求ul标签
company_requirements_ul = li.find_element(By.XPATH,
f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]//div[@class="job-card-footer clearfix"]/ul[@class="tag-list"]')
# 获取公司对职位的要求li标签
company_requirements_lis = company_requirements_ul.find_elements(By.TAG_NAME, "li")
company_requirements = ""
for company_requirements_li in company_requirements_lis:
#公司对职位的要
company_requirements = company_requirements + company_requirements_li.text if company_requirements == "" else company_requirements + '/' + company_requirements_li.text
# 获取公司福利
company_benefits = li.find_element(By.XPATH, f'//div[@class="search-job-result"]/ul[@class="job-list-box"]/li[@ka="search_list_{num}"]//div[@class="job-card-footer clearfix"]/div').text
'''
job_title 职位 -
job_address 公司位置
salary 薪资 -
work_experience 学历工作经验
recruiter 招聘人
position 招聘人所属职位
company_name 公司名称
company_join 公司类型/融资情况/人员规模
company_requirements 公司要求
company_benefits 公司福利
'''
pd_lis.append([company_name,job_title,salary, job_address, work_experience, recruiter, position, company_join,
company_requirements, company_benefits])
if num % 30 == 0:
if num == 300:
df = pd.DataFrame(data=pd_lis,
columns=['公司名称','招聘职位', '薪资区间', '公司位置', '要求的学历/工作经验', '招聘人', '招聘人所属职位',
'公司类型/融资情况/人员规模', '公司要求', '公司福利'])
df.to_csv('/xxxxx/recruitment.csv')#自己本地的路径
browser.close()
browser.quit()
else :
#获取a标签下最后一个a标签,那个就是点击下一页
page = browser.find_elements(By.XPATH,'//div[@class="options-pages"]/a')
last_page = page[-1]
#点击下一页
last_page.click()
num += 1
sleep(random.randint(1,15))
憧憬
职业规划:
展望未来,我渴望在技术领域实现更深层次的突破与成长。首先,我计划进一步深化对当前专业领域的掌握,不断跟进最新的技术动态,确保自己始终处于行业前沿。同时,我也希望能够涉足更多相关领域,拓宽技术视野,实现跨领域的融合与创新。
在职业路径上,我期望能够逐步从一名技术实践者成长为技术领导者,带领团队攻克更多技术难题,推动项目落地,实现业务价值的最大化。此外,我还希望能够有机会参与更多开源项目,与全球的开发者共同协作,为技术的开放与共享贡献自己的力量。
创作规划:
在CSDN的创作之旅中,我深刻体会到了分享与交流的乐趣与价值。因此,我计划在未来的日子里,继续坚持创作,不断提升文章的质量与深度。我将更加注重实战经验的总结与分享,通过案例解析、技术解析等形式,为读者提供更具实用性和启发性的内容。
同时,我也希望能够尝试更多样化的创作形式,如视频教程、直播分享等,以满足不同读者的需求。此外,我还计划建立自己的技术专栏,围绕特定主题进行系列化创作,形成更为系统、全面的知识体系,为技术爱好者提供更丰富的学习资源。
在创作的道路上,我将始终保持谦逊与开放的心态,积极接受读者的反馈与建议,不断优化自己的创作风格与内容。我相信,通过持续的努力与探索,我能够在CSDN这片知识的沃土上,留下更多有价值的足迹。