使用python实现nexus服务器特定依赖包每日检测更新

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

这段时间,公司希望将现有Maven仓库的依赖包进行整理。一些核心依赖包定期从中央仓库拉取最新版本到Nexus服务器。

基本思路如下。

1、Nexus自带中央仓库索引更新功能,可以将中央仓库的索引增量更新到本地。

2、建立一个核心依赖的对应表,将Nexus已存在的所有核心依赖的版本、groupId、artifactId维护起来。

3、定时将对应表与中央仓库索引进行比对,一旦发现有新的版本出现在中央仓库索引中,本地构建一个依赖此版本并指向Nexus代理服务器的pom.xml文件。

4、调用mvn compile命令从中央仓库拉取对应版本依赖。

 

开发过程如下。

第1步 配置Nexus索引更新

1.使用管理员账号登陆Nexus。

2.在左侧菜单中选择Repositories菜单。

3.按照下图顺序操作,Nexus就会每天定时从中央仓库增量更新索引。

第2步比较简单,写一段简单的python就能够实现,而且只需要运行一次即可。因此这部分内容就忽略过去吧。

文件的内容如下。

 

第3步是这个功能的核心。

1.首先我们需要将第2步的对应关系表导入。

这里的第8行至第13行是为了提升性能而做的操作。

2.然后解析关系表并在中央仓库索引中查找对应的依赖包,并进行版本比对。

爬取的步骤比较简单。

3.不存在的版本需要构建pom文件。

这里构建pom文件,我们用到了tenjin包。他可以帮助我们构建一套模板,而内容可以动态填充。

模板内容如下。

 

第4步 最后需要调用控制台运行mvn compile。

 

总结

python拥有众多的功能库和第三方库,使我们不必再过多关注于底层实现原理,重复造轮子。从而有更多的精力去做我们想做的事情。人的一生非常短暂,用有限的时间做更有意义的事。这就是python!

python自然语言分析SnowNLP库

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

SnowNLP是由国人开发的一款针对中文文本内容进行处理的python库。目前为止在python自然语言处理的大家族中,绝大都是针对英文解析而开发的类库。SnowNLP没有使用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。

 

官方例子代码

训练代码

官网:https://pypi.python.org/pypi/snownlp/0.11.1

使用python爬虫爬取nexus服务器依赖包pom文件信息

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

今天领导要求将公司正在试用的Nexus代理服务器中依赖包进行整理并导出一份依赖版本信息列表。得到这个需求后,首先找了一下Nexus的文档,可惜没有找到相关导出信息的功能。于是决定写个爬虫来爬取nexus服务器依赖包pom文件的信息。

首先我们先来看一下Nexus服务器上我们能够获取的信息有哪些。上图中点击左侧菜单Repositories即可查看本地仓库。

下图中显示了Nexus服务器上的几个仓库,我们的主要依赖包在Central M1 shadow中。我们点击这条记录进行查看。

点击后操作台下方出现仓库依赖包路径。在每层目录的叶子节点可以查看我们需要的pom文件信息(如图红框标记位置)。这就是我们需要的内容。

我们打开chrome浏览器的开发者工具,点击Network。来看一下我们能够得到什么样的内容。

可以看到,当点击叶子节点后,会触发一次与Nexus服务器的Ajax交互。交互的请求类型为Get请求,Url请求路径为Restful风格。报文头中还包含了一个accept参数,表明前台接收类型为json。

总的来看,请求还是比较简单。剩下的工作就是如何获得所有请求的Url了。点击仓库后面的url,可以打开一个文件浏览器。

文件浏览器的结构与Ajax请求的Url很相似,深入到依赖包文件夹内部,我们看到pom内容是无法查看的。

好在我们我们可以利用一下这个文件的路径来转换成Ajax请求的Url路径。

首先,我们需要爬取Nexus文件浏览的站点地图,并且只保留pom文件的Url路径。

这段代码可以将文件目录中第一层的所有a标签找到,我们需要的地址在a标签的href属性中。对于目录节点,我们只进入下级而不需要返回到上级,而文件我们只采集pom后缀的文件。

遍历目录常规方法是采用迭代的调用方式。

这样我们就将Nexus文件浏览器中所有的pom文件路径输出出来了。

由于文件浏览器的Url和我们Ajax请求的Url有些不同,我们需要先修改Url再进行Ajax请求。

这里如果不设置header的accept属性,获得的响应为xml格式。获得响应后我们就能够读取pom文件信息了。

这里使用try…except…结构为了防止异常出现。

