<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jobmonitor &#8211; 天地一沙鸥</title>
	<atom:link href="https://haoluobo.com/tag/jobmonitor/feed/" rel="self" type="application/rss+xml" />
	<link>https://haoluobo.com</link>
	<description>to be continue....</description>
	<lastBuildDate>Thu, 16 Dec 2021 03:23:20 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>招聘网站岗位信息更新监控工具</title>
		<link>https://haoluobo.com/2019/02/jobmonitor/</link>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Mon, 18 Feb 2019 13:52:38 +0000</pubDate>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[Django Channels]]></category>
		<category><![CDATA[jobmonitor]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">/?p=11710</guid>

					<description><![CDATA[项目地址：&#160;https://github.com/vicalloy/jobmonitor/ 一个监控 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>项目地址：&nbsp;<a href="https://github.com/vicalloy/jobmonitor/">https://github.com/vicalloy/jobmonitor/</a>
</p>
<p>
<a href="http://travis-ci.org/vicalloy/jobmonitor" rel="nofollow"><img decoding="async" src="https://camo.githubusercontent.com/2c4254563b70ca73bbcb619825897e912bbd60b1/68747470733a2f2f7365637572652e7472617669732d63692e6f72672f766963616c6c6f792f6a6f626d6f6e69746f722e7376673f6272616e63683d6d6173746572" alt="image" data-canonical-src="https://secure.travis-ci.org/vicalloy/jobmonitor.svg?branch=master" style="max-width:100%;"></a>
<a href="https://codecov.io/github/vicalloy/jobmonitor" rel="nofollow"><img decoding="async" src="https://camo.githubusercontent.com/13baeadd20f60984800fb73b8e40b2ba97eacb44/68747470733a2f2f636f6465636f762e696f2f6769746875622f766963616c6c6f792f6a6f626d6f6e69746f722f636f7665726167652e7376673f6272616e63683d6d6173746572" alt="codecov.io" data-canonical-src="https://codecov.io/github/vicalloy/jobmonitor/coverage.svg?branch=master" style="max-width:100%;"></a></p>



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



<p>目前只做了<a href="https://www.51job.com/">前程无忧</a>以及<a href="https://www.v2ex.com/">V2EX</a>的支持，欢迎添加其他网站的支持。</p>



<h3 class="wp-block-heading">目的</h3>



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



<h3 class="wp-block-heading">使用范例</h3>



<ul class="wp-block-list"><li>初始化项目</li></ul>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
$ mkdir jobs
$ cd jobs
$ pip install pipenv --upgrade
$ pipenv --python 3.6
$ pipenv shell
$ pipenv install lbjobmonitor
</pre></div>


<ul class="wp-block-list"><li>创建<code><a href="http://jobs.py/">jobs.py</a></code>。使用<code>python&nbsp;<a href="http://jobs.py/">jobs.py</a></code>执行查询。</li><li>可在服务器上使用 crontab 设置定时任务，定期检查</li></ul>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
# 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 的调试功能查看请求的具体参数。
        &#039;saltype&#039;: &#039;&#039;,  # 薪资范围
        &#039;keyword&#039;: &#039;python&#039;,  # 关键词
        &#039;postchannel&#039;: &#039;0000&#039;,
        &#039;keywordtype&#039;: &#039;2&#039;,
        &#039;jobarea&#039;: &#039;080200&#039;,  # 地区编码
        &#039;pagesize&#039;: &#039;5&#039;,  # 每页记录数
        &#039;&#039;: &#039;&#039;
    }
    storage = JobMonitorJsonStorage(base_path=DATA_DIR)  # 使用 JSON 方式将工作列表保存到当前目录
    message_backend_list = &#x5B;  # 显示的推送方式
        CLIMessageBackend(),  # 显示到控制台
        FileMessageBackend(fn=os.path.join(DATA_DIR, &#039;jobs.txt&#039;))  # 保存到文件
    ]
    monitor = QCWYJobMonitor(
        storage=storage, message_backend_list=message_backend_list)
		# monitor.max_page_idx = 1  # 最多查询页数，设置成 1 方便调试
    skip_words = &#x5B;&#039;AI&#039;]
    monitor.monitor_jobs(params=params, skip_words=skip_words)  # 执行查询
if __name__ == &quot;__main__&quot;:
    qcwy()

</pre></div>


<h3 class="wp-block-heading">代码导航</h3>



<ul class="wp-block-list"><li><a href="https://github.com/vicalloy/jobmonitor/blob/master/lbjobmonitor/monitor.py">monitor.py</a><ul><li>JobMonitor  工作岗位监控基础类</li><li>QCWYJobMonitor  51JOB岗位监控实现</li><li>V2exJobMonitor  V2EX岗位监控实现</li></ul></li><li><a href="https://github.com/vicalloy/jobmonitor/blob/master/lbjobmonitor/storage.py">storage.py</a><ul><li>JobMonitorStorage  存储区基础类</li><li>JobMonitorJsonStorage  将信息以json方式保存到文件的存储区实现</li></ul></li><li><a href="https://github.com/vicalloy/jobmonitor/blob/master/lbjobmonitor/message.py">message.py</a><ul><li>BaseMessageBackend 消息发送处理后端基础类</li><li>IMMessageBackend IM类消息的后端基础类</li><li>CLIMessageBackend 将消息发送到控制台</li><li>FileMessageBackend 将消息保存到文件</li><li>SlackMessageBackend 将消息发送到Slack</li><li>TelegramMessageBackend 将消息发送到Telegram</li></ul></li><li><a href="https://github.com/vicalloy/jobmonitor/blob/master/lbjobmonitor/models.py">models.py</a><ul><li>Job 岗位信息基础数据类</li><li>QCWYJob 51JOB的岗位信息解析类</li><li>V2exJob V2EX的岗位信息解析类</li></ul></li></ul>



<p>注： 还为这个工具做了一个 web 前端界面&nbsp;<a href="https://github.com/vicalloy/jobmonitorweb/">https://github.com/vicalloy/jobmonitorweb/</a>&nbsp;可通过 web 端查看推送信息。不过个人觉得用 slack 或 telegram 接收和查看推送信息更方便。这个项目里使用了<a href="https://channels.readthedocs.io/en/latest/">Django Channels</a>来做Web端的实时消息推送，如果感兴趣可以参考一下。</p>



<h2 class="wp-block-heading">中心化服务问题</h2>



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



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