事业单位招聘网搭建思路和seo方法
期望目标
自动采集事业单位招聘信息+自动发布到网站+自动提交网址到百度+自动发外链。
技术框架
前端用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方法的更多相关文章
- python 爬虫之爬取大街网(思路)
由于需要,本人需要对大街网招聘信息进行分析,故写了个爬虫进行爬取.这里我将记录一下,本人爬取大街网的思路. 附:爬取得数据仅供自己分析所用,并未用作其它用途. 附:本篇适合有一定 爬虫基础 crawl ...
- 如何内网搭建NuGet服务器
NuGet 是.NET程序员熟知的给.NET项目自动配置安装library的工具,它可以直接安装开源社区中的各个公用组件,可以说是非常方便.不过,有些时候,公司内部的公用的基础类库,各个项目都有引用, ...
- Scrapy实现腾讯招聘网信息爬取【Python】
一.腾讯招聘网 二.代码实现 1.spider爬虫 # -*- coding: utf-8 -*- import scrapy from Tencent.items import TencentIte ...
- 利用xpath爬取招聘网的招聘信息
爬取招聘网的招聘信息: import json import random import time import pymongo import re import pandas as pd impor ...
- 【转】如何内网搭建NuGet服务器
原文:http://www.cnblogs.com/zhangweizhong/p/7755332.html NuGet 是.NET程序员熟知的工具,它可以直接安装开源社区中的各个公用组件,可以说是非 ...
- Jobedin外企招聘网:6个要点不能不知道(转载)
又到一年跳槽季,无数职场人士都在蠢蠢欲动,在工作之余,寻找更好的工作. Jobedin外企招聘网,特别提醒:年末跳槽,一定要在拿到新公司的Offer后,才能向现公司提出辞职.不然新工作没找到,却可能丢 ...
- python实现对某招聘网接口测试获取平台信息
"""通过接口测试的技术获取某招聘网平台的资料"""url = "https://www.lagou.com/jobs/posit ...
- EOS主网搭建教程--&&--搭建节点--&&--搭建mongodb数据库
EOS主网搭建教程: 1.git clone https://github.com/EOS-Mainnet/eos.git --recursive 2.cd eos 3.git tag (查看有哪些分 ...
- 放弃了程序员互联网高薪,跑去事业单位做IT的尴尬
“你是程序员对吧?”“是啊,怎么了?”“那你帮我修一下电脑吧.”我原来也是一个重点大学毕业,基本上事业里面搞IT就干这些事情,要是以前,我肯定会想,我是程序员和修电脑有啥关系. 但是自从进了事业单位, ...
随机推荐
- RabbiMQ基础以及spring-boot-starter-amqp使用
RabbitMQ是一种基于amq协议的消息队列,本文主要记录一下rabbitmq的基础内容以及使用spring-boot-starter-amqp操作rabbitmq. 1,rabbitmq中的几 ...
- HDFS之Qurom Journal Manager(QJM)实现机制分析
前言 1.1背景 自从hadoop2版本开始,社区引入了NameNode高可用方案.NameNode主从节点间需要同步操作日志来达到主从节点元数据一致.最初业界均通过NFS来实现日志同步,大家之所以选 ...
- CSS——字体
1.字体样式font-family.颜色color <!DOCTYPE html> <html> <head> <meta charset="UTF ...
- input和btton的相互使用————小程序
input和btton的相互使用----小程序 index.js data: { userxx:'1111', }, changeSum(){ // this.data.userxx="ch ...
- CDH健康检查报DATA_NODE_BLOCK_COUNT告警
告警原文: The health test result for DATA_NODE_BLOCK_COUNT has become concerning: The DataNode has 500,0 ...
- mysql8.0版本忘记root密码
1.先关掉系统服务 net stop mysql 2.进入mysql安装目录的bin文件中,以管理员的方式运行cmd,然后输入如下命令,实现无密码登陆 mysqld --console --skip- ...
- 转:sqlserver 存储毫秒23:59:59.999变成第二天00:00:00.000
因为,在SQL SERVER中DATETIME表示的时间为00:00:00到23:59:59.997,它的时间精度为1/300秒,在使用时会舍入到舍入到 .000..003 或 .007 秒三个增量. ...
- SpringMVC 图片上传虚拟目录
可以直接在tomcat的server.xml文件中进行设置,位置在Host中 添加内容为:<Context docBase="G:\JAVAtest\temp" path=& ...
- Marshmallow权限使用
Google发布Android 6.0后对用权限的控制更加严格,在Android5.1或更低的版本中用户能在App的安装期间或使用设置应用程序权限来同意或拒绝某个权限,而在Android6.0或更高的 ...
- Matplotlib之Bar Chart
Matplotlib之Bar Chart: import numpy as np import matplotlib.pyplot as plt data = [[300, 200, 250, 150 ...