内容简介:一个比价系统的构建
在毕设答辩前后,终于可以说说我的毕设内容了。
首先,我做的实际上是一个比价系统,当然,是那种没有用任何 API 的系统。
换言之,我们要做的事情就是从爬虫开始收集数据,处理数据并且通过搜索展示,其中我的论文题目是「数据融合的研究以及应用」,也就是说需要对同样的商品进行聚合(融合)操作。
这篇文章大致提供一个思路,具体的代码因为写的太辣鸡就不开源了。
爬虫
首先就要从爬虫做起了,作为一个爬虫的萌新,要爬电商网站需要遇到的问题:
- 如何连续不断,或者说可以状态恢复
- 如何应付反爬
- 对于客户端渲染的网站如何处理
综合以上考虑(虽然其实考虑的是第三点),决定使用 Selenium 爬取,过去往往配合 Phantomjs,而现在我们可以愉快的使用 Chrome Headless 了。
即使不选择 Selenium 这类库渲染,当然也不是完全没有办法,比如说移动版可能就会做一些服务端渲染;或者直接去分析和请求 API 接口等等,方法可以有很多。
当然作为一个懒人,懒得进行那么多人肉分析和处理,所以直接用 Selenium 开撸。
对于每个电商网站都有分类的部分,可以从分类开始一页一页爬,也就是说如果要爬全站的话,实际上深度为 3 级就能搞定了。对于这三个步骤而言是统一的,各步骤可以单独写一个程序,各个步骤之间通过中间件或者数据库联系可以做到完全独立,互不干扰,也有助于直接部署到多台机器上。
对于一般的 Python 爬虫分布式,似乎通常都是用 Redis 去做的。
这样其实也就给了每一条数据一个状态,提出的问题 1 也就解决了。
问题 2 是个比较麻烦的问题,主流的做法依旧是:
- 减速
- 代理 IP 池
- 模拟操作
不过,这里不得不吐槽,除了一点 Cookie 上的验证之外,由于 Selenium + Driver 的组合实在略慢,加上我需要的实验数据量比较小,根本没有遇到需要反爬的问题……
融合
融合在这里根据引言部分其实被转换为了一个实体识别的问题,我们在这里假定:「品牌」、「型号」与「颜色」信息一致的为同一商品,考虑到复杂性,实际上我们只需要一个 Title 信息,对 Title 进行处理,对于其他数据则作为展示用可以选择性采集。
「品牌」我们可以直接通过品类的列表获取,进行一些处理和合并操作就可以得到一个完整的「品牌」别名列表,当然,还有一些其他的做法,比如说寻找同义词典,在一个特殊的应用环境下没必要这么做。
对 Title 进行的第一个处理就是去除商品 Title 中的所有品牌信息,贪婪匹配删除一波之后留下的就是包括了「颜色」、「型号」等信息。
先从颜色入手,我们建立了一张「颜色色系表」,不需要特别全,最后一个关键词为「色」,应该可以匹配一些流氓颜色名了。
分词操作,可以使用结巴分词,然后匹配到颜色同样在字符串中剔除这一部分。
最后找到型号,我们可以假定型号在品牌之后,剔除后也就是首个,结束。
于是我们得到了一个特征序列,根据这一特征序列就可以确定是否为同一实体。当然,之后我想到,这其实和机器学习的思路是一致的,但这个问题肯定是一个监督学习问题,实在懒得标注训练集和测试集,所以……如果把特征值处理为特征向量可以进行一些其他的操作,或者说 Title 本身就可以通过训练做一些操作,不过那是后话。
搜索与界面
搜索当然是选择 ElasticSearch 拉。
我们把融合处理后的结果丢进了 MongoDB,之后使用 mongo-connector 同步,关于这个还写了一个文章吐槽: 使用 mongo-connector 同步 MongoDB 数据库到 ElasticSearch 。
同步完成之后,搜索到的打分最高的项特征值去匹配数据库,就能得到我们的「融合结果」了。
结束
很惭愧,一点微小的吐槽,其实并没有什么卵用。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 爬虫+网站开发实例:电影票比价网
- vueSSR: 从0到1构建vueSSR项目 --- 路由的构建
- 在 Android Studio 里使用构建分析器提升构建性能
- [译] 使用 React 和 ImmutableJS 构建一个拖放布局构建器
- 为 Envoy 构建控制面指南第4部分:构建的可扩展性
- 自动化构建工具 Gradle 4.5 RC1 发布,改进构建缓存
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
突破——程序员如何练就领导力
刘朋 / 电子工业出版社 / 2018-8-31 / 55.00元
内容简介: 在今日中国如雨后春笋般出现的各种新兴的互联网和软件公司中,有越来越多的技术达人凭借在技术上的优异表现而被晋升为技术团队的管理者和领导者。然而,从技术到管理——从单枪匹马的个人贡献者到一呼百应的技术团队领导者——注定是“惊险的一跃”。对于刚走上技术团队管理岗位的技术专家,你一定遇到过和本书作者当年一样的各种困惑和不适“症状”: ——我能处理好人“机”关系,但是如何处理好人际关......一起来看看 《突破——程序员如何练就领导力》 这本书的介绍吧!