golang 删除文件_Golang丨Java丨Python爬虫实战—Boss直聘网站数据抓取

news/2024/5/20 14:51:43/文章来源:https://blog.csdn.net/weixin_32027779/article/details/112082895

我们分别通过Golang、Python、Java三门语言,分别实现对Boss直聘网站的招聘数据进行爬取。

首先打开Boss直聘网站:

ab0807d528b077993a9e12cbd7e9806c.png

然后我们在职位类型中输入Go或者Golang关键字:

c5bda6ffb31f97a830ce6ea88f2037b3.png

然后我们可以看到一个列表,和Go语言相关的各种招聘职位,还可以不停的下一页。。

那我们现在就来爬取这些数据:我们比较关心这里的职位名称,薪资待遇,工作地点,对于工作经验的要求,学历的要求,公司名称,公司类型,公司发展阶段,公司规模等等。。

一、分析页面

我们通过分析页面的结构发现,页面的职位列表,其实都位于一个ul中的li里,每个页面有30个职位,所以有30个li标签:

fa181d5932adef6893e61435c9b9fc18.png

打开这个li标签后,里面是div标签嵌套,包括了招聘信息和公司信息:

10bcfa91c43c06e8521b6084e99c5975.png

接下来我们就可以通过代码来爬取这些数据了,首先我们要确定要爬取的第一个url:

https://www.zhipin.com/c101010100/?query=Go&page=1

一共有10页数据,分别通过page=1、2、3。。。来实现,

所以接下来要爬取的url:

https://www.zhipin.com/c101010100/?query=Go&page=2

https://www.zhipin.com/c101010100/?query=Go&page=3

。。。

https://www.zhipin.com/c101010100/?query=Go&page=10

爬取到的数据,我们也不需要处理,打印输出即可。。因为我们只是想看一下几门语言爬取数据在实现上有什么不同。。

好了,现在让我们来开开心心的撸代码吧。。

二、Golang语言实现

使用Go语言来爬取这个页面,github里搜了下,发现goquery这个爬虫包用的人还挺多的,7000多个star,而且是BSD开源协议,于是毫不犹豫的拿来用了。

8cb1e6b8943e4f805955a257bae1f7bc.png

goquery的使用还是比较简单,按照文档说明一步一步来就可以了:

首先:需要安装

localhost:~ ruby$ go get github.com/PuerkitoBio/goquery

其次:就是去看看goquery的API,先了解一下常用的方法:

https://godoc.org/github.com/PuerkitoBio/goquery

953557f8f596d9f97470d9f40871a10a.png

60e9b6ffcf74b983eeaa063a9adc3827.png

然后就可以开始写代码了:

打开Goland,新建一个go文件:

package main
​
import ("github.com/PuerkitoBio/goquery""log""fmt""strconv""time"
)
​
func main() {url := "https://www.zhipin.com/c101010100/?query=Go&page="t := time.Now()fmt.Println("============== 千锋教育Go语言开发教学部 职位信息分析 ================")for offset := 0; offset < 10; offset++ {time.Sleep(1 * time.Second)doc, err := goquery.NewDocument(url + strconv.Itoa(offset))handleErr(err)fmt.Printf("第 %d 页的数据:n", offset)doc.Find(".job-primary").Each(func(i int, selection *goquery.Selection) {item := Item{}fmt.Printf("职位序号:第%d个职位n", (i + 1))item.position_name = selection.Find("div .job-title").Text()fmt.Printf("职位名称:%sn", item.position_name)item.position_salary = selection.Find("div .red").Text()fmt.Printf("职位薪酬:%sn", item.position_salary)item.work_address = selection.Find(".info-primary p").Children().Nodes[0].PrevSibling.Datafmt.Printf("工作地点:%sn", item.work_address)item.work_experience = selection.Find(".info-primary p").Children().Nodes[0].NextSibling.Datafmt.Printf("职位所需工作经历:%sn", item.work_experience)item.education = selection.Find(".info-primary p").Children().Nodes[1].NextSibling.Datafmt.Printf("学历要求:%sn", item.education)item.company_name = selection.Find(".company-text .name").Children().First().Text()fmt.Printf("公司名称:%sn", item.position_name)item.company_type = selection.Find(".company-text p").Children().Nodes[0].PrevSibling.Datafmt.Printf("公司类型:%sn", item.company_type )if selection.Find(".company-text p").Children().Size() == 2 {item.company_development_stage = selection.Find(".company-text p").Children().Nodes[0].NextSibling.Datafmt.Printf("公司发展阶段:%sn", item.company_development_stage)item.company_size = selection.Find(".company-text p").Children().Nodes[1].NextSibling.Datafmt.Printf("公司规模:%sn", item.company_size )} else if selection.Find(".company-text p").Children().Size() == 1 {item.company_size = selection.Find(".company-text p").Children().Nodes[0].NextSibling.Datafmt.Printf("公司规模:%sn", item.company_size)}fmt.Println("================================================================n")})}elapsed := time.Since(t)fmt.Println("app elapsed:", elapsed)
}
​
type Item struct {// 职位名称position_name string// 职位薪酬position_salary string//工作地点work_address string// 职位所需工作经历work_experience string// 学历要求education string// 公司名称company_name string// 公司类型company_type string// 公司发展阶段company_development_stage string//公司规模company_size string
}
​
func handleErr(err error) {if err != nil {log.Fatal(err)}
}

