招聘网站岗位信息更新监控工具

项目地址: https://github.com/vicalloy/jobmonitor/

image codecov.io

一个监控招聘网站工作岗位更新情况并发送通知的小工具。很早之前写的一个小脚本,近期重构了一下,让这个脚本可以更方便的扩展。

目前只做了前程无忧以及V2EX的支持,欢迎添加其他网站的支持。

目的

  • 招聘网站的问题
    • 招聘网站每天都会显示大量的岗位更新,但大多岗位都是常年发布,要从这些岗位里过滤出真正更新的岗位并不容易。
    • 招聘网站的搜索功能还不够完善,做不了高度个性化的定制化搜索条件。
    • 专业论坛的招聘版块,几乎没有搜索功能。
  • 这个工具可以做什么
    • 支持定制招聘网站搜索条件,并对网站提供的标准搜索功能进行少量增强。
    • 对检索到的工作岗位进行过滤,如果该岗位之前已发布过,自动忽略。
    • 可部署在服务器上,设置定时任务方式定时推送岗位更新,支持多种消息推送方式。
    • 新工作岗位通知方式支持:显示到控制台、保存到文件、发送到 Slack (强烈推荐 Slack )。注:如果想支持微信、邮件的通知,需要自行扩展。
    • 内置了 51JOB 和 V2EX 的支持。注:如需要支持其他招聘网站,需要自行进行扩展。

使用范例

  • 初始化项目
$ mkdir jobs
$ cd jobs
$ pip install pipenv --upgrade
$ pipenv --python 3.6
$ pipenv shell
$ pipenv install lbjobmonitor
  • 创建jobs.py。使用python jobs.py执行查询。
  • 可在服务器上使用 crontab 设置定时任务,定期检查
# jobs.py
import os
from lbjobmonitor.message import CLIMessageBackend
from lbjobmonitor.message import FileMessageBackend
from lbjobmonitor.monitor import QCWYJobMonitor
from lbjobmonitor.storage import JobMonitorJsonStorage
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATA_DIR = BASE_DIR
def qcwy():
    params = {  # 51job 的查询参数。51job 设置好查询条件后发起查询,通过 chrome 的调试功能查看请求的具体参数。
        'saltype': '',  # 薪资范围
        'keyword': 'python',  # 关键词
        'postchannel': '0000',
        'keywordtype': '2',
        'jobarea': '080200',  # 地区编码
        'pagesize': '5',  # 每页记录数
        '': ''
    }
    storage = JobMonitorJsonStorage(base_path=DATA_DIR)  # 使用 JSON 方式将工作列表保存到当前目录
    message_backend_list = [  # 显示的推送方式
        CLIMessageBackend(),  # 显示到控制台
        FileMessageBackend(fn=os.path.join(DATA_DIR, 'jobs.txt'))  # 保存到文件
    ]
    monitor = QCWYJobMonitor(
        storage=storage, message_backend_list=message_backend_list)
		# monitor.max_page_idx = 1  # 最多查询页数,设置成 1 方便调试
    skip_words = ['AI']
    monitor.monitor_jobs(params=params, skip_words=skip_words)  # 执行查询
if __name__ == "__main__":
    qcwy()

代码导航

  • monitor.py
    • JobMonitor 工作岗位监控基础类
    • QCWYJobMonitor 51JOB岗位监控实现
    • V2exJobMonitor V2EX岗位监控实现
  • storage.py
    • JobMonitorStorage 存储区基础类
    • JobMonitorJsonStorage 将信息以json方式保存到文件的存储区实现
  • message.py
    • BaseMessageBackend 消息发送处理后端基础类
    • IMMessageBackend IM类消息的后端基础类
    • CLIMessageBackend 将消息发送到控制台
    • FileMessageBackend 将消息保存到文件
    • SlackMessageBackend 将消息发送到Slack
    • TelegramMessageBackend 将消息发送到Telegram
  • models.py
    • Job 岗位信息基础数据类
    • QCWYJob 51JOB的岗位信息解析类
    • V2exJob V2EX的岗位信息解析类

注: 还为这个工具做了一个 web 前端界面 https://github.com/vicalloy/jobmonitorweb/ 可通过 web 端查看推送信息。不过个人觉得用 slack 或 telegram 接收和查看推送信息更方便。这个项目里使用了Django Channels来做Web端的实时消息推送,如果感兴趣可以参考一下。

中心化服务问题

最初也考虑过将这个功能做成服务,用户可以通过WEB界面配置自己的订阅规则和消息的接收方式。不过一般网站都会有反爬虫的处理,如果服务器对一个网站访问过于频繁很可能会被该网站给ban掉,这个方案不可行。

当然,如果真想把这个功能做成服务还是有办法的。可以将主要功能用JS实现,用户将数据抓取的规则配置和历史记录保存在服务器。用户打开浏览器手动刷新岗位信息,数据抓取通过用户的浏览器完成。

