关于一个设想
wap版贴吧现已重新生效(2020.4.29)!!
贴吧已死,这是现状。据说百度的贴吧组已经没有新人加入,只许出不许进,可以说日薄西山。但是现在仍然作为中文第一社区还是有很大的影响力,同时女朋友的工作性质又与贴吧那么一点点的联系,所以准备这样一个贴吧监控助手项目。
再者就是开始着手舆情分析,大数据挖掘,向前沿靠近。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2bfPyGib-1588146402090)(http://pbnsc9qwg.bkt.clouddn.com/u=3105521460,2871723561&fm=27&gp=0.jpg)]
开始的思考
贴吧的性质与网易云之流还是有很大的差别,所以方向也不同。
前期工作的难度在于判断贴吧的加载是否是ajax形式,研究后发现虽然不是静态加载,早几年的老版贴吧应该是静态加载,然后由匿名发帖爆吧和下掉权限的删吧太猖獗导致如今的ajax形式,这也是大趋势。但是于网易云音乐的不同的分析贴吧请求,虽然没有xhr或者json形式的数据贴子,但是好在贴吧是get形式,没有加密的数据体。 接收到的只是一个页面,估计是经过百度处理过的。至于为什么不是json形式一定的原因是因为防止拿去做第三方客户端吧,毕竟百度自己的贴吧客户端是真的难用。
但是在研究过程中发现web版的贴吧还未关闭,并且不需要登陆即可查询所有相关楼中楼,并且页面代码也更加友好。所以转战用web版贴吧
api地址是:
单个贴吧 http://tieba.baidu.com/mo/q—9CC3CD881B0FE2BA30F4559A6AF8A941%3AFG%3D1-sz%40320_240%2C-1-3-0–2--wapp_1531379582221_177/m?kw=%E6%9E%97%E4%BF%8A%E6%9D%B0&lp=5011&lm=&pn=0
贴吧关键词kw=林俊杰,pn=页数(0,20,40,60…)
api的尝试
首先思考的是能否先造轮子,这样分步进行可以方便对整个项目的拆分以及功能的明确化。所以首先尝试集成贴吧的api,后面的监控通过api来调用。
Get贴吧帖子ID
web端模拟
进行web访问,在多次尝试后发现贴吧web端能够直接访问,而不需要模拟手机。但是我们无法得知会不会在某个时间点被限制,所以对他进行模拟 token。
'User-Agent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36'
在集成好headers之后,可以着手开始编写api规则。
约定俗称
我发现好的api他们的形参的设定是特别明确并且巧妙的,这里先开发一个贴吧主页的帖子ID收集,按页来返回。所以,我需要知道调用者他要访问哪一个贴吧,并且想要哪几页的参数。不能无止境的爬取,所以这里给定一个范围。
这里就设定好了三个参数
key:贴吧关键词
Start:开始页数
End:结束页数
key值虽然是贴吧关键词,但是却影响关键词是否错误,该吧是否尚未建立(被封)?这些情况都是要做分析处理的。End需要关心的是,该key是否有这一页,譬如说一个新贴吧,他只有3页帖子,但是我们却要End设置成6显然这是不合适的,所以这里也要处理。Start跟End有相同的问题,但是从实际的角度来将End解决了Start也就解决了。
web端的页数表达与PC端有所区别,以20为一页,所以这里需要做一个转化:
Start = Start*20-20
# 防止出现输入0的情况
if Start == -20:
Start = 0
End = End*20
for i in range(Start,End,20)
在观察以第一页(我们也以第一页为例),我需要的获取到的关键信息则是帖子的标题,作者,时间,以及kz(ID),幸运的是在页面中都是以div的形式存放的。
所以这里直接用BeautifulSoup来获取即可:
Soup.select('div.i')
获取到的内容:
其实这里还可以继续用到BeautifulSoup来处理,但是为了省事直接用re正则表达式来解决。
pattern = re.compile('kz=(.*?)&.*?">(.*?).*?回([0-9]\d*)\s(.*?)\s(.*?)',re.S)
差不多已经整理完了,只是需要对标题进行修该,移除掉其中的“11.\xa0”这样的html上的代码。
接下来为了能够做第三方客户端(友好),这里需要做做一个分页处理。
Page = {
str(int((i + 20) / 20)): SouList
}
Son = {
'Id':items[0][0],
'Title':Title,
'Reply':items[0][2],
'Author':items[0][3],
'Time':items[0][4]
}
SouList.append(Son)
最后将这个SouList转化为json
Result = json.dumps(ReturnJson,ensure_ascii=False)
唯一需要注意的是,在做赋值的过程中,python的原理好像是引入型。在代码注释中我也提到过,所以要引入copy包
SuperList.append(copy.deepcopy(Page))
这样基本上就做好一个api接口了,返回是以json形式。
返回的结果:
校验的结果:
Get 帖子内容
在获取到帖子基本数据后,就要获取页面内容。帖子在web的内容是很简洁的,并且没有广告。
最重要的是,相对于网页端,web端的楼中楼是不受登陆限制的,可以没有任何条件的获取到我们想要的任何一个楼中楼的信息,唯一需要注意的是,每一个楼中楼的层数是不确定的,所以这里要做判断不能根据页数,这里我是试验后果才明白。
所以思来想去发现当楼中楼达到最后一页,没有内容之后是没有“下一页”提示,所以就以“下一页”为关键词来筛别。
这里ID作为唯一的参数,这一部分大体上与获取ID基本一致,这里需要注意的是一楼跟其他楼是有所区别的,所以需要对re做分情况处理:
if count == 1 and page == 0:
pattern = re.compile('class="i">1楼.\s(.*?).*?(.*?) .*?class="b">(.*?)\d*楼.\s(.*?).*?(.*?) .*?class="b">(.*?) .*?href="(.*?)">回复(.*?)', re.S)
items = re.findall(pattern, str(OneContent))
Text = items[0][0]
Author = items[0][1]
Time = items[0][2]
Floor = items[0][4][1:-1]
# print(items)
FloorInFloor = []
if not (Floor == '' or Floor == None):
# print(items[0][2])
FloorInFloor = GetFloorInFloor(url=items[0][3])
SonDict['Text'] = Text
SonDict['Author'] = items[0][1]
SonDict['Time'] = Time
SonDict['FloorInFloor'] = FloorInFloor
FatherList.append(copy.deepcopy(SonDict))
FloorInFloor.clear()
SonDict.clear()
以及对于楼中楼的内容获取,都是基于获取到单个回复之后再来获取这个回复的楼中楼,类似一只虫这样子。
所以在做完与以上相同的处理之后:
Sentiment
关于关键词以及舆情
Sentiment部分从无到有经历了三个步骤,也是三个部分。
从需要收集的贴吧开始,获取相关的贴子内容,这里API的两个重要方法全部运用到了,这里可以称作收集阶段。
从需要分析的关键词开始,分析第一部分获得信息,进行分类和处理,总体而言第二部分是核心。
从获得与关键词相关联的内容开始,进行加工,怎么更加直观的将内容呈现给需求方,这里很考验一种经验和想法。
配置配置
相较于小程序,这里需要配置文件开始初始化参数。所以通过API以及刚提到的第一部分,我归列了这些参数。
tb:需要监控的贴吧名
Essential:监控关键词
Start:开始页数
End:结束页数
Sleep:运转周期
有些监控是不需要实时反馈的,所以这里用Sleep来做休息,休息一个周期后在来重新监控收集。
显然,我们监控的贴吧以及关键词都不是单个,所以运用configparser库读取配置文件,将两者都转化为list,方便程序初始化运转。
config = configparser.ConfigParser()
# 编码要设置成utf-8-sig而并不是utf-8
config.read('TiebaSetting.conf', encoding='utf-8-sig')
key = config.get("Setting", "tb")
keyList = key.split(',')
Essential = config.get("Customize", "Essential")
EssentialList = Essential.split(',')
# 休息周期
X = config.getint("Setting", "Sleep")
# 开始页数
Start = config.getint("Setting", "Start")
# 结束页数
End = config.getint("Setting", "End")
这里,我将用api中的GetID获取到的ID全部存取,这里只需要ID,在装载成list之后再用API的GetTiebaOne()方法获取到帖子内容。在得到想要的内容后,就要开始进行处理。
关键词分析
关键词分析在第二部分由为重要,上面提到在做关键词存放在list,这里遍历对所有的内容进行遍历。这里其实有一个很重要的Tips就是,在第一部分内容处理的时候就可以进行判断,而不用子啊做好存取之后在继而分开做处理,难免降低效率。
def OneToOne(Text):
for i in EssentialList:
if i in Text:
return True
当然,如果是做舆情导向类似于这样的方案也就是不一样的想法了。如果做热点分析,这里可以用分词来处理,解析处理掉几个常用的高频词,最后呈现的就是近来热点。
这只是一个抛砖引玉的想法,还有更多很好的想法需要发掘…
呈现
其实表达部分是修改最多的,修修补补。这里要有更新和比较,因为这里周期性的本质就是用作对比相邻周期的不同。
def ComparisonDict():
for x in Save:
for i,y in zip(OldSave,range(1,len(OldSave)+1)):
if x == i:
# 值相同
if not Save[x] == OldSave[i]:
NewList.append(str(i))
break
if y == len(OldSave) and x != i:
NewList.append(str(x))
OldSave.clear()
OldSave.update(copy.deepcopy(Save))
Save.clear()
这一段要小心很多陷阱。
其中需要删减掉很多不需要要的信息,一些html的代码。再是可以对内容进行一个不同的呈现。
在是可以动态修改我们需求的配置内容,因为相关在变化。
然后呈现的就是给需求方:
微信控制
微信是我一开始就像用作控制器和显示方式,所以需要加入itchat包。
首先加入的是图灵机器人,因为想找一个陪聊机,然后在加入tieba的舆情监控。
图灵需要接入图灵的官方API,只需要注册一个图灵,申请一个免费的key即可。
图灵官网
然后加入监控,需要多线程,单纯的示例程序以及单线程是无法完成的,虽然如果只是手动给予命令可以完成,但是效率很低,并且在面对大贴吧的时候无法做到即输即到,所以加入线程,设定周期。只需在前期配置好配置文件即可,其他的就让它自己运作就可,获得数据之后自动发送。
所以这里线程需要多开一个,开启监控以及修改配置:
def Main():
global T
while 1:
C = tieba.Main()
print('This is myitchat: '+ str(C) )
print(T)
if C == None or C == [] or C == ' ':
continue
if T == 1:
T = 0
if T ==0:
itchat.send_msg('监控到更新的数据 \n \n'+str(C),toUserName=id)
tieba.ini()
tie = threading.Thread(target=Main(), )
tie.start()
监控设置:
if msg['Text'] == '开启监控' and (id == '' or id ==None ):
# 引用全局变量
id = msg['FromUserName']
itchat.send_msg('已经开启监控~', toUserName=id)
itchat.send_msg(tieba.setting(), toUserName=id)
return
if msg['Text'] == '修改配置' and id == msg['FromUserName']:
Setting = tieba.GetSetting()
a = {
'监控贴吧列表':Setting[0],
'监控关键词':Setting[1],
'监控周期(S)':Setting[2],
'开始页数':Setting[3],
'结束页数': Setting[4]
}
itchat.send_msg('修改以下列信息,并且将修改后的信息复制发送', toUserName=id)
itchat.send_msg(str(a), toUserName=id)
return
完成
开启监控:
修改配置:
监控内容:
Github
项目完整程序在我的Github上:
TieBa-API-Sentiment
一些思考
这个项目拉了很长的战线,来来回回耗时了半个月,其实一个星期就可以完成的一个小demo被拖了这么久,有很多原因需要思考,不光光是程序外的原因,程序背身的设计和思路在设定时就没有很认真的思考,而是修修补补出现问题再来改正。
这样难免很耗时耗力。
但这项目算法涉及很少,虽然可以用到某些算法,但是在设计过程中还是想以简单为主,这是其一。再是在某些技巧以及方法上使用还是不够熟练,没有明白该方法的设计思想和原理,虽然期间学到了很多,但是仍然不够。
现在基本上可以做很多事情了,但是还是要继续学习很多专业相关,譬如前端的一些原理以及http的原理。
你可能感兴趣的:(基于python的贴吧舆情监控助手实战)
深度学习-13-小语言模型之SmolLM的使用
皮皮冰燃
深度学习 深度学习
文章附录1SmolLM概述1.1SmolLM简介1.2下载模型2运行2.1在CPU/GPU/多GPU上运行模型2.2使用torch.bfloat162.3通过位和字节的量化版本3应用示例4问题及解决4.1attention_mask和pad_token_id报错4.2max_new_tokens=205参考附录1SmolLM概述1.1SmolLM简介SmolLM是一系列尖端小型语言模型,提供三种规
【Python】【Opencv】cv2.findContours()、cv2.drawContours()和cv2.contourArea()函数详解和运行示例
木彳
Python学习和使用过程积累 python opencv 开发语言 人工智能 计算机视觉
为帮助大家理解和使用cv2.findContours()、cv2.drawContours()和cv2.contourArea()函数,本文通过对函数内容进行详解,并通过运行示例更直观表述。函数解析cv2.findContours()cv2.drawContours()cv2.contourArea()运行示例运行示例示例详解函数解析cv2.findContours()cv2.findContou
平淡无奇但又与众不同的日子——春节
我是铃儿
千晓教育段老师引领大家学习“心流”写作营训练。今天是第三天打卡练习,主题是《春节的故事》。“心流”顾名思义即是内心真实情感的流动。说到春节,我已经历了40个这样即平凡又别具意义的日子。跟随记忆回溯到小时候,不免有温暖和丝丝感动。说她平淡无奇是因为这一天跟平常一样都是24个小时,说她与众不同是因为赋予她一个名字——春节。在这个日子里人们会尽力做充分的准备,迎接她、祝贺她。记事起家境贫寒,但年会被父母
碎语
我的故事不要钱
图片发自App你之所以还没有变成孙悟空,是因为你还没有遇到那个给你三颗痣的人。曾几何时,开始细数生辰?回忆总是在雨后,潮湿的教学楼,还有多少路要走?我该如何遗忘?在这思念和回忆交织的地方。奈何那短长情丝,剪不断还生发是空空荡荡,却嗡嗡作响念初,如故。念初?如故??该隐瞒的事总清晰,千言万语只能无语有生之年狭路相逢终不能幸免悲哀是真的泪是假的,本来没因果你在南在北?遇见多少归人?摔碎几盏茶杯?待历经
Android JetPack架构——结合记事本Demo一篇打通对Sqlite的增删改查结合常用jetpack架构应用
erhtre
程序员 android jetpack 架构 sqlite
为什么要用Jetpack?========================================================================关于为什么要用Jetpack,我参考了许多的博客和官方文档,开阔了我对Android生态圈的理解和认识,在Jetpack推出前出现的许许多多强大的第三方框架与语言,典型代表无疑是强大的RxJava在Jetpack仍然有许多粉丝在一
什么叫做欲望
续淡蓝色的记忆
欲望是无形的东西,清高的人,以为他没有,冷笑着,路过包子铺,路过蛋糕店,路过美食街,然后,一切都变了,所有的一切,都被激发而出,像黑暗势力一般,席卷而来,无限蔓延,扩散而开,侵蚀着稚嫩的心,放佛再说,这才是你内心真正想要的东西。
2020-02-13记录生活44
悠爱阅读
今天早上醒来后阅读书籍材料,后来写字,过程中有给宝宝弄早饭,自己吃早饭,后来完成弹性工作的任务。之后感觉有些疲惫,闭了一小会,此刻精神抖擞。继续完成今天的学习任务。过程中对于宝宝完成阅读和记忆,也有一些感触,对于麦兜先生的严厉,有几许感触。严父慈母,可能是目前的状态,而我对宝宝有点宽松,或许有时不认同那么严厉。不过家庭中的教育,就是互相促进和弥补吧,用建设性的心态,成长性的心态来看待。今天星球日记
2023-08-01
余則徐
2023.8.1.达视津气象2023.8.1.达视津气象朋友们早上好!今天是2023.8.1.星期二,农历六月十五,6:41;这个时间的干支历法是癸卯年己未月辛卯日辛卯时。连日来天津一直阴雨连绵;据报告,前两天津门多地雨量达暴雨量级;昨天早间气象台仍然发布了暴雨预警。不过,当前逐小时预报已经认为今天夜间天津会是晴天了。但是,其逐日气象预报仍觉情况并不乐观,公历8月伊始天津仍会阴雨连绵。天津当前气温
自己看---华为od--敏感字段加密
我狠狠地刷刷刷刷刷
华为od 数据结构
题目描述给定一个由多个命令字组成的命令字符串:字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号;命令字之间以一个或多个下划线_进行分割;可以通过两个双引号””来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现;请对指定索引的敏感字段进行加密,替换为******(6个*),并删除命令字前后多余的下划线_。如果无法找到指定索引的命令字
飞机上的免费餐
蓉蓉_qian
时近中午,突然,我从广播里听见“乘客们大家好,用餐时间到了,我们将马上发放食物。请稍后。”我问妈妈:“什么叫发放食物,是免费的吗?”妈妈说:“嗯,当然了!”“哇,怎么可能是免费的呢,这也太好了吧!”不一会儿,我只闻到一股扑面而来的香味钻进我的鼻子里。只看见航空姐姐推着她的小车着我们这个方向过来,身上面装满了用银箔纸包起来的盒子,我说:“就是里面飘出来的香味!”我想,盒子我要去里面肯定是香喷喷的食物
我的第28个冰山
祉言心语
冰山打卡模式2020年11月3日陈祉言第28个冰山(补11月2号)【事件、行为】刚刚打完冰山,把冰山粘贴到日更上,发现昨天没打卡。【应对姿态】指责超理智【感受】难受、焦虑、后悔、懊悔【感受的感受】自责【观点】【期待】1、对别人的期待:期待有人可以提醒我一下2、对自己的期待:期待自己每天都能在固定的时间打卡3、猜想他人对我的期待:期待我不用别人提醒,都能做好【渴望】价值感【自我、生命力】我是信守承诺
中国男篮:15万赛后评分,赵继伟第三,赵睿3.8分倒数第一
体娱荒原
在某体育社交软件中,有15万人之多为中国男篮第二场比赛进行点评,我们一起来看看他们的评分排名。这场比赛有12人出场,全部球员都有得分进账。吴前9.9分,这场比赛他拿到全队最高的18分还有4篮板3助攻3抢断,虽然也有3次失误和5次犯规,但是瑕不掩瑜,特别是最后一节单节得到10分跟赵继伟的连线帮助球队逆转对手赢得一场胜利,他的发挥至关重要,要知道对手对他也有研究,基本上都是贴身防守,持球还有夹击,吴前
【第一章】第三节 病床上的白布
桃小多
“我总在每一个黑夜想你,嘲笑自己傻得可以---没懂得珍惜,那么轻易丢了你”——电话铃声响了!诗梦涵看到电话上赫然显示高胜的备注,心情轻松了很多,那是个猪头的头像,上面备注的是GGpig。她拿起手机,放在耳边——“喂?你是猪吗,还没到傍晚呢!你在干嘛?”电话里传来急促的跑步和呼吸声,对方没有说话。“???高胜?”诗梦涵感觉越来越不好,脑袋的疑团越来越大,夹杂着她愈发无法自圆其说的好奇心,一秒、两秒…
购物返利平台哪个比较好?揭秘返金商城App高额返利福利
返金app平台高佣返利省钱
选择一个好的购物返利平台可以帮助您获得更多的回报。本文将探讨购物返利平台的选择,同时揭秘返金商城App提供的高额返利福利。一、购物返利平台的选择在选择购物返利平台时,可以考虑以下几个因素:合作商家:一个好的购物返利平台应该与众多知名电商平台建立合作关系,提供广泛的购物返利机会。多样的合作商家意味着您有更多的选择和机会获得高额返利。返利比例:返利平台的返利比例是衡量好坏的重要指标之一。较高的返利比例
广东河源龙川佗城旅游
爱莲说Alice
这是一个有历史的古镇~佗城~广东河源龙川。南越王庙,岭南开发第一人~赵佗。图片发自App图片发自App图片发自App图片发自App图片发自App图片发自App图片发自App赵佗(越南语:TriệuĐà;约公元前240年-公元前137年,即南越武帝),恒山郡真定县(今河北正定县)人,秦朝南海龙川令,南越国创建者。赵佗原为秦朝将领,与任嚣南下攻打百越。秦末大乱时,赵佗割据岭南,建立南越国。汉高祖元年,
夏季这么做,酒店空调能耗降一半
酒店大白话
每年7、8月都是一年中用电量最大的时期,因为三伏天到了,热热热热热呀~你的空调、西瓜、冰激凌、WiFi都准备好了吗?掐指一算,这两个月电费会直线上升。不过,会做生意的酒店人,早就在源头上解决了耗电问题,将能耗降了一半!想知道怎么做吗?请看以下分享:经国家有关权威部门统计,城市电网高峰负荷约1/3用于空调制冷,使许多地区用电高度紧张,拉闸限电频繁。预计到2020年,全国制冷电力负荷高峰将达1.8亿k
技术周总结 09.09~09.15周日(C# WinForm WPF)
打破砂锅问到底007
wpf c# WinForm
文章目录一、09.09周一1.1)问题01:Windows桌面开发中,WPF和WinForm的区别和联系?联系:区别:二、09.12周四2.1)问题01:visualstudio的相关快捷键有哪些?通用快捷键编辑导航调试窗口管理2.2)问题02:publicpartialclassChoosePLReason:CommonBaseForm2.3)问题03:介绍WindowsForms中的Syste
报错 | pydantic.v1.error_wrappers.ValidationError ... subclass of BaseModel expected
程序猿林仔
报错 python python langchain
文章目录01问题情景02分析问题03阅读源码04解决方案4.1方案1-指定版本安装4.2(通用)方案2-指定v1版本4.3(推荐)方案3-参考源码01问题情景最近在做Langchain的开发,可能是因为我更新了依赖库的版本,在执行下面这部分代码的时候出现了该异常:#出现该异常的代码(仅保留核心逻辑)fromlangchain.output_parsersimportPydanticOutputPa
2022-07-15
大亲亲
做个女人好难,首先是孩子,不知道别人家的娃是什么样的,反正我的娃和我相处时,最难得是写作业,但凡写作业就是非逼我出手不可,我肯定是想让他臣服,乖乖听话去写作业,但是他写作业的前戏特别多,左摸摸右看看,超级不情不愿的开始动笔,一旦动了笔,就身上虱子就开始飞扬,抓耳扰腮。做一件事情的时候,他的身体不停的动,这是什么原因呢?比如他再背乘法口诀,手就在柜子上摸来摸去,脚踢打打,嘴巴还是在说乘法口诀的内容,
为什么坚持不到底?
西米ximena
不知道你是不是也有过这样的体会:你说要早起,要让梦想叫自己起床,可是坚持了两三天,叫醒自己的还是快要迟到的闹钟。你说要每天都要读书,多读点书,多开阔眼界,多获得点知识,可是今天太累了明天太晚了,然后发现又好几天没有看过书了。你说你要开始改变,要去见牛人,要去做牛事。可是你连迈出的第一步都失败了。为什么会是这样呢?因为不去做,不坚持做。不去做,缺少成就感。所以你现在能拿得出一篇非常棒的文章吗?不去做
学习共产主义心得
桥心隧梦
近期我认真学习了共产主义相关理论,收获颇多,具体如下:通过学习,我认识到社会主义经过长期的发展,在高度发达的基础上,最终将走向共产主义,共产主义不仅是一种科学的理论和这种理论指导下的现实的运动,而且是一种未来社会制度和社会形态。实现共产主义是人类历史发展的必然趋势,是马克思主义最崇高的理想,当代青年应该把握好历史发展规律,树立中国特色社会主义共同理想和共产主义远大理想,从自我做起,从现在做起,在追
梦中的生日:三年级上学期 兰培宇
有香气的灵魂
“我可以到李晓明爸妈工作的地方去找他们,你去一个实验室里面有进入梦境的机器,我们进去李晓明的梦中去帮助他。”班里主意多多的***正说着他的主意。“好主意。”同学们齐声说。王小明先去坐车去找他爸妈,唐三藏走了七七四十九天终于拿到了进去梦境的机器,他的爸妈见到了李晓明又孤独又伤心,李晓明的爸妈在蛋糕商店里买了一个又高又大的蛋糕,他们却没花钱,因为梦里什么都有,他们来到儿子的家里,他用双手蒙住儿子的眼镜
⭐Unity 安卓环境中正确地读取和处理 XML 文件
惊鸿醉
Unity unity android xml
写了一个选择题Demo,电脑包和编辑器内无问题,但是打包安卓手机之后题目无法正常使用,想到的是安卓环境中正确地读取文件的问题改进方案:1.由于XmlDocument.Load方法在Android上的路径问题(由于文件位于APK内部,无法像在文件系统中那样直接访问),需要先使用UnityWebRequest来异步加载文件内容,然后再解析XML。2.异步处理:修改你的代码,以支持异步文件加载和处理,这
看见,看不见
郝志阳
我们终将浑然难分,像水溶于水中。我一直想写点什么来表达一下这20天的经历,算是突破了自己,可以放空去做一件事,这20天见过了很多人,也经历了一些事,我始终认为,人在底层生存线挣扎,最可怕的是无意识,活着就是为了生计,一个月2500块的工资第一年一直到第三年,从未改变过。累,身体累到腿根本抬不起来,紧绷的神经一刻都不敢松弛,这也许就是穷忙吧。就像叶子从痛苦的蜷缩中要用力舒展一样,人也要从不假思索的蒙
流年似长
葙葙子
这次我才仔仔细细看了本周主题,哪一刻,你觉得自己长大了.....其实我一点也不想长大。记得我看过一片微文,描述的是一种孩子,很乖巧很伶俐,懂得礼让和忍让,太早的懂事的越让人心疼。当时看到这篇文章时候特别感触。我有个哥哥,还有个妹妹,总记得儿时妈妈特别疼哥哥,爸爸特别疼妹妹,而每每吵架的大部分时候,哥哥和妹妹都是联合起来围攻我。也许是这样的一个特殊的位置,造就我异常敏感,很小的时候就很懂得察言观色,
请看到我的美好
生活点滴_5224
请看到我的美好(原创:RedGrammar)请看到我的美好,找寻我美好的地方,那是真正的我,也是我想成为的样子。或许会花一点时间,或许不容易觅得,但还是请你看到我的美好。请看到我的美好,每一天都尝试一下,找寻那个方法,在我做的每一件事情里,请看到我的闪光点,请看到我的美好。
习惯与宇宙下订单
亲爱的敏儿
图片发自App1、感恩早上醒来,依旧放着导叨的感恩冥想、7点起床,开始熬着粥、准备午饭,洗衣机洗着衣服,洗漱完了开始做我的呼吸法、幸福的做完呼吸法,吃着早餐,收到珍姐传来的好消息,感恩一早收到这么惊喜的礼物,美好的一天开始了,谢谢每一天都过得越来越精彩与喜悦的高能量,谢谢,谢谢,谢谢2、感恩早上上班总结工作要点,开始完成工作上的重要事情,感恩一切最好的安排,谢谢,谢谢,谢谢3、感恩中午吃完午餐和翠
股市要牛了?
c9d342511f99
据说今天,是股市大时代来临前的最后一个安静的周末。明天开始,你们没有时间休息了,每天都是战斗的号角,厮杀的战场!我们迎着朝阳,我们向着胜利,我们勇敢冲锋。给哈哈哈哈周一见
魔力感恩(第十六期第6天)
爱之旅心理孙建芳
1、我非常感谢晨跑循序渐进,晨跑的好感觉终于回来了,当运动手表显示1万步时,身体出的汗都变成喜悦的笑!感谢[爱心]2、我非常感谢先生先生工作认真,讲究生活品质,注意生活细节,却也能包容我的“粗矿”(哈哈,这是他给我的评价)。很幸运此生能遇见。感谢[爱心]3、我非常感谢周末周末出去或待家里,或一起看电视或读书,或他做家务我晒太阳,都是最好的相守,我们全然享受轻松的周末。感谢[爱心]4、我非常感谢女儿
老头日记.山上山下
山南散人
生而平凡人生而平等。一个人听多了这样的话语耳朵能起茧,时间长了茧的肉厚了,自然就麻木起来,听见与听不见内心无有差别。如果你相信人生而平等,漠视现实世界的真实,我不想批判你,转而只想诚恳同时带点同情问你到底有几颗门牙可以磕破掉。这世界早早就把人分成三六九等,高贵低贱从来没有消失过。手里有果子的原始猿人会觉得自己比没有果子的猿人要好,因为自己不用饿肚子,这是生理本性使然;恶毒的奴隶主从来不会认为自己的
tomcat基础与部署发布
暗黑小菠萝
Tomcat java web
从51cto搬家了,以后会更新在这里方便自己查看。
做项目一直用tomcat,都是配置到eclipse中使用,这几天有时间整理一下使用心得,有一些自己配置遇到的细节问题。
Tomcat:一个Servlets和JSP页面的容器,以提供网站服务。
一、Tomcat安装
安装方式:①运行.exe安装包
&n
网站架构发展的过程
ayaoxinchao
数据库 应用服务器 网站架构
1.初始阶段网站架构:应用程序、数据库、文件等资源在同一个服务器上
2.应用服务和数据服务分离:应用服务器、数据库服务器、文件服务器
3.使用缓存改善网站性能:为应用服务器提供本地缓存,但受限于应用服务器的内存容量,可以使用专门的缓存服务器,提供分布式缓存服务器架构
4.使用应用服务器集群改善网站的并发处理能力:使用负载均衡调度服务器,将来自客户端浏览器的访问请求分发到应用服务器集群中的任何
[信息与安全]数据库的备份问题
comsci
数据库
如果你们建设的信息系统是采用中心-分支的模式,那么这里有一个问题
如果你的数据来自中心数据库,那么中心数据库如果出现故障,你的分支机构的数据如何保证安全呢?
是否应该在这种信息系统结构的基础上进行改造,容许分支机构的信息系统也备份一个中心数据库的文件呢?
&n
使用maven tomcat plugin插件debug关联源代码
商人shang
maven debug 查看源码 tomcat-plugin
*首先需要配置好'''maven-tomcat7-plugin''',参见[[Maven开发Web项目]]的'''Tomcat'''部分。
*配置好后,在[[Eclipse]]中打开'''Debug Configurations'''界面,在'''Maven Build'''项下新建当前工程的调试。在'''Main'''选项卡中点击'''Browse Workspace...'''选择需要开发的
大访问量高并发
oloz
大访问量高并发
大访问量高并发的网站主要压力还是在于数据库的操作上,尽量避免频繁的请求数据库。下面简
要列出几点解决方案:
01、优化你的代码和查询语句,合理使用索引
02、使用缓存技术例如memcache、ecache将不经常变化的数据放入缓存之中
03、采用服务器集群、负载均衡分担大访问量高并发压力
04、数据读写分离
05、合理选用框架,合理架构(推荐分布式架构)。
cache 服务器
小猪猪08
cache
Cache 即高速缓存.那么cache是怎么样提高系统性能与运行速度呢?是不是在任何情况下用cache都能提高性能?是不是cache用的越多就越好呢?我在近期开发的项目中有所体会,写下来当作总结也希望能跟大家一起探讨探讨,有错误的地方希望大家批评指正。
1.Cache 是怎么样工作的?
Cache 是分配在服务器上
mysql存储过程
香水浓
mysql
Description:插入大量测试数据
use xmpl;
drop procedure if exists mockup_test_data_sp;
create procedure mockup_test_data_sp(
in number_of_records int
)
begin
declare cnt int;
declare name varch
CSS的class、id、css文件名的常用命名规则
agevs
JavaScript UI 框架 Ajax css
CSS的class、id、css文件名的常用命名规则
(一)常用的CSS命名规则
头:header
内容:content/container
尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制整体布局宽度:wrapper
左右中:left right
全局数据源
AILIKES
java tomcat mysql jdbc JNDI
实验目的:为了研究两个项目同时访问一个全局数据源的时候是创建了一个数据源对象,还是创建了两个数据源对象。
1:将diuid和mysql驱动包(druid-1.0.2.jar和mysql-connector-java-5.1.15.jar)copy至%TOMCAT_HOME%/lib下;2:配置数据源,将JNDI在%TOMCAT_HOME%/conf/context.xml中配置好,格式如下:&l
MYSQL的随机查询的实现方法
baalwolf
mysql
MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,
JAVA的getBytes()方法
bijian1013
java eclipse unix OS
在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同OS下,返回的东西不一样!
String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如:
byte[] b_gbk = "
AngularJS中操作Cookies
bijian1013
JavaScript AngularJS Cookies
如果你的应用足够大、足够复杂,那么你很快就会遇到这样一咱种情况:你需要在客户端存储一些状态信息,这些状态信息是跨session(会话)的。你可能还记得利用document.cookie接口直接操作纯文本cookie的痛苦经历。
幸运的是,这种方式已经一去不复返了,在所有现代浏览器中几乎
[Maven学习笔记五]Maven聚合和继承特性
bit1129
maven
Maven聚合
在实际的项目中,一个项目通常会划分为多个模块,为了说明问题,以用户登陆这个小web应用为例。通常一个web应用分为三个模块:
1. 模型和数据持久化层user-core,
2. 业务逻辑层user-service以
3. web展现层user-web,
user-service依赖于user-core
user-web依赖于user-core和use
【JVM七】JVM知识点总结
bit1129
jvm
1. JVM运行模式
1.1 JVM运行时分为-server和-client两种模式,在32位机器上只有client模式的JVM。通常,64位的JVM默认都是使用server模式,因为server模式的JVM虽然启动慢点,但是,在运行过程,JVM会尽可能的进行优化
1.2 JVM分为三种字节码解释执行方式:mixed mode, interpret mode以及compiler
linux下查看nginx、apache、mysql、php的编译参数
ronin47
在linux平台下的应用,最流行的莫过于nginx、apache、mysql、php几个。而这几个常用的应用,在手工编译完以后,在其他一些情况下(如:新增模块),往往想要查看当初都使用了那些参数进行的编译。这时候就可以利用以下方法查看。
1、nginx
[root@361way ~]# /App/nginx/sbin/nginx -V
nginx: nginx version: nginx/
unity中运用Resources.Load的方法?
brotherlamp
unity视频 unity资料 unity自学 unity unity教程
问:unity中运用Resources.Load的方法?
答:Resources.Load是unity本地动态加载资本所用的方法,也即是你想动态加载的时分才用到它,比方枪弹,特效,某些实时替换的图像什么的,主张此文件夹不要放太多东西,在打包的时分,它会独自把里边的一切东西都会集打包到一同,不论里边有没有你用的东西,所以大多数资本应该是自个建文件放置
1、unity实时替换的物体即是依据环境条件
线段树-入门
bylijinnan
java 算法 线段树
/**
* 线段树入门
* 问题:已知线段[2,5] [4,6] [0,7];求点2,4,7分别出现了多少次
* 以下代码建立的线段树用链表来保存,且树的叶子结点类似[i,i]
*
* 参考链接:http://hi.baidu.com/semluhiigubbqvq/item/be736a33a8864789f4e4ad18
* @author lijinna
全选与反选
chicony
全选
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>全选与反选</title>
vim一些简单记录
chenchao051
vim
mac在/usr/share/vim/vimrc linux在/etc/vimrc
1、问:后退键不能删除数据,不能往后退怎么办?
答:在vimrc中加入set backspace=2
2、问:如何控制tab键的缩进?
答:在vimrc中加入set tabstop=4 (任何
Sublime Text 快捷键
daizj
快捷键 sublime
[size=large][/size]Sublime Text快捷键:Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格式化Ctrl+D:选择单词,重复可增加选择下一个相同的单词Ctrl+L:选择行,重复可依次增加选择下一行Ctrl+Shift+L:
php 引用(&)详解
dcj3sjt126com
PHP
在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 复制代码代码如下:
<?
$a="ABC";
$b =&$a;
echo
SVN中trunk,branches,tags用法详解
dcj3sjt126com
SVN
Subversion有一个很标准的目录结构,是这样的。比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。
对软件设计的思考
e200702084
设计模式 数据结构 算法 ssh 活动
软件设计的宏观与微观
软件开发是一种高智商的开发活动。一个优秀的软件设计人员不仅要从宏观上把握软件之间的开发,也要从微观上把握软件之间的开发。宏观上,可以应用面向对象设计,采用流行的SSH架构,采用web层,业务逻辑层,持久层分层架构。采用设计模式提供系统的健壮性和可维护性。微观上,对于一个类,甚至方法的调用,从计算机的角度模拟程序的运行情况。了解内存分配,参数传
同步、异步、阻塞、非阻塞
geeksun
非阻塞
同步、异步、阻塞、非阻塞这几个概念有时有点混淆,在此文试图解释一下。
同步:发出方法调用后,当没有返回结果,当前线程会一直在等待(阻塞)状态。
场景:打电话,营业厅窗口办业务、B/S架构的http请求-响应模式。
异步:方法调用后不立即返回结果,调用结果通过状态、通知或回调通知方法调用者或接收者。异步方法调用后,当前线程不会阻塞,会继续执行其他任务。
实现:
Reverse SSH Tunnel 反向打洞實錄
hongtoushizi
ssh
實際的操作步驟:
# 首先,在客戶那理的機器下指令連回我們自己的 Server,並設定自己 Server 上的 12345 port 會對應到幾器上的 SSH port
ssh -NfR 12345:localhost:22
[email protected]
# 然後在 myhost 的機器上連自己的 12345 port,就可以連回在客戶那的機器
ssh localhost -p 1
Hibernate中的缓存
Josh_Persistence
一级缓存 Hiberante缓存 查询缓存 二级缓存
Hibernate中的缓存
一、Hiberante中常见的三大缓存:一级缓存,二级缓存和查询缓存。
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存是由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存
对象关系行为模式之延迟加载
home198979
PHP 架构 延迟加载
形象化设计模式实战 HELLO!架构
一、概念
Lazy Load:一个对象,它虽然不包含所需要的所有数据,但是知道怎么获取这些数据。
延迟加载貌似很简单,就是在数据需要时再从数据库获取,减少数据库的消耗。但这其中还是有不少技巧的。
二、实现延迟加载
实现Lazy Load主要有四种方法:延迟初始化、虚
xml 验证
pengfeicao521
xml xml解析
有些字符,xml不能识别,用jdom或者dom4j解析的时候就报错
public static void testPattern() {
// 含有非法字符的串
String str = "Jamey친ÑԂ
div设置半透明效果
spjich
css 半透明
为div设置如下样式:
div{filter:alpha(Opacity=80);-moz-opacity:0.5;opacity: 0.5;}
说明:
1、filter:对win IE设置半透明滤镜效果,filter:alpha(Opacity=80)代表该对象80%半透明,火狐浏览器不认2、-moz-opaci
你真的了解单例模式么?
w574240966
java 单例 设计模式 jvm
单例模式,很多初学者认为单例模式很简单,并且认为自己已经掌握了这种设计模式。但事实上,你真的了解单例模式了么。
一,单例模式的5中写法。(回字的四种写法,哈哈。)
1,懒汉式
(1)线程不安全的懒汉式
public cla