期望目标

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

技术框架

前端用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,期待后续。

事业单位招聘网搭建思路和seo方法的更多相关文章

  1. python 爬虫之爬取大街网(思路)

    由于需要,本人需要对大街网招聘信息进行分析,故写了个爬虫进行爬取.这里我将记录一下,本人爬取大街网的思路. 附:爬取得数据仅供自己分析所用,并未用作其它用途. 附:本篇适合有一定 爬虫基础 crawl ...

  2. 如何内网搭建NuGet服务器

    NuGet 是.NET程序员熟知的给.NET项目自动配置安装library的工具,它可以直接安装开源社区中的各个公用组件,可以说是非常方便.不过,有些时候,公司内部的公用的基础类库,各个项目都有引用, ...

  3. Scrapy实现腾讯招聘网信息爬取【Python】

    一.腾讯招聘网 二.代码实现 1.spider爬虫 # -*- coding: utf-8 -*- import scrapy from Tencent.items import TencentIte ...

  4. 利用xpath爬取招聘网的招聘信息

    爬取招聘网的招聘信息: import json import random import time import pymongo import re import pandas as pd impor ...

  5. 【转】如何内网搭建NuGet服务器

    原文:http://www.cnblogs.com/zhangweizhong/p/7755332.html NuGet 是.NET程序员熟知的工具,它可以直接安装开源社区中的各个公用组件,可以说是非 ...

  6. Jobedin外企招聘网:6个要点不能不知道(转载)

    又到一年跳槽季,无数职场人士都在蠢蠢欲动,在工作之余,寻找更好的工作. Jobedin外企招聘网,特别提醒:年末跳槽,一定要在拿到新公司的Offer后,才能向现公司提出辞职.不然新工作没找到,却可能丢 ...

  7. python实现对某招聘网接口测试获取平台信息

    """通过接口测试的技术获取某招聘网平台的资料"""url = "https://www.lagou.com/jobs/posit ...

  8. EOS主网搭建教程--&&--搭建节点--&&--搭建mongodb数据库

    EOS主网搭建教程: 1.git clone https://github.com/EOS-Mainnet/eos.git --recursive 2.cd eos 3.git tag (查看有哪些分 ...

  9. 放弃了程序员互联网高薪,跑去事业单位做IT的尴尬

    “你是程序员对吧?”“是啊,怎么了?”“那你帮我修一下电脑吧.”我原来也是一个重点大学毕业,基本上事业里面搞IT就干这些事情,要是以前,我肯定会想,我是程序员和修电脑有啥关系. 但是自从进了事业单位, ...

随机推荐

  1. 实现非管理型UPS在linux主机上的停电自动关机

    买了个山特的SANTAK TG-BOX 850 UPS,自带USB通讯线缆.本以为官方软件提供Linux下的CLI命令以监控UPS状态. 官网提供的下载链接巨慢无比不说,CLI下只提供了安装脚本,没有 ...

  2. PiVot 用法

    基本语法: SELECT <非透视的列>, [第一个透视的列] AS <列名称>, [第二个透视的列] AS <列名称>, ... [最后一个透视的列] AS &l ...

  3. 初学Spring的感觉

    1.使用接口 不同的类实现同一接口后都会变成同一类型的类.   spring作业1的思路 lab1: 建立一个有一个输出方法的接口类|并建一个英语类和一个数学类实现该接口.   这两个实现类都重写了那 ...

  4. 客户端与服务端的事件watcher源码阅读

    watcher存在的必要性 举个特容易懂的例子: 假如我的项目是基于dubbo+zookeeper搭建的分布式项目, 我有三个功能相同的服务提供者,用zookeeper当成注册中心,我的三个项目得注册 ...

  5. JAVASE知识点总结(三)

    第十六章:抽象类和接口 一.抽象方法:在方法面前加了abstract(为了解决,子类必须要覆盖此方法,在定义的时候不要方法体). 特点:1.抽象方法没有方法体. 2.抽象方法必须放在抽象类(类前面加上 ...

  6. 记一次jmeter从txt文本获取数值并给测试计划的变量赋值,jmeter永久性修改变量。

    前言: 需要永久性的改变变量. 其实这个办法并不是最好的,但是是最容易实现的.后期可做成从数据库里直接取值. 赋值BeanShell import java.io.File; import java. ...

  7. 基于Docker搭建大数据集群(三)Hadoop部署

    主要内容 Hadoop安装 前提 zookeeper正常使用 JAVA_HOME环境变量 安装包 微云下载 | tar包目录下 Hadoop 2.7.7 角色划分 角色分配 NN DN SNN clu ...

  8. Maven 梳理 - 常用三种archetype说明

    archetype:原型的意思,可理解为Maven项目模板工具包 常用archetype 1.cocoon-22-archetype-webapp 2.maven-archetype-quicksta ...

  9. tomcat设置指定jdk版本

    windows 1.解压下载的tomcat; 2.找到bin下的setclasspath.bat文件:在文件的开始出添加如下代码来设定JAVA_HOME和JRE_HOME的路径: set JAVA_H ...

  10. 正睿OI DAY3 杂题选讲

    正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...