最后将文件整体导出为csv格式,就完成了整个爬取工作。

完整代码如下

舆情API调查3

之前的舆情模块调查方向主要是市场上比较成熟的、及数据采集和舆情功能展示为一体的,由行业先驱的公司开发的舆情系统。这些舆情系统有丰富的数据积累,并且和完善的功能体系。但是数据导出费用高昂,功能展现不能够定制。由于这些方面的不足,我们暂时放弃产品级的舆情系统,转而调查一些开放式的公共API。

 

1、玻森NLP http://bosonnlp.com

玻森中文语义开放平台专注于中文语义分析技术,拥有丰富的经验积累。自主研发千万级中文语料库,为精准和深度的中文语义分析提供坚实基础。

主要功能包括词性分析、情感分析、命名实体识别、典型意见、文本聚类、关键词提取、新闻分类、依存文法分析、语义联想、时间转换、新闻摘要。

可以说玻森中文语义开放平台是目前国内最强大的中文语义开放平台之一。并且该平台提供的文档非常清晰,很容易上手。

我也上手试用了一下,除了词性分析之外,其他功能都写着试用,暂时不清楚试用期多久。

总的来说收费还是可以接受的(个人观点)

2、Emokit http://www.emokit.com

Emokit是做情感分析的一个免费平台,不过针对的信息载体并不是文字,而是图片和语音。这个平台虽然和我们的舆情有些偏差,不过免费提供API必须要在这里提一嘴。Emokit平台主要应用的场景是分析人的情绪,例如客服的情绪、学生的情绪、消费者的情绪等等。

 

3、腾讯文智 https://console.qcloud.com/nlp/manage_app.cgi

腾讯文智中文语义开放平台是基于并行计算系统和分布式爬虫平台,结合独特的语义分析技术, 一站式满足用户NLP、转码、抽取、全网数据抓取等中文语义分析需求的开放平台,用户能够基于平台对外提供的OpenAPI实现搜索、推荐、舆情、挖掘等语义分析应用。

主要功能包括分词/命名实体识别、情感分析、主题分类、关键词提取、敏感信息识别、句法分析、同义词、纠错、转码。

试用提供5万次API调用。

试用过后可以包月或购买调用次数,费用如下。

功能略逊于玻森,不过收费会低一些。

 

 

舆情API调查2

今天主要针对期货行业第一频道的和讯网进行调查。

地址:http://yuqing.hexun.com/2013-05-09/153932174.html

和讯网提供的解决方案如下:

1、信息采集方面,和讯舆情建立了国内目前最大的期货业新闻数据库,每天24小时对期货业新闻与社区数据做全媒体监测,涵盖与期货业相关的传统媒体报道、网络媒体转载、网络社区帖子、微博实时讨论、券商研究报告、监管政策动态、期货业同业情报等多个领域。同时还提供国内最大的海外中文媒体及英文媒体监测库。对于有境外业务或者有海外资本控股的期货公司,可提供96家海外媒体中文新闻监测服务和2000多家全球英文媒体监测服务,还可根据需求,对所有的国外期货公司和交易所官网内容进行专门抓取,供期货商或交易所用于战略和情报研究。
2、期货细分行业动态监控。精选期货细分行业的重要新闻,如贵金属动态、农产品动态、金融产品动态、工业品动态等,每天2次编辑更新。
3、独家提供期货业公告库。拥有期货公司及交易所的全部历史公告,基础资本档案实时数据对接交易所,简洁导航页面筛选出了董秘日常办公所需的公告热词,同时提供检索功能,方便董秘和证代撰写和查询公告。
4、和讯的专业财经编辑每天在后台提供早晚班新闻编辑服务,实时监测甄选期货业重要舆情动态,实时为期货公司发送预警短信、预警邮件及舆情客户端的弹出式预警。

 

地址:http://yuqing.hexun.com

期货舆情信息展示分为以下几类:

1、周报

主要章节包括

舆情概要:一周内期货业最重要事件概述。

舆情要闻:一周内期货业前5的重要事件描述。

2、月报

主要章节包括

期货业舆情总体情况:交易所及期货公司舆情热度情况、舆情分布情况、重要事件概述。

交易所舆情:月度交易所舆情重要事件描述。

期货公司舆情:月度期货公司舆情重要事件描述。

3、年鉴

年鉴舆情报告主要是针对上市公司和基金业的重大事件描述。

舆情API调查1

最近针对舆情需求进行一些调研工作,主要了解了几家大公司的舆情系统的功能。

1、百度天算

