最近常想,Python 可以到哪些岗位就职?

于是我便瞄到了字节跳动的校招网站 https://jobs.bytedance.com/campus/position?,想用 requests 模块来爬取 Python 相关的岗位

但众所周知,get 请求爬到网页源代码不是难事,难的地方在找到目标数据对应的 post 请求

为了避开这“蛋疼”的一环,直接在浏览器操作得了 —— 于是 selenium 它来了

与 requests 不同,selenium 只需要输入一个 get 请求就完事了首先编辑目标的 url 的参数:

  • 在校招网站选中这些选项之后,浏览器顶上的网址会发生变化(先不看职位类别),可以发现“?”后是若干个键值对:

https://jobs.bytedance.com/campus/position?keywords=转正&location=CT_128%2CCT_45&type=3&current=1&limit=10

  • keywords:搜索框的文本
  • location:工作城市,简短的代码
  • category:职位类型,非常长的代码
  • type:3 代表实习生岗位
  • current:当前页的编号(可不设置)
  • limit:每一页显示的岗位数,为了让筛选后的所有岗位都在第一页,直接设为 10000

解析新的网址中的键值对,并修改代码中 params 字典的 keywords、location、category、type,使用 for 循环即可拼接得到最终的 url

import pandas as pd
from selenium.webdriver import Edge
from tqdm import tqdmurl = f'https://jobs.bytedance.com/campus/position?'
params = {'keywords': '转正',  # 搜索关键词'location': 'CT_45%2CCT_128',  # 工作城市: 广州, 深圳'category': '6704215862603155720%2C6704215862557018372%2C6704215956018694411%2C6704215886108035339%2C6704215957146962184%2C6704215897130666254%2C6704215958816295181%2C6704215888985327886%2C6704215963966900491%2C6704216109274368264%2C6704217321877014787%2C6704219452277262596%2C6704216635923761412%2C6704219534724696331%2C6704216296701036811%2C6938376045242353957',# 职位类型: 研发'type': 3,  # 招聘类型: 实习生'limit': 10000  # 页面职位显示
}
for key in params:url += f'{key}={params[key]}&'

与 requests 不同的是,selenium 不需要 post 请求,但是需要等待网页加载,所以需要一个 while 循环来等待网页加载完,再使用 xpath 进行结点的定位

def xpath(root, value, verbose=False):''' selenium 结点元素定位root: 根结点value: xpath 表达式verbose: 输出调试信息'''while 1:try:result = root.find_elements('xpath', value)if result:return result if len(result) != 1 else result[0]except:if verbose: print('\r未找到相应元素...', end='')

通过网页检查,找到对应岗位链接的位置,拷贝 xpath 再修改一波,就可以得到该页面所有岗位的链接

故技重施,再找到岗位连接中“职位要求”的位置(还可以找标题的位置),就可以写出主函数了

def byte_dance(keywords=[], stopwords=[]):''' keywords: 关键词序列stopwords: 停用词序列'''web = Edge()web.get(url)# 找到各个岗位的链接links = xpath(web, '//*[@id="bd"]/section/section/main/div/div/div[2]/div[3]/div[1]/div[2]/a', verbose=True)links = list(map(lambda link: link.get_attribute('href'), links))# 筛选校招信息desired = []for link in tqdm(links):web.get(link)box = xpath(web, '//*[@id="bd"]/section/section/main/div/div/div[1]')# 读取职位名称、职位要求title = xpath(box, 'div[1]/span').textrequire = xpath(box, 'div[6]').text# 检查关键词是否不在职位要求中fail = list(filter(lambda kwd: kwd not in require, keywords)) + \list(filter(lambda swd: swd in require, stopwords))if not fail: desired.append({'link': link, 'title': title, 'require': require})web.quit()return pd.DataFrame(desired)

最后使用 pandas 的 ExcelWriter 把筛选后的数据写入 Excel

def excel_dump(dataframe, file, sheet_name='tzj', float_format='%.4f'):writer = pd.ExcelWriter(file)dataframe.to_excel(writer, sheet_name=sheet_name, float_format=float_format)writer.save()desired = byte_dance(keywords=['Python'], stopwords=[])
print(desired)
excel_dump(desired, '字节校招.xlsx')

所有“职位要求”中出现“Python”的岗位有:

link
测试开发实习生(可转正)-国际化直播(深圳/北京) - 加入字节跳动
抖音图形图像算法实习生(可转正) - 加入字节跳动
后台开发实习生- 存储(有转正机会) - 加入字节跳动
后台开发实习生 - 基础架构 — 有转正机会 - 加入字节跳动
后端开发实习生-抖音/火山/国际化视频(有转正机会) - 加入字节跳动
后台开发实习生 — 广告系统(可转正) - 加入字节跳动
推荐算法实习生-抖音(有转正机会) - 加入字节跳动
算法实习生—风控方向 — 有转正机会 - 加入字节跳动
测试开发实习生-广告系统(可转正) - 加入字节跳动

