title: 使用go chromedp爬虫
tags: go,chromedp
author: Clown95
背景
最近小伙伴通过某些手段获取到了别人网站上的会员信息,所以他想让我把会员账号爬取下来。
其实网站的内容很简单,但是难就难在不知道怎能控制翻页,它既不是通过url参数进行翻页,也不是通过ajax参数翻页。最终我选择chromedp
这个库模拟浏览器操作,进行数据爬取。
其实这个页面的爬取方式我之前已经写过一篇文章,但是进行代码复用的时候,发现chromedp
库更新了原来的代码已经不兼容了,因此重新写一篇记录下以防以后还需使用。
这篇文章和之前文章,爬取的内容都是一样,所以我不在详细的说明。
具体实现
设置Cookie
首先我需要使用chromedp
设置浏览器Cookie
来模拟登录状态
// 任务 主要用来设置cookie ,获取登录账号后的页面
func VisitWeb(url string, cookies ...string) chromedp.Tasks {
//创建一个chrome任务
return chromedp.Tasks{
//ActionFunc是一个适配器,允许使用普通函数作为操作。
chromedp.ActionFunc(func(ctx context.Context) error {
// 设置Cookie存活时间
expr := cdp.TimeSinceEpoch(time.Now().Add(180 * 24 * time.Hour))
// 添加Cookie到chrome
for i := 0; i < len(cookies); i += 2 {
//SetCookie使用给定的cookie数据设置一个cookie; 如果存在,可能会覆盖等效的cookie。
success, err := network.SetCookie(cookies[i], cookies[i+1]).
// 设置cookie到期时间
WithExpires(&expr).
// 设置cookie作用的站点
WithDomain("dl.xzg01.com:83"). //访问网站主体
// 设置httponly,防止XSS攻击
WithHTTPOnly(true).
//Do根据提供的上下文执行Network.setCookie。
Do(ctx)
if err != nil {
return err
}
if !success {
return fmt.Errorf("could not set cookie %q to %q", cookies[i], cookies[i+1])
}
}
return nil
}),
// 跳转指定的url地址
chromedp.Navigate(url),
}
}
获取内容
设置好Cookie后,接下来就是获取网站内容,一般获取内容我们使用的是chromedp.Text
,这样我们可以直接获取的文本内容。但是这个页面比较坑的地方是它的标签是
,我之前获取这个标签的内容怎么都获取不到,所以我折中一下获取标签的Html内容。
翻页的实现,我是通过模拟点击 >
标签来实现的。
// 任务 主要执行翻页功能和或者html
func DoCrawler(res *string) chromedp.Tasks {
return chromedp.Tasks{
//下面注释掉的 Navigate 不要随便添加,如果添加上每次执行都相当于刷新,这样就永远翻不了页
//chromedp.Navigate("http://dl.xzg01.com:83/OpRoot/MemberScoreList.aspx?uid=0&op=0&uname=003008"),
chromedp.Sleep(1000), // 等待
chromedp.WaitVisible(`#form1`, chromedp.ByQuery), //等待id=from1页面可见 ByQuery是使用DOM选择器查找
chromedp.Sleep(2*time.Second),
// Click 是元素查询操作,它将鼠标单击事件发送到与选择器匹配的第一个元素节点。
chromedp.Click(`.pagination li:nth-last-child(4) a`, chromedp.ByQuery), //点击翻页
chromedp.OuterHTML(`tbody`, res, chromedp.ByQuery), //获取tbody标签的html
}
}
数据处理
现在我们已经获取到html的内容了,但是我们只需要会员账号,所以我们需要对数据进行处理。
因为tbody
标签,goquery
无法获取到它的内容,所以我们把tbody
替换成table
。
func ReplaceStr(text string) string {
return strings.Replace(text, "tbody", "table", -1)
}
可能有用户会使用手机来注册账号,所以我们使用一个函数验证账号是否是手机号码
func IsMobile(text string) bool {
match,_:=regexp.MatchString(`^((\+86)|(86))?(1(([35][0-9])|[8][0-9]|[7][01356789]|[4][579]|[6][2567]))\d{8}$`,text)
return match
}
我们还需要把数据保存成文本
func WirteText(savefile string,txt string) {
f, err := os.OpenFile(savefile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0777)
if err != nil {
fmt.Println("os Create error: ", err)
return
}
defer f.Close()
bw := bufio.NewWriter(f)
bw.WriteString(txt + "\n")
bw.Flush()
}
接下来我们就使用goquery来进行数据筛选
func GetAccount(text string) {
dom, err := goquery.NewDocumentFromReader(strings.NewReader(ReplaceStr(text)))
if err != nil {
log.Fatalln(err)
}
dom.Find("tr").Each(func(i int, selection *goquery.Selection) {
s:= selection.Find("td").Eq(6).Text()
fmt.Println(s)
WirteText("Acount.txt",s)
if IsMobile(s) {
WirteText("Mobile.txt",s)
}
})
}
执行
package main
import (
"chromedp/crawler"
"chromedp/filtrate"
"context"
"github.com/chromedp/chromedp"
"log"
)
func main() {
ctx, cancel := chromedp.NewContext(
context.Background(),
chromedp.WithLogf(log.Printf),
)
defer cancel()
//执行任务
url := "http://dl.xzg01.com:83/OpRoot/MemberScoreList.aspx?uid=0&op=0&uname=003008"
err:= chromedp.Run(ctx, crawler.VisitWeb(url,
"ASP.NET_SessionId", "zkamxkic4oiuwyc5obzgl2oj",
"__cfduid", "d04d769b567cbe9e6f24369423b440f0d1575981989",
"security_session_verify", "af027d69fbfbf4c925819043a50740b5",
))
if err != nil {
log.Fatal(err)
}
var res string
for i := 1; i < 27170; i++ {
//执行
err = chromedp.Run(ctx, crawler.DoCrawler(&res)) //执行爬虫任务
if err != nil {
log.Fatal(err)
}
filtrate.GetAccount(res)
}
}
你可能感兴趣的:(使用go chromedp爬虫 (新))
- C#连接MySQL操作详解
TechPr
c#mysqlandroidC#
C#连接MySQL操作详解在这篇文章中,我们将详细介绍如何使用C#连接和操作MySQL数据库。我们将提供完整的源代码和相应的描述,以帮助您更好地理解。步骤1:引用MySQLConnector/Net首先,您需要安装并引用MySQLConnector/Net,这是一个官方提供的用于在C#中连接MySQL数据库的库。您可以从MySQL官方网站上下载并安装这个驱动程序,然后在您的项目中添加对MySQLC
- 取对象的指定属性组成一个新的对象;变更对象的key值组成新的属性值
柠檬花开_
object取字段值组成新的对象
//原始对象constoriginalObject={id:1,name:'Alice',age:30,city:'NewYork'};//提取原始对象的指定属性并重命名,key值保持原有的const{name,id}=originalObject;//组成新对象constnewObject={displayName,id};console.log(newObject);-->{"name":"A
- Android Service 启动流程
&岁月不待人&
Android新认知android
在早些年学习Android的时候,对Service有过总结,但是主要是如何去使用,注意事项,startService和bindService的区别。AndroidService_publicintonstartcommand(intentintent,intflags-CSDN博客但是今天从源码来总结下framework层的启动流程大致是什么样的。一、startService()平时,在我们的ac
- pandas介绍
June �
可视化python数据分析大数据机器学习
本文的主要内容是基于中国大学mooc(慕课)中的“Python数据分析与可视化”课程进行整理和总结。pandas是python第三方库,是基于Numpy的一种工具,经常与numpy与matplotlib一起使用,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是
- 前端开发是随着互联网的发展而逐渐兴起的一种新的开发领域。它一直在不断地发展和演变,经历了许多重要的里程碑事件和技术革新,下面就来回顾一下前端开发的历程和发展趋势。
21级应用技术UI3班何珍锋
前端javascript前端框架
一、Web1.0时代1990年代末到2000年代初,Web1.0时代是Web发展的初期阶段,这个阶段的Web界面设计以简单的文本和图像为主,用户的互动性和用户体验都很低。在这个时代,浏览器的前端技术主要是基于HTML和CSS的,HTML指的是超文本标记语言,而CSS则指的是层叠样式表。由于这些技术的简单性,前端开发者往往需要手动编写HTML和CSS代码,并进行基本的样式设计。二、Web2.0时代随
- 探索React前端框架:JavaScript技巧与最佳实践
自由翱翔碧海蓝
javascriptreact.js前端框架js
React是一个广泛使用的JavaScript前端框架,它提供了一种组件化的开发模式,使得构建交互式用户界面变得更加简单和高效。在本文中,我们将深入探讨React框架的一些关键技巧和最佳实践,同时提供相应的源代码示例。合理使用函数组件和类组件React提供了两种主要的组件类型:函数组件和类组件。函数组件是纯粹的JavaScript函数,而类组件则是通过继承React.Component类创建的。在
- 15 分布式锁和分布式session
40岁的系统架构师
分布式系统架构
在java中一个进程里面使用synchronized在new出来对象头信息中加锁,如果是静态方法中在加载的类信息中加锁(我们在锁的原理中讲过)。如果使用lock加锁可以自己指定。这些都是在同一个进程空间中的操作。如果在分布式环境中由于程序不在一个进程空间,就没办法使用这些原子性的元素中加锁,我们需要在不同的进程空间中找原子性的元素。这就是分布式锁基于数据库的分布式锁该方式通过数据库的唯一索引来实现
- 航空航天混合动力(7)航空航天分布式电推进系统
小幽余生不加糖
航空航天混合动力分布式笔记嵌入式硬件硬件工程学习单片机
航空航天分布式电推进系统1.概述2.分布式电推进系统组成3.关键技术4.分布式电推进系统优势5.国内外研究情况5.1国外5.2国内6.分布式电推进系统应用场景6.1航空领域6.2航天领域tips:资料来自网上,仅供参考学习使用1.概述分布式推进系统是指飞行器推力由位于整个航空器上的一组推进器产生,目的是提高系统级效率或为飞行器某方面性能改善发挥有利作用,因此,分布式的本质是将集中的能量源发生器产生
- 正则表达式匹配所有符号
zzyh123456
正则表达式
首先需要明确“所有符号”的具体范围。由于符号的定义可以非常广泛,包括标点符号、特殊字符、控制字符等,我们将以一个相对通用的角度来探讨如何使用正则表达式来匹配这些符号。然而,需要注意的是,对于像https://www.naquan.com/这样的URL字符串,它本身并不包含大量的特殊符号(除了URL语法所必需的://、.、/等),但我们可以扩展讨论到更广泛的文本处理场景。正则表达式匹配所有符号定义“
- 驾驭MySQL性能优化利器:八大工具助您告别低效SQL
墨瑾轩
一起学学数据库【一】mysql性能优化sql
已列出工具的使用说明:1.mysqltuner.pl安装与使用:下载最新版本的mysqltuner.pl脚本(通常通过wget或curl命令获取)。为脚本赋予执行权限(chmod+xmysqltuner.pl)。运行脚本,提供MySQL服务器的用户名、密码以及端口号(如有必要)。示例:Code./mysqltuner.pl--user=root--password=your_password--h
- Spring集成Redis|通用Redis工具类
里昂(Leon)
工具类目springredisspringboot
一、基础使用概述在SpringBoot中一般使用RedisTemplate提供的方法来操作Redis。那么使用SpringBoot整合Redis需要那些步骤呢。1、JedisPoolConfig(这个是配置连接池)2、RedisConnectionFactory这个是配置连接信息,这里的RedisConnectionFactory是一个接口,我们需要使用它的实现类。3、RedisTemplate基
- 深入解析 GZIP 压缩传输:优化网络性能的利器
码农阿豪@新空间代码工作室
好“物”分享网络
个人名片作者简介:java领域优质创作者个人主页:码农阿豪工作室:新空间代码工作室(提供各种软件服务)个人邮箱:[
[email protected]]个人微信:15279484656个人导航网站:www.forff.top座右铭:总有人要赢。为什么不能是我呢?专栏导航:码农阿豪系列专栏导航面试专栏:收集了java相关高频面试题,面试实战总结️Spring5系列专栏:整理了Spring5重要知识点与
- 前端实现PDf文件下载功能
南风贰拾捌
知识点整理前端pdf
前言:pc端需要实现生成PDF并下载的功能。方法一:侧重点在前端,后端只需要配合把PDF所需要的数据给到前端即可。准备工作:需要npminstall这两个插件,html2Canvas,JsPDF。注:上面给的不是npm的命令,不可以直接当做npm命令使用//引入importhtml2Canvasfrom'html2canvas'importJsPDFfrom'jspdf'//也可以在main.js
- Web 性能入门指南-2.4 理解和改进累积布局偏移 (CLS)
前端后花园
Web性能入门指南前端javascriptWeb性能性能监控chrome
累积布局偏移量衡量页面的视觉稳定性。人性化的定义是,CLS可帮助您了解页面给浏览者带来不顺畅、不愉快体验的可能性。CLS是一种基于公式的指标,它考虑了网页的视觉内容在视口内的移动量,以及这些视觉元素移动的距离。CLS可以通过合成和RUM来衡量。Google建议您的网页的CLS分数不超过0.1。什么因素导致CLS恶化?累积布局偏移的好处之一是,它让我们跳出通常的基于时间的指标的思维,而是让我们思考未
- JavaScript语法特性篇-动态导入 import()
前端后花园
JS学习资料javascript前端开发语言动态导入静态导入import
1、基本使用import()语法,通常被称为动态导入,是一个类似函数的表达式,它允许异步和动态地将ECMAScript模块加载到一个可能不是模块的环境中。与声明式的导入相对应,动态导入只在需要时进行计算,并且允许更大的语法灵活性。简单来说,使用import()语法,你可以在运行时(而不是在编译时)决定要导入哪个模块,并且这种导入是异步的,不会阻塞代码的执行。awaitimport('/module
- 如何优化SQL查询性能?解开你的数据库瓶颈之谜(一)
凛鼕将至
Java技术栈高级攻略sql数据库sql性能调优
本系列文章简介:本系列文章将从数据库索引的设计和使用、查询语句的优化、数据量的控制、数据库服务器的配置等多个方面,介绍一些常见的优化方法和策略,帮助大家解决数据库性能的瓶颈问题,并提升整个系统的性能。同时,我们也将分享一些实际案例和经验,帮助大家更好地理解和应用优化方法。另外,数据库性能优化是一个综合性的工作,没有一套万能的解决方案。在优化的过程中,需要针对具体的业务场景和数据库特点,结合实际情况
- swiper移入暂停_用Swiper插件实现无缝轮播的品牌展示,鼠标移动停止,鼠标移出无缝移动视觉效果...
weixin_39726971
swiper移入暂停
正常操作,正常分析,大家好,我是D1n910。文章关键词:技术前端JQuery入门滚动文章前言:公司要求做官网呀呀呀,其中有一部分设计是要求我们最亲爱的品牌商的LOGO能够在底部无缝轮播,鼠标移上去就停下来。效果如下:一、使用插件介绍1、使用的框架是JQuery,因为讲究快速、兼容、展示,所以没有用vue、react之类的看起来高大上的框架。2、使用的是优秀的轮播插件Swiper3.0版(实际上S
- Javascript和jquery事件-鼠标移入移出事件
weixin_30740295
javascriptViewUI
javascript使用mouseover和mouseout,只在css中支持hoverjquery支持mouseover和mouseout,封装了mouseenter、mouseleave事件函数和hover函数1、有关js中的mouseover和mouseout原生js的事件类型是mouserout和mouseover,之前提到的事件冒泡的缺陷就在这里,之前说的使用阻止冒泡就行,大概说得太轻易
- MyBatis性能调优——优化SQL查询和分页查询速度
AI天才研究院
大数据AI人工智能自然语言处理人工智能语言模型编程实践开发语言架构设计
作者:禅与计算机程序设计艺术1.简介1.0什么是MyBatis?MyBatis是MyBatisSQLMapperFramework的简称,是一个Java框架,用于存取数据库中的数据。MyBatis将sql映射到java对象上,并将对象映射成sql,最终实现对关系数据库进行持久化操作。MyBatis使用xml或注解的方式来配置映射关系,并通过xml文件或注解来生成mybatis核心配置文件mybat
- 使用 Spring AI 调用本地 模型实现
drebander
AI编程springjavaspringAI
在本篇博客中,我们将学习如何使用SpringAI框架调用本地的PyTorch模型,并通过SpringBoot提供一个预测接口。SpringAI是一个用于将人工智能应用集成到Spring生态系统中的框架,它支持多种AI模型和数据源的集成,帮助开发者将AI模型无缝地集成到Java应用中。1.准备PyTorch模型首先,我们需要训练并保存一个PyTorch模型。这里我们使用一个简单的神经网络模型作为示例
- 使用Zapier Natural Language Actions与LangChain集成实现自动化工作流
srudfktuffk
langchain自动化windowspython
技术背景介绍ZapierNaturalLanguageActions(NLA)提供了一种通过自然语言接口访问Zapier平台上5000多个应用和20000多个操作的方法。通过NLA,你可以将自然语言翻译成具体的API调用并获取简化的输出。这使得在复杂的多应用环境中进行自动化操作变得更加轻松。然而需要注意的是,ZapierNLA将在2023年11月17日停用。核心原理解析NLA的核心思想是通过类似O
- 使用Swing制作类似QQ界面|圆角界面
光芒再现0394
JAVAswingqq任务jdkclass图形
制作这个界面需要jdk1.6update10以上的版本,因为使用了透明窗体。完成的界面如下:这里只列出部分关键代码:首先是制作圆角界面:Shapeshape=null;shape=newRoundRectangle2D.Double(0,0,width,height,5.5D,5.5D);AWTUtilities.setWindowShape(frame,shape);制作渐变:finalPain
- 如何在 UniApp 中实现 iOS 版本更新检测
SHENHUANJIE
UniappIOS版本更新
随着移动应用的不断发展,保持应用程序的更新是必不可少的,这样用户才能获得更好的体验。本文将帮助你在UniApp中实现iOS版的版本更新检测和提示,适合刚入行的小白。我们将分步骤进行说明,每一步所需的代码及其解释都会一一列出。整体流程概述在实现版本更新的过程中,可以将流程划分为几个主要步骤:步骤操作描述1配置更新后端搭建一个服务,提供当前版本的信息,建议使用JSON格式返回数据。2在应用中调用更新接
- 元宇宙浪潮下,3D线上展厅有了新的发展方向
商迪3D
3dvr
这一年来,置身互联网听得最多的就是元宇宙了,元宇宙话题从未断过,衍生出来的产物更是非常多,互联网巨头也在纷纷占领元宇宙这个商机,Facebook将公司名字更名为“Meta”,同时把元宇宙开发作为未来的发展核心;国内互联网巨头像字节跳动等公司也在纷纷布局元宇宙开发,商迪3D为助力线上展会成功举办,强势推出元宇宙展厅,给观众带来沉浸式元宇宙展厅体验。简单的了解元宇宙概念在元宇宙概念上,我们可以看到,元
- 【Elasticsearch】_reindex api请求
risc123456
Elasticsearchelasticsearch
在Elasticsearch中,你可以使用`_tasks`API来检查`_reindex`任务的状态。当你发起一个`_reindex`请求时,Elasticsearch会返回一个任务ID,你可以使用这个任务ID来查询任务的详细状态。以下是如何检查`_reindex`任务状态的步骤:###1.获取任务ID首先,你需要获取`_reindex`任务的ID。当你发送`_reindex`请求时,Elasti
- 数据结构与算法分析:专题内容——人工智能中的寻路3之广度优先搜索(代码详解)
梅见十柒
数据结构与算法分析算法c语言广度优先笔记
一、前言广度优先搜索尝试在不重复访问状态的情况下,寻找到一条最短路径。广度优先搜索保证如果存在一条到目标状态的路径,那么找到的肯定是最短路径。事实上,深度优先搜索和广度优先搜索的唯一不同就是广度优先搜索使用队列来保存开放集,而深度优先搜索使用栈。每次迭代时,广度优先搜索从队列头拿出一个未访问的状态,然后从这个状态开始,计算后继状态。如果达到了目标状态,那么搜索结束。任何已经在闭合集中的后继状态将会
- Google广告数据分析与优化总结
奔跑的栀子
计算广告广告计算广告数据分析数据可视化google
一、概述广告优化师虽属于广告行业,但在实际的优化过程中无不考验着优化师的数据分析能力。不同的计划在不同时期情况不一样,具体的优化应当以当时的状态跟所处情形来进行,因此对于这个行业来讲没有百分之百奏效的优化方式,广告优化师能做的就是根据自己的经验分析和判断可能是什么原因导致了计划出现问题,以及通过尝试去改变效果不好的现状。以下是我曾经优化比较成功的案例之一,下面将分日期对计划所处的状态、猜测结果出现
- 数字水印算法分类以及区别(含有变换域python代码链接)
Nefelibat
数字水印数字水印变换域
目录看代码前需要知道的理论知识使用场景分类水印算法运行名词解释历史信息的两个丢失其他抗打印水印数字水印技术变换域算法。去github上下载了一个用python写的源码:https://codeload.github.com/Messi-Q/python-watermark/zip/master然后自己跑了一下,该代码包括两个部分。一个是图像数字水印代码实现,一个是PDF数字水印代码实现。看代码前需
- uniapp H5+锁定和解除锁定屏幕方向及关闭应用启动界面及页面刷新
流氓也是种气质 _Cookie
uni-appH5+HTML5+重力感应
锁定屏幕方向plus.screen.lockOrientation(Stringorientation);说明:锁定屏幕方向后屏幕只能按锁定的屏幕方向显示,关闭当前页面后仍然有效。可再次调用此方法修改屏幕锁定方向或调用unlockOrientation()方法恢复到应用的默认值。plus.screen.lockOrientation('landscape-primary');锁定屏幕方向可取以下值
- doris:Insert Into Select
向阳1218
大数据doris
INSERTINTO支持将Doris查询的结果导入到另一个表中。INSERTINTO是一个同步导入方式,执行导入后返回导入结果。可以通过请求的返回判断导入是否成功。INSERTINTO可以保证导入任务的原子性,要么全部导入成功,要么全部导入失败。使用场景用户希望将已经在Doris表中的数据进行ETL转换并导入到一个新的Doris表中,此时适合使用INSERTINTOSELECT语法。与Multi-
- Java常用排序算法/程序员必须掌握的8大排序算法
cugfy
java
分类:
1)插入排序(直接插入排序、希尔排序)
2)交换排序(冒泡排序、快速排序)
3)选择排序(直接选择排序、堆排序)
4)归并排序
5)分配排序(基数排序)
所需辅助空间最多:归并排序
所需辅助空间最少:堆排序
平均速度最快:快速排序
不稳定:快速排序,希尔排序,堆排序。
先来看看8种排序之间的关系:
1.直接插入排序
(1
- 【Spark102】Spark存储模块BlockManager剖析
bit1129
manager
Spark围绕着BlockManager构建了存储模块,包括RDD,Shuffle,Broadcast的存储都使用了BlockManager。而BlockManager在实现上是一个针对每个应用的Master/Executor结构,即Driver上BlockManager充当了Master角色,而各个Slave上(具体到应用范围,就是Executor)的BlockManager充当了Slave角色
- linux 查看端口被占用情况详解
daizj
linux端口占用netstatlsof
经常在启动一个程序会碰到端口被占用,这里讲一下怎么查看端口是否被占用,及哪个程序占用,怎么Kill掉已占用端口的程序
1、lsof -i:port
port为端口号
[root@slave /data/spark-1.4.0-bin-cdh4]# lsof -i:8080
COMMAND PID USER FD TY
- Hosts文件使用
周凡杨
hostslocahost
一切都要从localhost说起,经常在tomcat容器起动后,访问页面时输入http://localhost:8088/index.jsp,大家都知道localhost代表本机地址,如果本机IP是10.10.134.21,那就相当于http://10.10.134.21:8088/index.jsp,有时候也会看到http: 127.0.0.1:
- java excel工具
g21121
Java excel
直接上代码,一看就懂,利用的是jxl:
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import
- web报表工具finereport常用函数的用法总结(数组函数)
老A不折腾
finereportweb报表函数总结
ADD2ARRAY
ADDARRAY(array,insertArray, start):在数组第start个位置插入insertArray中的所有元素,再返回该数组。
示例:
ADDARRAY([3,4, 1, 5, 7], [23, 43, 22], 3)返回[3, 4, 23, 43, 22, 1, 5, 7].
ADDARRAY([3,4, 1, 5, 7], "测试&q
- 游戏服务器网络带宽负载计算
墙头上一根草
服务器
家庭所安装的4M,8M宽带。其中M是指,Mbits/S
其中要提前说明的是:
8bits = 1Byte
即8位等于1字节。我们硬盘大小50G。意思是50*1024M字节,约为 50000多字节。但是网宽是以“位”为单位的,所以,8Mbits就是1M字节。是容积体积的单位。
8Mbits/s后面的S是秒。8Mbits/s意思是 每秒8M位,即每秒1M字节。
我是在计算我们网络流量时想到的
- 我的spring学习笔记2-IoC(反向控制 依赖注入)
aijuans
Spring 3 系列
IoC(反向控制 依赖注入)这是Spring提出来了,这也是Spring一大特色。这里我不用多说,我们看Spring教程就可以了解。当然我们不用Spring也可以用IoC,下面我将介绍不用Spring的IoC。
IoC不是框架,她是java的技术,如今大多数轻量级的容器都会用到IoC技术。这里我就用一个例子来说明:
如:程序中有 Mysql.calss 、Oracle.class 、SqlSe
- 高性能mysql 之 选择存储引擎(一)
annan211
mysqlInnoDBMySQL引擎存储引擎
1 没有特殊情况,应尽可能使用InnoDB存储引擎。 原因:InnoDB 和 MYIsAM 是mysql 最常用、使用最普遍的存储引擎。其中InnoDB是最重要、最广泛的存储引擎。她 被设计用来处理大量的短期事务。短期事务大部分情况下是正常提交的,很少有回滚的情况。InnoDB的性能和自动崩溃 恢复特性使得她在非事务型存储的需求中也非常流行,除非有非常
- UDP网络编程
百合不是茶
UDP编程局域网组播
UDP是基于无连接的,不可靠的传输 与TCP/IP相反
UDP实现私聊,发送方式客户端,接受方式服务器
package netUDP_sc;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Ine
- JQuery对象的val()方法执行结果分析
bijian1013
JavaScriptjsjquery
JavaScript中,如果id对应的标签不存在(同理JAVA中,如果对象不存在),则调用它的方法会报错或抛异常。在实际开发中,发现JQuery在id对应的标签不存在时,调其val()方法不会报错,结果是undefined。
- http请求测试实例(采用json-lib解析)
bijian1013
jsonhttp
由于fastjson只支持JDK1.5版本,因些对于JDK1.4的项目,可以采用json-lib来解析JSON数据。如下是http请求的另外一种写法,仅供参考。
package com;
import java.util.HashMap;
import java.util.Map;
import
- 【RPC框架Hessian四】Hessian与Spring集成
bit1129
hessian
在【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中介绍了基于Hessian的RPC服务的实现步骤,在那里使用Hessian提供的API完成基于Hessian的RPC服务开发和客户端调用,本文使用Spring对Hessian的集成来实现Hessian的RPC调用。
定义模型、接口和服务器端代码
|---Model
&nb
- 【Mahout三】基于Mahout CBayes算法的20newsgroup流程分析
bit1129
Mahout
1.Mahout环境搭建
1.下载Mahout
http://mirror.bit.edu.cn/apache/mahout/0.10.0/mahout-distribution-0.10.0.tar.gz
2.解压Mahout
3. 配置环境变量
vim /etc/profile
export HADOOP_HOME=/home
- nginx负载tomcat遇非80时的转发问题
ronin47
nginx负载后端容器是tomcat(其它容器如WAS,JBOSS暂没发现这个问题)非80端口,遇到跳转异常问题。解决的思路是:$host:port
详细如下:
该问题是最先发现的,由于之前对nginx不是特别的熟悉所以该问题是个入门级别的:
? 1 2 3 4 5
- java-17-在一个字符串中找到第一个只出现一次的字符
bylijinnan
java
public class FirstShowOnlyOnceElement {
/**Q17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
* 1.int[] count:count[i]表示i对应字符出现的次数
* 2.将26个英文字母映射:a-z <--> 0-25
* 3.假设全部字母都是小写
*/
pu
- mongoDB 复制集
开窍的石头
mongodb
mongo的复制集就像mysql的主从数据库,当你往其中的主复制集(primary)写数据的时候,副复制集(secondary)会自动同步主复制集(Primary)的数据,当主复制集挂掉以后其中的一个副复制集会自动成为主复制集。提供服务器的可用性。和防止当机问题
mo
- [宇宙与天文]宇宙时代的经济学
comsci
经济
宇宙尺度的交通工具一般都体型巨大,造价高昂。。。。。
在宇宙中进行航行,近程采用反作用力类型的发动机,需要消耗少量矿石燃料,中远程航行要采用量子或者聚变反应堆发动机,进行超空间跳跃,要消耗大量高纯度水晶体能源
以目前地球上国家的经济发展水平来讲,
- Git忽略文件
Cwind
git
有很多文件不必使用git管理。例如Eclipse或其他IDE生成的项目文件,编译生成的各种目标或临时文件等。使用git status时,会在Untracked files里面看到这些文件列表,在一次需要添加的文件比较多时(使用git add . / git add -u),会把这些所有的未跟踪文件添加进索引。
==== ==== ==== 一些牢骚
- MySQL连接数据库的必须配置
dashuaifu
mysql连接数据库配置
MySQL连接数据库的必须配置
1.driverClass:com.mysql.jdbc.Driver
2.jdbcUrl:jdbc:mysql://localhost:3306/dbname
3.user:username
4.password:password
其中1是驱动名;2是url,这里的‘dbna
- 一生要养成的60个习惯
dcj3sjt126com
习惯
一生要养成的60个习惯
第1篇 让你更受大家欢迎的习惯
1 守时,不准时赴约,让别人等,会失去很多机会。
如何做到:
①该起床时就起床,
②养成任何事情都提前15分钟的习惯。
③带本可以随时阅读的书,如果早了就拿出来读读。
④有条理,生活没条理最容易耽误时间。
⑤提前计划:将重要和不重要的事情岔开。
⑥今天就准备好明天要穿的衣服。
⑦按时睡觉,这会让按时起床更容易。
2 注重
- [介绍]Yii 是什么
dcj3sjt126com
PHPyii2
Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发现代 Web 应用程序。名字 Yii (读作 易)在中文里有“极致简单与不断演变”两重含义,也可看作 Yes It Is! 的缩写。
Yii 最适合做什么?
Yii 是一个通用的 Web 编程框架,即可以用于开发各种用 PHP 构建的 Web 应用。因为基于组件的框架结构和设计精巧的缓存支持,它特别适合开发大型应
- Linux SSH常用总结
eksliang
linux sshSSHD
转载请出自出处:http://eksliang.iteye.com/blog/2186931 一、连接到远程主机
格式:
ssh name@remoteserver
例如:
ssh
[email protected]
二、连接到远程主机指定的端口
格式:
ssh name@remoteserver -p 22
例如:
ssh i
- 快速上传头像到服务端工具类FaceUtil
gundumw100
android
快速迭代用
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOExceptio
- jQuery入门之怎么使用
ini
JavaScripthtmljqueryWebcss
jQuery的强大我何问起(个人主页:hovertree.com)就不用多说了,那么怎么使用jQuery呢?
首先,下载jquery。下载地址:http://hovertree.com/hvtart/bjae/b8627323101a4994.htm,一个是压缩版本,一个是未压缩版本,如果在开发测试阶段,可以使用未压缩版本,实际应用一般使用压缩版本(min)。然后就在页面上引用。
- 带filter的hbase查询优化
kane_xie
查询优化hbaseRandomRowFilter
问题描述
hbase scan数据缓慢,server端出现LeaseException。hbase写入缓慢。
问题原因
直接原因是: hbase client端每次和regionserver交互的时候,都会在服务器端生成一个Lease,Lease的有效期由参数hbase.regionserver.lease.period确定。如果hbase scan需
- java设计模式-单例模式
men4661273
java单例枚举反射IOC
单例模式1,饿汉模式
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
//私有的默认构造函数
private Singleton1() {}
//已经自行实例化
private static final Singleton1 singl
- mongodb 查询某一天所有信息的3种方法,根据日期查询
qiaolevip
每天进步一点点学习永无止境mongodb纵观千象
// mongodb的查询真让人难以琢磨,就查询单天信息,都需要花费一番功夫才行。
// 第一种方式:
coll.aggregate([
{$project:{sendDate: {$substr: ['$sendTime', 0, 10]}, sendTime: 1, content:1}},
{$match:{sendDate: '2015-
- 二维数组转换成JSON
tangqi609567707
java二维数组json
原文出处:http://blog.csdn.net/springsen/article/details/7833596
public class Demo {
public static void main(String[] args) { String[][] blogL
- erlang supervisor
wudixiaotie
erlang
定义supervisor时,如果是监控celuesimple_one_for_one则删除children的时候就用supervisor:terminate_child (SupModuleName, ChildPid),如果shutdown策略选择的是brutal_kill,那么supervisor会调用exit(ChildPid, kill),这样的话如果Child的behavior是gen_