一共也就这些代码,加上注释78行。

然后可以运行:(注:由于执行结果过长,为增加可阅读性部分执行结果已经删除处理

GOROOT=/usr/local/go #gosetup
GOPATH=/Users/ruby/go #gosetup
/usr/local/go/bin/go build -i -o /private/var/folders/kt/nlhsnpgn6lgd_q16f8j83sbh0000gn/T/___go_build_boss_go /Users/ruby/go/src/boss/boss.go #gosetup
/private/var/folders/kt/nlhsnpgn6lgd_q16f8j83sbh0000gn/T/___go_build_boss_go #gosetup
============== 千锋教育Go语言开发教学部 职位信息分析 ================
第 0 页的数据:
职位序号:第1个职位
职位名称:Golang
职位薪酬:25k-50k
工作地点:北京  
职位所需工作经历:5-10年
学历要求:本科
公司名称:京东集团
公司类型:电子商务
公司发展阶段:已上市
公司规模:10000人以上
================================================================职位序号:第2个职位
职位名称:Golang
职位薪酬:20k-35k
工作地点:北京 朝阳区 亮马桥
职位所需工作经历:3-5年
学历要求:本科
公司名称:平安科技
公司类型:互联网
公司发展阶段:不需要融资
公司规模:1000-9999人
================================================================职位序号:第3个职位
职位名称:Golang
职位薪酬:20k-30k
工作地点:北京 海淀区 知春路
职位所需工作经历:3-5年
学历要求:本科
公司名称:腾讯科技(北京)公司
公司类型:移动互联网
公司发展阶段:已上市
公司规模:10000人以上
================================================================职位序号:第4个职位
职位名称:Golang
职位薪酬:20k-40k
工作地点:北京 海淀区 中关村
职位所需工作经历:3-5年
学历要求:本科
公司名称:旷视科技
公司类型:移动互联网
公司发展阶段:C轮
公司规模:1000-9999人
================================================================职位序号:第5个职位
职位名称:Golang
职位薪酬:20k-40k
工作地点:北京 海淀区 上地
职位所需工作经历:3-5年
学历要求:本科
公司名称:Aibee
公司类型:互联网
公司发展阶段:A轮
公司规模:100-499人
================================================================
.
省略
.
注:由于执行结果过长,为增加可阅读性部分执行结果已经删除处理
.
省略
.
================================================================
职位序号:第25个职位
职位名称:Golang
职位薪酬:20k-35k
工作地点:北京 海淀区 上地
职位所需工作经历:3-5年
学历要求:本科
公司名称:滴滴出行
公司类型:移动互联网
公司发展阶段:D轮及以上
公司规模:1000-9999人
================================================================职位序号:第26个职位
职位名称:高级软件工程师(Golang)
职位薪酬:30k-50k
工作地点:北京 海淀区 五道口
职位所需工作经历:3-5年
学历要求:学历不限
公司名称:魔门塔科技
公司类型:计算机软件
公司发展阶段:B轮
公司规模:500-999人
================================================================职位序号:第27个职位
职位名称:京东云golang后端开发工程师
职位薪酬:20k-40k
工作地点:北京 朝阳区 小营
职位所需工作经历:5-10年
学历要求:本科
公司名称:京东集团
公司类型:电子商务
公司发展阶段:已上市
公司规模:10000人以上
================================================================职位序号:第28个职位
职位名称:Golang开发工程师
职位薪酬:15k-25k
工作地点:北京 海淀区 航天桥
职位所需工作经历:1-3年
学历要求:本科
公司名称:央视网
公司类型:互联网
公司发展阶段:不需要融资
公司规模:1000-9999人
================================================================职位序号:第29个职位
职位名称:Golang开发工程师
职位薪酬:5k-9k
工作地点:北京 海淀区 大钟寺
职位所需工作经历:1年以内
学历要求:本科
公司名称:卿烨科技
公司类型:互联网
公司发展阶段:A轮
公司规模:100-499人
================================================================职位序号:第30个职位
职位名称:Golang开发工程师
职位薪酬:30k-60k
工作地点:北京 海淀区 万柳
职位所需工作经历:3-5年
学历要求:本科
公司名称:费曼咨询
公司类型:互联网
公司发展阶段:未融资
公司规模:0-20人
================================================================app elapsed: 11.074699684sProcess finished with exit code 0

我们可以看到一共花费了11s的时间,但是我们为了防止boss反爬,在程序中设置了,每隔1s中再爬取下个页面,所以减掉9s,真正的爬数据的时间也就2s:

cb3bf827cd153d86417ec0d21879929c.png

三、Python语言实现

python在爬虫方面还是比较强大的,我选了一个最时髦的框架:scrapy

这个框架虽然说功能很强大,但是用起来还稍微有点麻烦的,不说别的,创建项目就得用终端的scrapy命令创建,而不是IDE直接创建。

所以打开终端,进入python的workspace,输入以下命令:

localhost:~ ruby$ scrapy startproject bossspider

然后通过Pycharm打开这个项目:

先编写items.py文件,就是我们要爬取的数据,需要先在此处定义,然后每一条数据就是一个item:

# -*- coding: utf-8 -*-
​
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
​
import scrapy
​
​
class BossspiderItem(scrapy.Item):
​# 职位名称position_name = scrapy.Field()# 职位薪酬position_salary = scrapy.Field()# 工作地点work_address = scrapy.Field()# 职位所需工作经历work_experience = scrapy.Field()# 学历要求education = scrapy.Field()# 公司名称company_name = scrapy.Field()# 公司类型company_type = scrapy.Field()# 公司发展阶段company_development_stage = scrapy.Field()# 公司规模company_size = scrapy.Field()
​

然后我们打开spiders目录:新建一个py文件:bossspider.py,这里写爬取数据的代码:

# -*- coding: utf-8 -*-
import scrapy
import time
from bossspider.items import BossspiderItem
​
​
class BossSpider(scrapy.Spider):"""功能:爬取Boss直聘Golang职位"""# 爬虫名name = "bossspider"# 爬虫作用范围allowed_domains = ["zhipin.com"]
​url = "https://www.zhipin.com/c101010100/?query=Go&page="offset = 1# 起始urlstart_urls = [url + str(offset)]
​def parse(self, response):# items = []for each in response.xpath("//div[@class='job-list']/ul//li"):
​item = BossspiderItem()# 职位名称item['position_name'] = each.xpath(".//div[@class='job-title']/text()").extract()[0]print("职位名称:", item['position_name'])# 职位薪酬item['position_salary'] = each.xpath(".//span[@class='red']/text()").extract()[0]print("职位薪酬:", item['position_salary'])# 工作地点item['work_address'] = each.xpath(".//div[@class='info-primary']/p/text()").extract()[0]print("工作地点:", item['work_address'])# 职位所需工作经历item['work_experience'] = each.xpath(".//div[@class='info-primary']/p/text()").extract()[1]print("职位所需工作经历:", item['work_experience'])# 学历要求item['education'] = each.xpath(".//div[@class='info-primary']/p/text()").extract()[2]print("学历要求:", item['education'])# 公司名称item['company_name'] = each.xpath(".//div[@class='company-text']/h3//text()").extract()[0]print("公司名称:", item['company_name'])company_info = each.xpath(".//div[@class='company-text']/p/text()").extract()
​# print("====>>长度:", len(company_info))# 公司类型item['company_type'] = company_info[0]if len(company_info) == 3:# 公司发展阶段item['company_development_stage'] = company_info[1]print("公司发展阶段:", item['company_development_stage'])# 公司item['company_size'] = company_info[2]print("公司规模:", item['company_size'])else:# 公司规模item['company_size'] = company_info[1]print("公司规模:", item['company_size'])yield item
​if self.offset < 10:self.offset += 1print("---->", self.url+str(self.offset))time.sleep(1)yield scrapy.Request(self.url + str(self.offset), callback=self.parse)
​# return items
​
​
​

然后修改setting.py文件,设置请求头等等:

# -*- coding: utf-8 -*-
​
# Scrapy settings for bossspider project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://doc.scrapy.org/en/latest/topics/settings.html
#     https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://doc.scrapy.org/en/latest/topics/spider-middleware.html
​
BOT_NAME = 'bossspider'
​
SPIDER_MODULES = ['bossspider.spiders']
NEWSPIDER_MODULE = 'bossspider.spiders'
​
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
​
# 设置item——pipelines
ITEM_PIPELINES = {'bossspider.pipelines.BossspiderPipeline': 300,
}
​
# 设置请求头部,添加url
DEFAULT_REQUEST_HEADERS = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
​

为了能够在爬取数据的时候,统计程序耗时,我们还可以修改scrapy的包文件:corestats.py

def spider_opened(self, spider):self.start = time.time()start_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(self.start))  # 转化格式self.stats.set_value('start_time', start_time, spider=spider)
​def spider_closed(self, spider, reason):self.end = time.time()finish_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(self.end))  # 转化格式self.stats.set_value('finish_time', finish_time, spider=spider)self.stats.set_value('finish_reason', reason, spider=spider)
​# 这是计算此时运行耗费多长时间,特意转化为 时:分:秒Total_time = self.end - self.startm, s = divmod(Total_time, 60)h, m = divmod(m, 60)self.stats.set_value('Total_time', "共耗时===>%d时:%02d分:%02d秒" % (h, m, s), spider=spider)
​

