0%

基于工厂模式的包识别引擎设计,和一般工厂模式不同是:

  • 匹配规则查询表中是一个树形结构,既有精确规则,又有模糊规则,匹配的过程需要多次查询的操作,从精确到模糊直至无法匹配。
  • 匹配规则查询表能够支持添加新规则操作

1 问题描述

A NMS基础协议

NMS是服务器与硬件设备(具体为RTU或者网关)工作的通信协议,协议格式描述如下:

网关地址 节点地址 源类型 包序号 包类型 负载长度 负载
gateway_mac rtu_mac source_type packet_id packet_type payload_length payload
8 8 1 4 1 1 -

前23字节为包头部,各个字段描述如下:

  • 网关地址:64位长整型,显示为十六进制形式。
  • 节点地址:64位长整型,显示为十六进制形式。
  • 源类型:表示哪一种设备,主要有 Gateway/GPRS-RTU/Mesh-RTU 三种类型的设备。
  • 包序号:32位整数,0 - 4294967295 。
  • 包类型:该包的类型。
  • 负载长度:整数0-255,表示后面的负载长度,实际中负载长度小于255。
阅读全文 »

使用Python开发web已经有一两年的时间了,是时候在业余时间接触下其他领域了。Python被称为“胶水语言”,在各个领域都占有一席之地,除了web开发之外,近年来在人工智能/机器学习也得到了广泛的应用。随着信息技术的不断发展,人工智能/机器学习也越来越受到欢。另一方面和web开发不同的是理论研究在机器学习中占有很大的比重。

阅读全文 »

使用aiohttp + lxml/爬取OSC乱弹的歌曲

一 原理分析

爬取路径与结果

爬取路径:博客列表 =》 提取博客链接 =》 获取博客内容 =》 提取歌曲信息,最后获取的结果包含了博客链接、博客标题、歌曲链接,歌曲标题的一个列表。

1
2
3
4
[
{'blog_url': 'xxx', 'blog_title': 'xxx', 'music_url': 'xxx', 'music_title': 'xxx'},
{'blog_url': 'xxx', 'blog_title': 'xxx'},# 该博客歌曲提取失败
]

起点url

爬取的起点url为博客列表的页面链接。

1
https://my.oschina.net/xxiaobian/blog?catalog=547834&sort=time&p={page}

其中page表示页码,范围取值为1-24,25页之后的乱弹就没有网易云音乐的歌曲了。

歌曲链接

歌曲链接的格式为:http://music.163.com/#/song?id=5038302或者http://music.163.com/#/song/187747/,可归纳为以http://music.163.com/#/song开头的均符合要求。

歌曲标题

首先在博客中查找。歌曲标题通常为 - 分割的一整个段落,表示歌曲和歌手。比如最新博客使用“单独段落+书名号”(如<p>《Victory》- Two Steps From Hell<p>)这种就比较好匹配,没有书名号的就很少能够提取到。

在博客文档中无法找到(通常是由于匹配规则无法覆盖所有情况),向云音乐网站获取数据,注意两点:

  • 需要将 http://music.163.com/#/song?id=28285557 转换成 http://music.163.com/song?id=28285557 格式
  • 网页标题去掉末尾的字符串“- 网易云音乐”即是所需要的歌手歌曲信息。
阅读全文 »