期望目标

自动采集事业单位招聘信息+自动发布到网站+自动提交网址到百度+自动发外链。

技术框架

前端用layUI,后端用flask,数据库用的elasticsearch,编程语言用Python 3.7,服务器用的Windows 2008 sever 64位,部署站点用的IIS 7.5。

搭建思路

采集信息

相对轻车熟路,主要是确定需要提取哪些字段,比如标题、发布时间、截止日期、正文内容、附件、招聘单位、招聘人数、岗位所在省份、所在城市。

采集最重要的两点,一个是不要重复采集,另一个是尽可能及时采集。

所以我把采集过的页面网址也保存到数据库,每次采集到新网址时,会先在数据库精确搜索,没有结果就采集,并在数据库加入新网址,有结果就跳过。

原先是每天凌晨2点采集目标网站,这样尽可能的不影响目标站点正常访问。后来考虑到seo因素,尽可能缩短两个站点发布间隔,改成每小时访问一次,有新网址再采集。当然,设置time.sleep是必须的。

前端开发

前端页面比较简单,直接使用layUI组件。首页就是搜索框+ajax列表,列表页是搜索框+左侧列表+右侧广告位,内容页有标题、发布时间、结构化数据(招聘单位、招聘人数、所在省份、所在城市、截止日期)、正文、相关推荐、最新推荐。

页面开发虽然繁琐耗时,但比较简单,主要是考虑到内链优化,我给省份字段、城市字段加了超链接。

发布时间字段做了处理,比目标站点提前一天,新生成的发布日期如果是双休日,就再往前推移到星期五。目标站点的发布时间只精确到天,我又随机增加了时分秒。并且上午发布的占40%,下午发布的占60%,不同小时段的作者也不同,以此增加手动发布的真实性。

正文招聘内容只能照抄,没法改写,但可以新增摘要来增加页面原创度。所以我在正文前面加了摘要的字段,用textrank4zh提取摘要,长度3句话。

flask开发

flask主要就是功能实现,没什么特别的。比如模板内判断搜索结果数,如果没有搜索结果,就在<head>内添加一行代码,告诉爬虫不要收录该页面。

<meta name="robots" content="noindex">

比如flask默认无法直接访问文件,但提交站点地图时需要提交sitemap文件,可以添加以下代码。

@app.route('/<path>')
def info(path):
base_dir = os.path.dirname(__file__)
resp = make_response(open(os.path.join(base_dir, path)).read())
resp.headers["Content-type"]="text/plain;charset=UTF-8"
return resp

唯一费时的是分页效果的实现,可能因为我是伪码农吧,好在最后还是实现了。

站点部署

推荐用Linux,但我更熟悉Windows,很多人说的这个坑那个坑,在我这也只是繁琐,不算坑。Linux部署会容易很多,没这么折腾。部署Python站点,用的IIS+wsgi,具体步骤在之前博文写过。

elasticsearch使用

整个技术栈最陌生的就是elasticsearch,严格来说可能不属于数据库,但我认为存储数据的都可以当作数据库使用。创建索引、写入数据,都没啥难度,一方面是python-elasticsearch真的很容易上手,另一方面是完全按照教程按需操作。

难点在于查询,按关键词查询时默认是先中文分词,然后只要每个词搜到资源都会在结果页显示,但这精确度实在太低。后来改为必须所有词都存在,才出现在结果页。

举例来说,搜任意关键词,原先只要带了“招聘”,搜索结果数就是数据库全部数据量。现在是必须其他词也能搜到结果才行,所以很多词的搜索结果都为空了。

seo思路

链接提交

自动推送

百度、360搜索、神马搜索,支持自动推送。从站长平台获取一段JS代码,添加到所有页面,有用户访问时就会加载JS,实现自动提交到搜索引擎。

因为门槛低,注定数据量很大,所以提交后往往很久都没处理。好在百度还有其他提交方式。

主动推送

通过接口提交url,使用Python实现很简单,在页面生成时就自动提交。

sitemap

整理“事业单位招聘”相关长尾词,在elasticsearch搜索,有搜索结果的将搜索结果页网址保存到sitemap。

目前整理了8000多个网址,保存在sitemap.txt,已经提交百度和360搜索,但目前还没有处理。

外链发布

很多网站提供站内搜索,并且结果页源码包含搜索的关键词,如果页面源码包含的搜索词是url,并且搜索结果页被百度收录,那么这就是一条外链,虽然质量不高。

目前的方法是,现在豆瓣、新浪博客,这类可以发外链的地方发文章,再把文章地址拿去刷外链,增加外链页面的收录速度。

搜索结果页并不一定会被爬取,所以每天需要刷两遍以上,目前测试效果很好,即使是小号发帖,一般第二天或者隔天收录。

最简单省事的外链,还是交换高质量首页友链。当然,打铁还需自身硬,后面再考虑。

测试结果

网站在2019年9月底上线,期间有代码改动,甚至采集爬虫因为目标站点临时无法访问,导致爬虫也挂掉了。正好赶上国庆放假,挂掉了好几天才发现。

每天工作日更新,每次更新200多条信息,截止发此文,运行时间不足一个月,收录30条,百度权重1,期待后续。

05-23 00:33