然后运行一下程序,打开终端,输入以下命令:

hanru-3:bossspider ruby$ scrapy crawl bossspider

或者:

hanru-3:bossspider ruby$ scrapy crawl bossspider -o boss.json

表示把爬取的数据导出到boss.json文件中。

70a3f647d422d3748cfead82d5d494c0.png

共耗时12s,同样也是减掉9s的睡眠时间,耗时3s。

四、Java语言实现

Java的爬虫,我们可以通过Jsoup库来辅助我们实现Java语言的编程实现)。

先创建Java工程,然后下载Jsoup.jar源码库并添加到Java工程中的libs中,并添加成为library。

接着创建Item类,因为Java是面向对象的语言,所以我们先创建一个类,用于封装下载后的数据:

package com.javahook.boss;
​
//爬取数据后构建对象
public class Item {// 职位名称private String positionName;// 职位薪酬private String positionSalary;// 工作地点private String workAddress;// 职位所需工作经历private String workExperience;//学历要求private String education;// 公司名称private String companyName;// 公司类型private String companyType;//公司发展阶段private String companyDevelopmentStage;//公司规模private String companySize;
​public String getPositionName() {return positionName;}
​public void setPositionName(String positionName) {this.positionName = positionName;}
​public String getPositionSalary() {return positionSalary;}
​public void setPositionSalary(String positionSalary) {this.positionSalary = positionSalary;}
​public String getWorkAddress() {return workAddress;}
​public void setWorkAddress(String workAddress) {this.workAddress = workAddress;}
​public String getWorkExperience() {return workExperience;}
​public void setWorkExperience(String workExperience) {this.workExperience = workExperience;}
​public String getEducation() {return education;}
​public void setEducation(String education) {this.education = education;}
​public String getCompanyName() {return companyName;}
​public void setCompanyName(String companyName) {this.companyName = companyName;}
​public String getCompanyType() {return companyType;}
​public void setCompanyType(String companyType) {this.companyType = companyType;}
​public String getCompanyDevelopmentStage() {return companyDevelopmentStage;}
​public void setCompanyDevelopmentStage(String companyDevelopmentStage) {this.companyDevelopmentStage = companyDevelopmentStage;}
​public String getCompanySize() {return companySize;}
​public void setCompanySize(String companySize) {this.companySize = companySize;}
}
​