Hi, 2019

2018年接手了一些不是自己很擅长的工作,工作完成的也不是很让自己满意。

希望2019能有趣一些。

中国未来经济预测

房价不会暴跌,但买房致富的日子一去不回了。

  • 各大城市的地卖的差不多了,ZF得开始布局土地财政以外的增收手段,比如房产税。
  • 受通勤成本的影响,巨型城市的发展存在极限。
  • 二胎政策的放开,造成家庭支出的上升。购房无法同之前一样孤注一掷。
    • 更大的房子,更多的教育支出,需要更多的精力投入到家庭。
    • 无法再用6个钱包买房。
  • 户型&高层住宅
    • 为迎合计划生育,之前建了大量小户型的房子。开放二孩后,户型占比不再合理。
    • 随着房屋的老龄化,房子的养护成本问题逐渐显现。加之重建困难,小户型不再适用等因素,可能出现所谓的高层贫民窟。
  • 为了刺激生育,必须给二孩优惠政策,比如买房优惠。这些成本将转嫁到非二孩家庭。不管生不生二孩都不容易。
  • 购房不赚钱,资金外逃加剧房地产的不景气。
  • 大量的房屋开始步入老龄化,自生开始贬值。
  • 人口老龄化,新增住房需求减少。
  • 人口持续向大城市流动,总人口减少。
    • 1/2/3线城市人口总数趋于稳定,4/5线城市人口开始出现负增长。
    • 4/5线城市空置房增多。
    • 回村建房,建好的房子空置。房屋空置的问题会逐渐向城镇蔓延。

经济永久性降速

  • 粗放型经济已接近极限。一直在经济转型,效果不如预期。
  • 中美关系不改善,美国太强对中国是利空,美国遭殃对中国还是利空。
  • 人口总数已经开始负增长,但新增劳动力的教育水平较高,人口红利还将持续一段时间。
  • 如果中国的经济增速能维持在4%,也将是一个很高的指标了。只是习惯了8%的中国会不习惯。

2019

  • 从10年一个周期的角度看,要开始出事了。
  • 中国经济形势不明显的改善,股票市场是没有大作为的。没有人知道股市的底部在哪,股指总是能刷新大家对底部的认识。
  • 07经济危机后,全球都出了一堆饮鸩止渴的经济措施,这个炸弹多半得炸,就看波及范围有多广了。
  • 黄金已经开始涨起来了,应当还可以买点。

最后,别信我

  • 去年年底买了个基金,亏40%出局。之后该基金还没有止跌。
  • 几年前我就觉得中国的房价有些高的离谱,哪知后来翻了一倍。
  • 现在的世界不是信息太少而是太多,难的是从这些纷繁的信息中找到有价值的东西。
  • 如果真有人可以准确预测经济形势,那早就发财了。

稻城亚丁

5月份的时候去了一趟稻城亚丁,做个简单的记录。
可能是长滩岛之行未到自己的预期,于是又去了稻城亚丁。
刚去的时候在下雪,之后又是极好的晴天。虽不是亚丁最美的季节,但看到了雪景以及久违了的星空也算是比较完美。


傍河已经被改造成了水泥河堤,没了记忆中的样子。


去亚丁的第一天遇上大雪。


珍珠海。这次再看到珍珠海少了上次来亚丁时的惊艳感,不知是否是季节的问题。


算是这次最大的收货之一,看到了漂亮的星空。


漂亮的雪山。草地刚刚开始发芽,还是黄色的。


牛奶海很美,相比之下五色海就有些低于预期了。

为django-lb-workflow增加Pipenv

不知道是否是有项目在用(或是计划使用)django-lb-workflow,最近陆陆续续的收到一些issue。其中大多是咨询django-lb-workflow如何使用,也有些windows平台下的bug,还有就是因为python第三方库版本问题导致跑不起来的。
我使用virtualenv来创建虚拟环境,并使用pip(requirements.txt)管理第三方依赖。在指定依赖时通常都只会指定所需的最低版本,过一段时间不维护依赖就要出问题。
近年来Pipenv开始流行,目前看来很有希望成为今后python项目的标配。
Pipenv为您的项目创建和管理Python虚拟环境,并通过Pipfile 和 Pipfile.lock这 两个文件来管理项目中的Python依赖包。对我来说Pipenv的Pipfile.lock提供了对所有依赖层级的Python包的版本锁,可以有效的避免由于requirements.txt过于简单导致的第三方库版本问题。
希望用了Pipenv后,因为第三方库版本问题导致程序跑不起来的问题可以不再出现。

长滩岛

