专栏首页肖洒的博客叮!你的校招提醒微信机器人已上线!

叮!你的校招提醒微信机器人已上线!

招聘季即将到来,如何实时的得知招聘信息呢?自然是爬虫+微信了。 这几日在票圈和各微信群看到大家疯狂刷“京东”、“腾讯”等秋招类的“广告”,我对这些营销方式存怀疑态度,觉得一定不是官方的!总感觉有恶意营销在里面。 有需求就有市场,为什么不自己写一个校招提醒机器人呢?简单的想了下,爬虫+微信模式应该是最好的搭配了。

原理

原理主要分为两部分:爬虫+微信机器人。

爬虫

讲道理西电就业信息应该挺好爬的吧,网站虽然丑一点,但是内容才是最重要的。就用最简单的请求方式去获取网站内容,居然Forbidden了。

那好吧,只能伪装浏览器了。

headers = {'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0'}  
    req = urllib.request.Request(url=url,headers=headers)

这样就ok。

完整的抓取网站信息代码:

def getPageContent(url):
    headers = {'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0'}  
    req = urllib.request.Request(url=url,headers=headers)
    try:
        res = urllib.request.urlopen(req)
    except urllib.error.URLError as e:
        return e
    page_content = res.read()
    page_content=BeautifulSoup(page_content,"lxml")
    return page_content

就业信息网长这样:

北校区招聘会信息的table长这样:

找到标签那就剥洋葱的爬呗:

def getJobInfo(page_content):
    job_content = page_content.find("table", {"class": "zphTable"})
    rows = job_content.findAll("tr")[1:]
    job_info=[]
    for row in rows:
        for cell in row.findAll('td'):
            info=cell.get_text()
            job_info.append(info)
    return job_info

南校区的信息结构和北校区一样,同样试用上面的程序。

对于爬虫的招聘会信息还需做处理,用于后面微信发送。 处理的代码:

def xdjob(jobinfo):
    urlN = 'http://job.xidian.edu.cn/html/zpxx/bxqzph/'
    urlS = 'http://job.xidian.edu.cn/html/zpxx/nxqzph/'
    page_contentN=getPageContent(urlN)
    page_contentS=getPageContent(urlS)
    job_infoN=["【北校区招聘会信息】"]+getJobInfo(page_contentN)
    job_infoS=["【南校区招聘会信息】"]+getJobInfo(page_contentS)
    job_info = job_infoS+job_infoN
    jobinfo='『本条由机器喵自动发出,是个机器人大家勿撩哦』'+"\n"
    for i in job_info:
        jobinfo=jobinfo+ "\n" +i
    return jobinfo

至此,爬虫的工作已完成。

微信机器人

之前微信好友分析使用过itchat,真的是非常好的一个库。

这次要做的工作简单点,找到指定的群聊名,将爬取的就业信息发送即可。

def wx(jobinfo2):

    itchat.auto_login(hotReload = True)# 可设置hotReload = True
    i=itchat.get_chatrooms(update=True)
    name = "西电求职交流群"
    iRoom = itchat.search_chatrooms(name)
    for room in iRoom:
        if room['NickName'] == name:
            userName = room['UserName']
        break
    itchat.send_msg(jobinfo2, userName)

具体的工作流程为:

  • 登录微信
  • 获取所有群聊名称
  • 匹配要发送信息的微信群
  • 发送指定信息

至此爬虫+微信机器人的工作均已完成。 可是总不能天天手动去运行程序吧,那我为什么不去看就业信息网站上的信息呢。 做程序员呢,最重要的就是一定要懒。 设置一个定时器呗,每天运行一次。基本上就能满足需求了。

def timer(n):
    itchat.auto_login(hotReload=True)  # 可设置hotReload = True
    while True:
        jobinfo=''
        wx(xdjob(jobinfo))
        time.sleep(n)

这样就行了,主程序运行timer(86400),每日更新一波。最后再部署到云服务器就好了。

最后

这点信息总感觉太少,还望大家多多提供点靠谱的招聘信息网站,有兴趣的也可以联系我,一起把这个功能丰富起来。 方便他人,方便自己。

