内容简介:一个比价系统的构建
在毕设答辩前后,终于可以说说我的毕设内容了。
首先,我做的实际上是一个比价系统,当然,是那种没有用任何 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 发布,改进构建缓存
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Information
James Gleick / Vintage / 2012-3-6 / USD 16.95
James Gleick, the author of the best sellers Chaos and Genius, now brings us a work just as astonishing and masterly: a revelatory chronicle and meditation that shows how information has become th......一起来看看 《The Information》 这本书的介绍吧!