之前在从亚庇回来的飞机上听人盛赞长滩岛,称长滩岛要远比亚庇漂亮,之后一直挺想去长滩岛看看。这次遇到公司组织长滩岛的旅游,立马报名。
可能是之前有着过高的期待,长滩岛远没有达低于自己的预期。想来纯海岛对我来说还是太单调,还是更喜欢亚庇。亚庇作为一个城市,可以看看国外的城市,看看别国的人如何生活。从酒店出发花30分钟就可以上岛,在体验生活的同时也完全不必担心玩水。可以去美人鱼岛潜水,作为离岛美人鱼岛的水远比近海漂亮。

Tips:

  • 直飞长滩岛非常折腾,有小朋友就放弃直飞吧。到kalibo后出关花了一个多小时,之后又是三个小时的车船连运,折腾一整晚才能到酒店。杭州出发,晚上10点的飞机,晚点到11点,最后早上6点多才都酒店。
  • 绿藻确实非常严重,从S1到S3整个沙滩只有及少数地方是没有绿藻的。而且这些地方还停满了船。
  • 一到长滩岛导游(华人)就告诉大家如何防小黑得,比如沙雕拍照要给消费,帮忙搬行李要给消费,不要理会路边拉客的小黑等。实际上接触下来菲律宾人大多都挺热情友善。遇上拉客的小黑你明确拒绝后也不会进行纠缠。事后想想可能是导游给出的游乐项目价格过高,不希望我们和本地人接触了解实际价格。或许真同导游自己开玩笑时说的,不坑自己人坑谁。
  • 很多东西都需要砍价,特别是海鲜。
  • 长滩岛毕竟是一个只有9平方公里的小岛,除了水上娱乐项目外没有啥其他活动,也没有什么特别好吃的东西。
  • 长滩岛已经被国人攻占了。

照片

白沙滩

帆船

落日风帆

水晶岛

luho山上的长滩岛全景

严重的绿藻

Hi, 2018

不知为何,几乎所有事情都堆到了春节前。从进入2018年到现在各种忙,为此也出了一些“事故”。一方面有些沮丧,一方面却也有些习惯。
至于2018应当如何,目前可能还只能是一些省略号,需要给自己留一些时间将一些东西理清楚。

从HHVM换回到PHP-FPM

之前一直用PHP-FPM作为PHP的解析器,上次在将博客迁移到linode的时候换成了HHVM。换到HHVM后博客就一直不太稳定,经常莫名其妙的down掉。
前两天博客有down掉了,重启HHVM也不解决问题,干脆换回了PHP-FPM。希望之后博客能稳定一些。

关闭“似水流年”

将服务器迁移到linode后, jstwind.com 就一直有些问题。因为没有什么人访问也懒得去改了。后来想想,既然没什么人用,也懒得维护,还是把网站关了。

“似水流年”是我做的一个用于编辑时间线的网站,用户可以在上面创建和分享时间线。网站前端用的是Bootstrap,当时Bootstrap刚出来没多久,我也是第一次使用Bootstrap,因此前端部分写的非常烂。为了保证良好的用户体验,时间线的编辑部分采用了AJAX,当时很多时间都花在了这上面。

网站关了,域名还会继续留着,说不定哪天用来做个新“玩具”。

代码托管在Github上,你可以在这里找到: https://github.com/vicalloy/timeline-site

徒步雨崩

总是感觉雪山美丽且神秘。很早之前走过一次川藏线。那次一路上天气不是太好,雪山只是偶尔露个脸。看雪山本是那趟旅行的一个重要目的,最终却没怎么看到。
这次趁着淡季的机票折扣去了上次旅行中错过的雨崩。虽未看到日照金山让旅程不够完美,但总的来说是一次不错的经历。路上的风景很美,路上遇到的人也都很友好。

Tips:

  • 飞来石观景台¥60的门票不是很值得花,飞来寺客栈的顶楼就是最好的观景台。
  • 网上一些人气比较高的客栈,可能由于人气比较旺打理不过来,反而不如其他的客栈值得入住。飞来寺入住的“吉祥客栈”只要¥40一个人,景观非常棒。开窗即可看到连绵的雪山,楼顶更是极佳的观景台。
  • 在上雨崩入住的“小明的暖屋”。新开的客栈,房间很干净,老板娘很热情。房间的景观很好,开窗即可看到雪山。他们家还有粘人的漂亮喵喵,见人就过来讨吃的。
  • 如果不怕累,一大早进雨崩还是来得及去神瀑的。夏季的时候8:30才天黑,其他季节请注意安排好时间。下雨崩到上雨崩有近一个小时的路程,如果打算进雨崩的当天去神瀑,最好还是住下雨崩。


在飞来寺远眺对面的雪山


日照金山。云很多,山峰始终不肯露脸。


雨崩客栈拍的日照金山。山峰依旧是不肯露脸


在神瀑拍的冰川


只有在月下卡瓦博格才肯露脸。这次旅行的另一个期望是可以看到漂亮的星空。可惜去的时候是满月,皓月当空,只能看到星星点点的星星。


第一次看到这么漂亮的蜥蜴。在此之前我印象中的蜥蜴都是又丑又恶心。