V1.2

同学给的几点建议:

  • 去掉过期的招聘会信息
  • 增加交大、西工大的招聘会信息
  • 增加应届生招聘网站上的信息

我是从西电就业信息网直接爬取,网站上的信息并为做过期处理。 这样一想有没有可能从其他招聘网站上抓取第二手信息呢,他们应该做过处理。 果不其然,海投网!直接解决了第一第二点的建议。 上代码:

def xdjob(jobinfo):
    urlXD = 'https://xjh.haitou.cc/xa/uni-29'
    urlXJ = 'https://xjh.haitou.cc/xa/uni-27'
    urlGD = 'https://xjh.haitou.cc/xa/uni-28'
    urlEnterprise='http://www.yingjiesheng.com/2019/'
    page_contentN=getPageContent(urlXD)
    page_contentS=getPageContent(urlXJ)
    page_contentG = getPageContent(urlGD)
    job_infoXD=["--------------------"+"\n"+"【西电招聘会信息】"]+getJobInfo(page_contentN)
    job_infoXJ=["--------------------"+"\n"+"【西交招聘会信息】"]+getJobInfo(page_contentS)
    job_infoGD = ["--------------------"+"\n"+"【瓜大招聘会信息】"] + getJobInfo(page_contentG)
    job_info = job_infoXD+job_infoXJ+job_infoGD
    jobinfo='『今日招聘信息,以下数据为机器喵自动获取,仅供参考。有任何问题请艾特我群主爸爸@肖洒』'+"\n"
    for i in job_info:
        jobinfo=jobinfo+ "\n" +i
    jobinfo=jobinfo + "\n"+"--------------------"+"\n"+"【名企2019校园招聘进度表】" + getEnter(urlEnterprise)
    return jobinfo

完美! 关于第三点,这个应届生的网站真心写的好乱。。不过不能扒的网站呢! 上代码:

def getEnter(urlEnterprise):
    page_content = getPageContent(urlEnterprise)
    job_content = page_content.findAll("div", {"class": "s_clear tit floatl"})[2:]
    job_info = []
    for div in job_content:
        url = div.a.attrs["href"]
        if url[:4] == "http":
            pass
        else:
            url = "http://www.yingjiesheng.com" + url
        info = div.get_text() + "\n"+ url
        job_info.append(info)
    jobinfo = ""
    for i in job_info:
        jobinfo = jobinfo + "\n" + i
    return jobinfo

最后现在的效果:

V1.3

遇到的问题

西电这几日没有招聘会信息发布,所以西电部分的爬虫抛出异常。 已解决,修改如下:

def xdjob(jobinfo):
   
    urlXD = 'https://xjh.haitou.cc/xa/uni-29'
    urlXJ = 'https://xjh.haitou.cc/xa/uni-27'
    urlGD = 'https://xjh.haitou.cc/xa/uni-28'
    urlEnterprise='http://www.yingjiesheng.com/2019/'
    try: 
        page_contentN=getPageContent(urlXD)
        job_infoXD=["--------------------"+"\n"+"【西电招聘会信息】"]+getJobInfo(page_contentN)
    except:
        job_infoXD=["--------------------"+"\n"+"【西电今日无招聘会信息哦】"]

    try:

        page_contentS=getPageContent(urlXJ)
        job_infoXJ=["--------------------"+"\n"+"【西交招聘会信息】"]+getJobInfo(page_contentS)
    except:
        job_infoXJ=["--------------------"+"\n"+"【西交今日无招聘会信息哦】"]

    try:

        page_contentG = getPageContent(urlGD)
        job_infoGD = ["--------------------"+"\n"+"【瓜大招聘会信息】"] + getJobInfo(page_contentG)
    except:
        job_infoXJ=["--------------------"+"\n"+"【瓜大今日无招聘会信息哦】"]
    job_info = job_infoXD+job_infoXJ+job_infoGD
    jobinfo='『今日招聘信息,以下数据为机器喵自动获取,仅供参考。有任何问题请艾特我群主爸爸@肖洒』'+"\n"
    for i in job_info:
        jobinfo=jobinfo+ "\n" +i
    # jobinfo=jobinfo + "\n"+"--------------------"+"\n"+"【名企2019校园招聘进度表】" + getEnter(urlEnterprise)
    return jobinfo