然后我们创建一个带main()的java文件,来编写爬虫的代码:

package com.javahook.boss;
​
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
​
import java.io.IOException;
​
/*** Boss直聘网站职位信息爬取代码实现*/
public class HookBoss {
​public static void main(String[] args) {
​long start = System.currentTimeMillis();
​int jobSum = 0;//总共爬取10页内容for (int i = 0; i < 10; i++) {try {jobSum += hookJobInfo(i);Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();System.out.println(" 职位爬取中断,检查程序是否有错误并重新爬取。");}}
​System.out.println("职位数量:" + jobSum);System.out.println();
​long end = System.currentTimeMillis();
​System.out.println("本次爬取共计耗时:" + ((float) (end - start)) / 1000 + "s");}
​/*** 爬取页面的方法** @param pageNumber 爬取也页码* @return*/private static int hookJobInfo(int pageNumber) throws IOException {
​//Boss直聘职位信息urlString url = "https://www.zhipin.com/c101010100/?query=Go&page=1&ka=page-1";
​//使用Jsoup库来对特定的url进行直接请求 抛出异常Document doc = Jsoup.connect(url).get();
​Elements jobElements = doc.getElementsByClass("job-list");Element jobListElement = jobElements.get(0);
​Element ulElement = jobListElement.getElementsByTag("ul").first();int jobSize = ulElement.childNodeSize() / 2;//因为标签是开标签和闭标签对称的,因此职位的数量应该是1/2;
​for (int i = 0; i < jobSize; i++) {Item item = new Item();Element jobElement = ulElement.child(i);System.out.println("============== 千锋教育Go语言开发教学部 职位信息分析 ================");System.out.println("职位序号:第" + (i + 1) + "个职位");Element jobTitle = jobElement.getElementsByClass("job-title").first();item.setPositionName(jobTitle.text());System.out.println("职位名称:" + item.getPositionName());Element jobSalary = jobElement.getElementsByClass("red").first();item.setPositionSalary(jobSalary.text());System.out.println("职位薪酬:" + item.getPositionSalary());Element elJob = jobElement.getElementsByTag("p").first();item.setWorkAddress(elJob.childNode(0).toString());System.out.println("工作地点:" + item.getWorkAddress());item.setWorkExperience( elJob.childNode(2).toString());System.out.println("职位所需工作经历:" +item.getWorkExperience());item.setEducation( elJob.childNode(4).toString());System.out.println("学历要求:" +item.getEducation());//公司信息Element companyElement = jobElement.getElementsByClass("info-company").first();Element companyName = companyElement.getElementsByClass("name").first();System.out.println("公司名称:" + companyName.text());//公司 类型、发展阶段、规模等相关信息的解析Element companyEl = companyElement.getElementsByTag("p").first();int companyInfoLength = companyEl.childNodeSize();for (int j = 0; j < companyInfoLength; j++) {String info = companyEl.childNode(j).toString();if (!"".equals(info)) {switch (j) {case 0:item.setCompanyType(companyEl.childNode(0).toString());System.out.println("公司类型:" + item.getCompanyType());break;case 2:item.setCompanyDevelopmentStage(companyEl.childNode(2).toString());System.out.println("公司发展阶段:" + item.getCompanyDevelopmentStage());break;case 4:item.setCompanySize(companyEl.childNode(4).toString());System.out.println("公司规模:" + item.getCompanySize());break;default:break;}}}System.out.println("================================================================nn");}return jobSize;}
}

因为我们对数据没有什么处理,所以边封装就边打印查看了。

5f404c122e01b46cc7ebc787a9b7d72b.png

这个速度还是有点意思的。。

五、对比

从代码量上可以看得出来Go语言是最少的,尤其的简洁。。

从运行速度上可以看出来Go语言是执行最快的,耗时最短。。

然后每个语言也都有着不同的优缺点,所以也有着各自的发展领域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_725130.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux服务器安装openwrt,探索openwrt安装宝塔,搭建web网站论坛社区网校

本帖最后由 离人难拥 于 2021-3-14 12:35 编辑本人小白新手&#xff0c;linux命令也不熟悉&#xff0c;学习&#xff0c;有老师的话请指教先认识一下openwrtOpenWrt 可以被描述为一个嵌入式的 Linux 发行版。(主流路由器固件有 dd-wrt,tomato,openwrt,padavan四类)对比一个单一…

蛋白结构建模与优化_这 11 个可以预测蛋白质结构的网站,通通都安利给你!...

蛋白质是生命活动的体现者&#xff0c;其结构决定着功能。由线性氨基酸组成的蛋白质需要折叠成特定的空间结构才具有相应的生理活性和生物学功能。解析蛋白质的空间结构对于认识蛋白质的功能、功能的执行、生物大分子间的相互作用&#xff0c;以及医学和药学的发展(如药物靶点的…

反向索引和自增索引区别_站外SEO入门:了解反向链接的最重要因素

如我们之前就提到过的&#xff0c;搜索引擎优化通常分为两个不同的类别&#xff1a;站内搜索引擎优化又称为站内SEO站外搜索引擎优化又称为站外SEO如果您想了解有关SEO优化的更多信息&#xff0c;请阅读本文。在本文中&#xff0c;我们讨论站外SEO及其最重要的方面&#xff0c;…

seo从入门到精通_SEO入门到精通(六):百度、360、搜狗、谷歌搜索引擎的区别...

常见的搜索引擎有百度、360、搜狗、谷歌等。它们的功能都是从互联网上搜集信息&#xff0c;在对信息进行组织整理&#xff0c;为用户提供搜索服务的。那么&#xff0c;不同的搜索引擎的优化策略有什么不同&#xff1f;简单来说&#xff0c;同为搜索引擎&#xff0c;其搜索原理、…

网站注册中常用的一种倒记时特效代码

网站注册中常用的一种倒记时特效代码效果图&#xff1a;在会员注册时很多网站都有一份协议或条款提供给用户阅读&#xff0c;又为了避免部分用户不阅读而直接点击"我同意"按钮跳过&#xff0c;通常的方法便是在一段时间内使按钮失效&#xff0c;实现方法如下&#xf…

mac版yy服务器连接错误_个人网站搭建之服务器环境搭建

刚刚将自己的网站发布上线&#xff0c;整理出在建站过程中用到的一些软件的配置教程分享给想搭建个人网站的童鞋。本教程适用于快速上手&#xff0c;若想深入研究&#xff0c;请查询相关官网。域名与服务器我的域名与linux服务器都是在阿里云上购买的&#xff0c;这里只介绍阿里…

html网站欢迎页面_整合SpringMVC之欢迎页面与自定义Favicon

一.Spring Boot设置欢迎页面1.默认欢迎页的源码在Spring Boot中&#xff0c;默认的欢迎界面是index.html&#xff0c;那为什么这样呢&#xff1f;我们可以看看源码是怎么定义的。public class WebMvcAutoConfiguration { private Optional getWelcomePage() { String[]…

Linux配置vip在mysql_Keepalived安装配置 - MySQL + MHA +Keepalive + VIP安装配置_服务器应用_Linux公社-Linux系统门户网站...

一、概述keepalived介绍&#xff1a;Keepalived的作用是检测web服务器的状态&#xff0c;如果有一台web服务器死机&#xff0c;或工作出现故障&#xff0c;Keepalived将检测到&#xff0c;并将有故障的web 服务器从系统中剔除&#xff0c;当web服务器工作正常后Keepalived自动将…

10个技巧助您提高网站访问速度

2019独角兽企业重金招聘Python工程师标准>>> 1、如果可能的话&#xff0c;延迟加载一些内容 可以使用Ajax来按需加载部分内容。比如一个相册&#xff0c;可以在用户浏览页面时先出缩略图&#xff0c;当用户点击了&#xff0c;然后异步请求原图并展示&#xff0c;这样…

转载 ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天...

ASP.NET SignalR 与LayIM配合&#xff0c;轻松实现网站客服聊天室&#xff08;三&#xff09; 激动人心的时刻到啦&#xff0c;实现1v1聊天 看起来挺简单&#xff0c;细节还是很多的&#xff0c;好&#xff0c;接上一篇&#xff0c;我们已经成功连接singalR服务器了&#xff0c…

继杀毒软件免费之后 网站安全也免费!

前几年刚有杀毒软件免费的时候&#xff0c;各大安全软件厂商还很不适应。冷嘲热讽者有之&#xff0c;不屑一顾者有之&#xff0c;厉声痛斥者有之。而现在看来&#xff0c;这只是一种常见的商业 模式而已&#xff0c;并没有什么可说的。而市场逐渐成熟以后&#xff0c;免费杀毒软…

安装宝塔搭建网站

centos7安装宝塔 我使用的是一台centos7虚拟机。 打开终端访问宝塔官网输入以下命令回车即可。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh安装完成之后输入bt出现下面这个界面说明安装成功…

分享20个超酷的酒店类网站设计

为什么80%的码农都做不了架构师&#xff1f;>>> 日期&#xff1a;2012-4-11 来源&#xff1a;GBin1.com 酒店类的网站设计需要有商业技巧&#xff0c;一个好的酒店网站可以把酒店的舒适和特效很好的带到网站的设计之中。这种舒适感会让用户感觉很有入住的冲动。今…

8个应该去逛逛JQuery的学习网站

2019独角兽企业重金招聘Python工程师标准>>> 根据国外科技网站 W3Techs 一项调查了近100万个网站数据显示&#xff0c;jQuery是目前最流行的 JavaScript 库。对于初学者来说&#xff0c;有的时候很难找到一个好的学习jQuery的网站&#xff0c;所以本文收集了8个很棒…

网站群建设在地市级单位的尴尬与解决之道

2019独角兽企业重金招聘Python工程师标准>>> 现实的尴尬做站群也有段日子了&#xff0c;但碰到大多数的案例只是区县级的&#xff0c;地级市的不多&#xff0c;够到省厅的简直凤毛麟角&#xff0c;为何会如此&#xff1f;得从实际情况出发看&#xff0c;往往理论离开…

网页设计师必看!27个响应式的简约风格网站

下面要展示的网站&#xff0c;不单止去除了所有多于的设计元素&#xff0c;并且成功的运用现如今流行的设计趋势&#xff0c;比如超大的文字和图片&#xff0c;简单而有效的导航菜单&#xff0c;连续滚动&#xff0c;别出心思的互动元素&#xff0c;以及最新的响应式设计。 这些…

wordpress替换成360网站卫士CDN代理加速谷歌字体方案

最近&#xff0c;由于各种原因谷歌在中国大陆的业务已基本被屏蔽&#xff0c;直接访问google.com和google.com.hk均无法打开。图&#xff1a;google.com名服务器ping测结果Google服务在大陆的崩溃情况不仅影响到了广大网民&#xff0c;也影响到了数百万的站长。WordPress是世界…

ios搭建linux开发环境,iOS学习笔记 - iOS搭建开发环_Linux编程_Linux公社-Linux系统门户网站...

好久就想试水IOS开发了&#xff0c;由于开发环境限制&#xff0c;一直局限于理论和虚拟机&#xff0c;近来入手了MacBook Pro&#xff0c;也来尝尝鲜&#xff0c;笔者也是现学现总结&#xff0c;如果有不足&#xff0c;请指正。IOS开发必备MAC OS X 另加一部iPhone手机&#xf…

壁纸图片网站收集 2020

壁纸图片网站收集 2020 收集了一些壁纸网站预防图荒 WallpapersCraft WallHeaven WallpaperAbyss

九口袋:SEO推广VS 竞价推广究竟有啥区别?

企业想要保证全网营销有效果&#xff0c;SEO是关键&#xff0c;在推广方式上有些企业选择了百度竞价推广&#xff0c;传统的企业一般采用SEO推广。有些人认为百度竞价推广属于SEO推广是不是这样呢&#xff1f;九口袋全网营销导师认为SEO推广和竞价推广还是有一定差别的。那么&a…