Python Selenium 字节校招实习岗筛选相关推荐

  1. python selenium登录企名片,筛选各种条件,爬虫爬取融资信息,保存到csv文件

    要点:1.利用datatime构建 日期,设定格式 2.利用selenium 登录账号,input等待需要输入的验证码 3.可以利用scrapy的Selector,替代beautifysoup 得到想 ...

  2. 字节跳动 python面试_字节跳动数据分析实习岗面试全经历,竟然也会问这样的问题?...

    临近年底,又有不少人跃跃欲试想跳槽了. 但跳槽这个事说容易也容易,投简历总是有人要的,但说难也难,要进大厂,不光要看能力,更要看项目,看背景. 就怕辛辛苦苦准备半天,面试的时候没表现好,直接被刷掉,面 ...

  3. 字节跳动python后端_【字节跳动】[字节跳动][实习]后端研发工程师(python+go)...

    职位:[字节跳动][实习]后端研发工程师(python+go)-字节跳动 [岗位职责] 一年的时间,我们已经发展成行业第二,并且今年业务的发展速度是大头条体系最快的,成功的业务造就成功的团队,成功的团 ...

  4. 【字节跳动实习面经(测试开发岗 一面)四个字:破涕为笑】

    字节跳动实习面经(测试开发岗 一面) 至于在今年秋招那么严峻的情况下,我一个双非本科还能免笔试直接进入面试环节,我其实也是糊里糊涂的.故事是这么来的,小明在BOSS直聘上投简历,然后一个陌生的HR找到 ...

  5. 【字节跳动实习面经(测试开发岗 二面)希望渺茫】

    字节跳动实习面经(测试开发岗 二面) 糊里糊涂的接到了一面通知,糊里糊涂的过了一面,又糊里糊涂的参加了二面 一.自我介绍 同样巴拉巴拉一大堆,这次我强调了一下我了解AVL树.红黑树,面试官没问,确实没 ...

  6. 字节跳动后台开发实习岗面试

    后台实习岗面试 技术面有三面,自我感觉: 第一面是基础面,包含计算机基础知识 第二面是算法面,包含一些简单算法 第三面是项目面及对应岗位面,包含项目分析和岗位所需基础知识. 三轮技术面均有手撕代码 一 ...

  7. 如何看待 2020 届校招算法岗「爆炸」的情况?英雄所见略同

    来自:计算机视觉联盟公众号 转载 :知乎问题 如何看待 2020 届校招算法岗「爆炸」的情况? 链接:https://www.zhihu.com/question/342267611 本文仅作为学术交 ...

  8. 计算机大三了只会python可以去名企实习吗?如何找python实习

    知乎上有人问"软工大三下了,只会python,还没找到实习怎么办?",关于这个问题,网友的答复很是耿直,比如 网友1的答复是:找工作了才只会个简单的django项目,人家公司招人是 ...

  9. 阿里云云原生中间件 2021 年春季校招实习启动啦~

    同学,你好!DD的好朋友徐妈所在的"阿里云云原生中间件"团队,目前正式开始进行 2021 年春季校招实习的意向沟通,有任何问题欢迎加微信咨询 [xiayimiaoshenghua] ...

最新文章

  1. 第八节 字符串的插入
  2. iOS-----Xcode-Debug尝试
  3. JS Window.Open 打开窗口详解
  4. 用C++实现不能被继承的类
  5. xubuntu14.04下编译pjsip及pjsua2 java
  6. ubuntu 之 查看 cuda,cudnn版本
  7. [From 10.1~10.5] 对象和集合初始化器(C#语法糖系列)
  8. 手贱随手在Linux敲了 as 命令,出不来了
  9. Combobox 控件绑定数据
  10. 剑指offer 栈的压入、弹出序列
  11. MySQL : MySQL如何查看操作记录
  12. 力扣438.找到字符串中所有字母异位词(JavaScript)
  13. 移动web-使一个盒子水平垂直居中的六种方法
  14. 【NOIP2004】【Luogu1085】不高兴的津津
  15. 【电源】开关电源、线性稳压电源
  16. 第五章 循环结构课后思考
  17. java打字小游戏源码_java实现快速打字游戏
  18. 深度学习环境搭建(ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn+其他软件)
  19. JavaScript实现二级联动下拉菜单
  20. 个性化推荐系统设计(3.1)——如何评价个性化推荐系统的效果

热门文章

  1. MySQL数据恢复(通过.frm和.idb文件)
  2. 一年外包经验入职字节啦
  3. 曼尼托巴大学计算机科学硕士,加拿大曼尼托巴大学优势专业有哪些
  4. Unity中在运行时获取AnimationClip中的关键帧信息
  5. clear:both在HTML页面中的用法
  6. Java中notify() 和 notifyAll()的区别
  7. ASP.NET CORE 内置的IOC解读及使用
  8. 无约束优化问题(一)
  9. 神经网络怎么学,怎么学神经网络
  10. 关于多径效应,平坦衰落,频率选择性衰落以及瑞利衰落的理解