地址:https://cloud.baidu.com/solution/opinion.html

百度天算的舆情功能主要针对政府机关、大型企业、传媒机构设计。提供了舆情相关服务、自然语言处理、数据订阅等功能。

针对政府机关主要提供智慧城市、应急管理、社会管理、信息惠民相关的舆情信息。

针对大型企业主要提供竞争分析、传播效果评估、口碑监测、危机公关相关的舆情信息。

针对传媒机构主要提供行业研究、客户洞察、市场研究、影响力分析相关的舆情信息。

百度对于舆情提供的主要服务包括情感分析、观点分析、事件脉络、趋势分析、相关性分析、地域识别、传播路径、舆情预警。

百度数据订阅覆盖全网超过8000万家网站,支持多种自定义数据源。

缺点是必须使用百度云服务才可以使用百度天算提供的。

2、新浪微舆情

地址:http://wyq.sina.com

其实新浪还提供一套新浪舆情功能,但是这个功能暂时不支持个人注册。

新浪微舆情没有主要针对的使用群体,而是采用用户自定义关键字来采集舆情信息。

新浪对于舆情提供的主要服务包括情感分析、敏感度分析、事件脉络、趋势分析、传播路径、地域识别、舆情预警。

新浪微舆情可以免费试用30天。购买后可以享受500字关键字采集、并且支持200次修改关键字。

缺点是不能永久免费使用,新浪微舆情提供的导出功能价格偏高。

3、腾讯WeTest舆情

地址:https://market.qcloud.com/products/139?productId=139

传说腾讯推出了WeTest舆情平台,但实际打开主页缺报500错误。宣传页里介绍了收藏百万网站的信息,合作伙伴全部是游戏公司。

地址

腾讯开放平台也推出了一款简单的舆情API,不过功能过于简单。

地址:http://wiki.open.qq.com/wiki/舆情监控能力

 

接下来的时间,还会针对一些专门的舆情平台进行调研。

2017-09-11 博客未来发展方向

最近公司在研发一款大数据分析平台,主要业务是针对一些行业规则进行监督管理,其中包含了很多有趣的方向。

之前的文章基本都是围绕着python基础功能进行讲解,就连作者自己都觉得写的有点枯燥乏味了。索性借着这次项目的机会,结合工作中的内容,一起来项目实战一下吧。

这次项目,我主要负责舆情信息方面的业务开发。主要的技术方向大概是爬虫和语义分析。

python的出现使得爬虫开发变得非常简单,作者使用python写过很多类型的爬虫小程序,包括静态表单信息爬取、站点地图绘制、滚动加载站点爬取、动态表单信息爬取等。在接下来的一段时间,我会带着大家去认识、了解、学习、掌握爬虫。

语义分析应当属于机器学习算法领域的一门技术。作者在过去也只是学习过相关的理论,这次有机会将其应用到实际工作中,也是一件非常开心的事情。

今天就啰嗦到这里,明天开始爬虫之旅!

python中with的使用技巧

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

1、管理资源的作用域

通常使用with来控制资源的作用域,这样就不必再手动关闭资源,使得代码更加清晰。

 

2、动态代理

在with块执行前,会调用对象的__enter__(self)方法。

在with块执行后,会调用对象的__exit__(self, e_t, e_v, t_b)方法。

这样就可以在某个代码块的前后加入动态代理。

 

python内置方法介绍2

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

dict() — 创建字典

 

dir([object]) — 查询对象属性及方法

无参调用时,返回当前作用域中的属性。

有参数调用时,返回参数对象的属性及方法。

 

enumerate(iterable, start=0) — 枚举器

可以将数组转换成带索引的元祖列表。

其中start参数用来指定索引开始序号。

 

eval(expression) — 运行表达式

可以将expression运行起来,达到动态执行一些命令的效果。

 

python内置方法介绍1

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

python本身内置了很多有用的方法。这里我们简单对这些方法进行一下介绍。

abs(x) — 取绝对值方法

all(iterable) — 判断集合中是否全部为True,如果全部为True返回True,否则返回False。

any(iterable) — 判断集合中是否含有True,如果有返回True,否则返回False。

bin(x) — 将10进制转换为2进制。

bool([x]) — 判断表达式真伪,如果表达式为真返回True,否则返回False。

bytearray([source]) — 返回byte数组,参数数组元素必须为整型,并且范围为0≤x<256。

callable(object) — 判断对象是否可以调用,如果可以返回True,否则返回False。

chr(i) — 将数字转化为acsiid对应字符。