V1.4

遇到的问题

由于itchat的问题,网页版微信并不能一直保持在线,导致定时发送服务总是因为掉线而抛出异常。 解决办法:itchat在移动端微信保持稳定登录的情况下,30分钟内是可以保证在线的。所以想到每30分钟发一次信息,保持登录的状态,每24小时给求职群里发一次招聘会信息。具体实现方法:

n=0
while True:
    itchat.auto_login(hotReload=True)  # 可设置hotReload = True
    wx('TEST','别玩手机哦')
    timer(1800)
    n=n+1
    print("循环到第:"+str(n)+"次,还剩"+str(48-n)+"次即可触发爬虫")
    while n == 48 :
        jobinfo=""
        wx('西电求职交流群',xdjob(jobinfo))
        n=0

V2.0

增加睿思的招聘信息

这几天已经用获得的招聘信息疯狂投递简历了。为了丰富招聘信息,根据之前的经验和代码,整合了下,抓取睿思校园招聘板块的信息,进行处理后进行微信发送。 睿思板块抓取的程序:

def rs():
    pageURL = set()
    job_rs = '『睿思校园招聘信息,机器喵自动获取,仅供参考』'
    for i in range(1, 2):
        pages = 'http://rsbbs.xidian.edu.cn/forum.php?mod=forumdisplay&fid=554&page=' + str(i) + '&mobile=2'
        if pages not in pageURL:
            headers = {
                'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                              r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
                'Referer': r'http://rsbbs.xidian.edu.cn',
                'Connection': 'keep-alive'}
            req = request.Request(pages, headers=headers)
            html = request.urlopen(req)
            bsObj = BeautifulSoup(html.read(), "lxml")
            tiezi = bsObj.findAll("ul")
            for tiaos in tiezi:
                for tiao in tiaos.findAll('a'):
                    for person in tiao.findAll('span', attrs={'class': "by"}):
                        T = person.get_text().strip()
                        [s.extract() for s in tiao.findAll('span', attrs={'class': "by"})]
                    P = tiao.get_text().strip() + "﹝详细信息﹞:"
                    job_rs = job_rs + "\n" + str(P)
                    if 'href' in tiao.attrs:
                        try:
                            tiao_links = "http://rsbbs.xidian.edu.cn/" + tiao.attrs['href']
                            tiao_html = urlopen(tiao_links)
                            job_rs = job_rs + "\n" + str(tiao_links)
                            tiao_bsObj = BeautifulSoup(tiao_html.read(), "lxml")
                            content = tiao_bsObj.findAll("div", {"class": "message"})[0]
                            R = content.get_text().strip()
                        except (ValueError, IndexError) as e:
                            pass
                        pageURL.add(pages)
        time.sleep(3)  # 设置时间间隔为3秒
        return job_rs

得到的信息如下:

『睿思校园招聘信息,机器喵自动获取,仅供参考』
阿里巴巴数据技术及产品部-校园交流﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951547&extra=page%3D1&mobile=2
阿里-菜鸟2018年网络测试开发工程师部门直招﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951510&extra=page%3D1&mobile=2
(散金币)百度搜索公司SRE团队2019年校招提前批﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951473&extra=page%3D1&mobile=2
错投男儿胎,找个家教兼职都这么难(都要求女生)﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951464&extra=page%3D1&mobile=2
阿里巴巴菜鸟 测试开发工程师 内推招聘﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951463&extra=page%3D1&mobile=2
乐馨托管招聘作业辅导老师一名﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951461&extra=page%3D1&mobile=2
[散金币]  西安葡萄城信息技术有限公司2019校园招聘﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951451&extra=page%3D1&mobile=2
西安诺瓦科技2019届提前批校招开始啦,与独角兽一起开疆拓土~~~~~﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951338&extra=page%3D1&mobile=2
平安租赁招实习生啦﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951331&extra=page%3D1&mobile=2
新校区附近寻找初中家教找初中家教﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951299&extra=page%3D1&mobile=2
拼多多技术校招内推﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951283&extra=page%3D1&mobile=2
百度招实习生﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951276&extra=page%3D1&mobile=2
【散金币】西安闻泰电子科技有限公司人力资源2018校园招聘﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951258&extra=page%3D1&mobile=2
拼多多2019届 校招开始啦!﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951250&extra=page%3D1&mobile=2
乐馨托管招作业辅导老师一名﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951246&extra=page%3D1&mobile=2
【找家教】给高一的两个孩子找家教﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951235&extra=page%3D1&mobile=2
「商务运营实习」「网联」「央行、阿里、腾讯、京东入股企业」「北京」﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951189&extra=page%3D1&mobile=2
老校区附近想找份家教工作,初高中数学理综均可﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951184&extra=page%3D1&mobile=2
招女生家教﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951181&extra=page%3D1&mobile=2
招募一名会微信小程序的同学开发一个公众号,报酬丰厚﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951140&extra=page%3D1&mobile=2
【金币】【招兼职老师】短期老师﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951096&extra=page%3D1&mobile=2
【散金币】+家教咯,初三英语、数学、物理、化学﹝详细信息﹞:
http://rsbbs.xidian.edu.cn/forum.php?mod=viewthread&tid=951023&extra=page%3D1&mobile=2

遇到的问题

之前循环时间,然后触发程序有些鸡肋。进行了新的改动。

while True:
    # itchat.auto_login(hotReload=True)  # 可设置hotReload = True
    jobinfo = ""
    time_now = time.strftime('%H%M',time.localtime(time.time()))
    if int(time_now) == 1000:
        wx('西电招聘信息发布群1', xdjob(jobinfo))
        time.sleep(30)
        wx('西电招聘信息发布群1', rs())
        time.sleep(30)
        wx('西电招聘信息发布群2', xdjob(jobinfo))
        time.sleep(30)
        wx('西电招聘信息发布群2', rs())
        time.sleep(30)
    elif int(time_now) % 10 == 0:
        wx('TEST', time_now)
        time.sleep(60)
    else:
        timer(60)

采用检测本地时间来进行触发。Itchat有个问题不好处理,会时长掉线,查过很多资料好像并不能很好的解决这个问题。所以,为了保证网页版微信的登录状态,每隔十分钟会给一个TEST群里发送信息。这个方法可以保证一段时间的登录状态。但是还是会一段时间后LOG OUT。现在的原因还未能知晓,此bug需要后面解决。

V2.1

是什么驱动要一直去写代码,有一大部分是强迫症!!! 上面招聘信息的链接也太长了吧,在微信里看起来好烦。 所以,缩短的网址,看这里。Python3五行代码实现缩短网址功能 实现的效果:

『睿思校园招聘信息,机器喵自动获取,仅供参考』
客服﹝详细信息﹞:
http://tinyurl.com/y77mdy7q
阿里巴巴数据技术及产品部-校园交流﹝详细信息﹞:
http://tinyurl.com/y7vmoaqr
阿里-菜鸟2018年网络测试开发工程师部门直招﹝详细信息﹞:
http://tinyurl.com/yc9xe4eu
(散金币)百度搜索公司SRE团队2019年校招提前批﹝详细信息﹞:
http://tinyurl.com/y753gupt
错投男儿胎,找个家教兼职都这么难(都要求女生)﹝详细信息﹞:
http://tinyurl.com/y7fdybjh
阿里巴巴菜鸟 测试开发工程师 内推招聘﹝详细信息﹞:
http://tinyurl.com/ybwj6dq8
乐馨托管招聘作业辅导老师一名﹝详细信息﹞:
http://tinyurl.com/y73cuhfv
[散金币]  西安葡萄城信息技术有限公司2019校园招聘﹝详细信息﹞:
http://tinyurl.com/y8w43yap
西安诺瓦科技2019届提前批校招开始啦,与独角兽一起开疆拓土~~~~~﹝详细信息﹞:
http://tinyurl.com/y85atskf
平安租赁招实习生啦﹝详细信息﹞:
http://tinyurl.com/y77fak6z
新校区附近寻找初中家教找初中家教﹝详细信息﹞:
http://tinyurl.com/ya9lxcvw
拼多多技术校招内推﹝详细信息﹞:
http://tinyurl.com/ya2plpp7
百度招实习生﹝详细信息﹞:
http://tinyurl.com/y9bpe4z2
【散金币】西安闻泰电子科技有限公司人力资源2018校园招聘﹝详细信息﹞:
http://tinyurl.com/ybgurcyz
拼多多2019届 校招开始啦!﹝详细信息﹞:
http://tinyurl.com/y94ypr6b
乐馨托管招作业辅导老师一名﹝详细信息﹞:
http://tinyurl.com/yc67fjvp
【找家教】给高一的两个孩子找家教﹝详细信息﹞:
http://tinyurl.com/yc9lldzl
「商务运营实习」「网联」「央行、阿里、腾讯、京东入股企业」「北京」﹝详细信息﹞:
http://tinyurl.com/ycvh4qdc
老校区附近想找份家教工作,初高中数学理综均可﹝详细信息﹞:
http://tinyurl.com/y9tbfxkv
招女生家教﹝详细信息﹞:
http://tinyurl.com/y7u63n68
招募一名会微信小程序的同学开发一个公众号,报酬丰厚﹝详细信息﹞:
http://tinyurl.com/y9c6zwkz
【金币】【招兼职老师】短期老师﹝详细信息﹞:
http://tinyurl.com/ybo7araq

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python3五行代码实现缩短网址功能

    最近一直在更新校招微信机器人,详情看这里叮!你的校招提醒微信机器人已上线! 其中爬取的招聘信息链接太长了,本人是个强迫狂魔,这看起来太不美观了,必须缩短!

    一点儿也不潇洒
  • 【爬虫】(三)爬虫之处理简单验证码

    一点儿也不潇洒
  • Python网络数据采集

    有人说编程语言就是宗教,不同语言的设计哲学不同,行为方式各异,“非我族类,其心必异”,但本着美好生活、快乐修行的初衷,我们对所有语言都时刻保持敬畏之心,尊重信仰...

    一点儿也不潇洒
  • 知晓云助力小程序开发

    小程序开发遇到瓶颈 虽然腾讯提供了小程序解决方案,https://cloud.tencent.com/solution/la。但是对于普通开发者或者小企业的开发...

    八哥
  • 利用SVN的POST-COMMIT钩子自动部署代码

    最近配置了一台SVN服务器,用来保存自己一些小项目的代码。同时,SVN服务器也是一台前端的Web。所以希望利用SVN的POST-COMMIT钩子HOOKS,在提...

    大江小浪
  • 在CentOS上使用strongSwan搭建IPsec V P N服务

    客户业务在往腾讯云迁移的过程中,因为两边的数据需要同步,所以需要建立站点到站点的IPsec V**连接,由于某些公司没有V**设备或者其他云不支持V** Gat...

    Vicwan
  • android学习各种bug(5)

    09-26 01:20:33.336: E/AndroidRuntime(1854): FATAL EXCE...

    wust小吴
  • Unsupervised Attention-guided Image-to-Image Translation

    这是NeurIPS 2018一篇图像翻译的文章。目前的无监督图像到图像的翻译技术很难在不改变背景或场景中多个对象交互方式的情况下将注意力集中在改变的对象上去。这...

    努力努力再努力F
  • 揭秘LOL背后的IT基础架构丨基础设施即代码

    在上一篇文章中,我们讨论了Riot针对全球应用程序部署的解决方案rCluster所涉及的网络的一些内容。具体来说,我们讨论了overlay网络的概念,OpenC...

    Tungsten Fabric
  • 【C语言笔记】内存笔记

    C语言程序需要载入内存才可以运行,其不同的数据保存在不同的区域。所使用的内存可以分成两类:一类是静态存储区,另一类是动态存储区。

    正念君

扫码关注云+社区

领取腾讯云代金券