金融大数据智能数据采集,结合AI,自主研发的智能爬虫技术,大规模爬取各行各业的互联网数据,极其丰富的数据源,结合自身内部数据,分析挖掘,提取有价值的信息为金融中心资金管理、风险控制、运营状况、市场策划和营销活动等提供有效的解决方案。 同时提供最新的金融行业资讯,始终与时俱进,最终实现数据驱动决策、数据化运营智能化。
▍2. 系统架构
▍2.1 核心架构
四个组件:下载器、页面处理器、调度器、管道
参考scrapy/webmagic框架,简化后的整体架构如下:
下载器
下载器负责从网上下载页面进行后续处理。 默认使用 Apache HttpClient 作为下载工具。
页面处理器
PageProcessor 负责解析页面、提取有用信息并发现新链接。 WebMagic使用Jsoup作为HTML解析工具,并基于它开发了Xsoup,一个解析XPath的工具。
这四个组件中,PageProcessor对于每个站点的每个页面都是不同的,是需要用户自定义的部分。
调度程序
Scheduler负责管理要爬取的URL以及一些去重工作。 默认情况下,JDK提供了内存队列来管理URL,并使用集合来进行重复数据删除。 它还支持使用Redis进行分布式管理。
除非项目有一些特殊的分发需求,否则不需要自己定制Scheduler。
管道
Pipeline负责处理提取结果,包括计算并持久化到文件、数据库、HDFS、ES等。默认提供“输出到控制台”和“保存到文件”两种结果处理选项。
Pipeline 定义了结果的保存方式。 如果想将它们保存到指定的数据库中,则需要编写相应的Pipeline。 对于一类需求,一般只需要写一个Pipeline即可。
▍2.2 功能模块
基于Redis的分布式爬虫系统
爬虫框架使用Scrapy,通过scrapy_redis和Redis进行分发。
发行版中有一台机器作为Master,安装Redis进行任务调度。 其他机器充当奴隶,只接受主人的任务来爬行。 原理是:Slaver运行时,当Scrapy遇到请求时,并不是交给spider去爬取,而是交给Master机上的Redis数据库。 蜘蛛想要爬取的请求也是从Redis中取出的,Redis收到Request后,首先会去除重复的内容,然后存储到数据库中。 哪个Slaver想要Request就给它,从而实现任务协调。
雷迪斯
Redis 是一个开源(BSD 许可)、内存数据结构存储系统,可用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,例如字符串、散列、列表、集合、排序集和范围查询、位图、hyperloglogs 和地理空间(geospatial)索引半径查询。
与Redis类似的还有Memcached,它也是一个基于内存的高性能缓存数据库。 Redis是单线程模型,而Memcached支持多线程; 但Memcached只支持Key-Value存储,而Redis支持多种数据结构,这也是本文选取的。 使用 Redis 的原因之一。
Redis虽然是单线程模型,但是其性能远远满足我们业务的需求。 单次Redis读写可达每秒10万次。 使用Redis的列表数据结构,可以实现发布订阅模型或者类似消息队列的功能。 但与MQ、Kafka等消息队列不同的是,Redis是一个高实时性、高性能的消息队列。
Scrapy实现分布式
Scrapy-redis
Github有一个项目叫scrapy-redis,通过Redis实现分布式爬虫。 Scrapy原生的任务调度是基于文件系统的,通过JOBDIR指定任务信息存储的路径。 这种方式爬取只能在单机上执行。 scrapy-redis修改了Scheduler、Item Pipeline等组件,将任务和数据信息的访问放入redis队列中,使得多台服务器可以同时执行crawl和tems进程,大大提高了数据爬取和处理的效率。加工。
使用redis队列
要实现Scrapy爬虫分发,这里有一个简单粗暴的方法,就是在start_requests()方法中写一个无限循环,在循环中监听一个Redis队列,一旦发现消息就pop()它,然后将将请求放入Scrapy的原生请求队列中,Scrapy的其他线程会将请求从队列中取出并继续执行。 这巧妙地利用了Redis的高性能和Scrapy的多线程模型。
Scrapy多线程模型
多线程的数量可以在Scrapy的设置中设置。 多线程是这样工作的。 主线程通过yield不断将请求推送到scrapy请求队列。 子线程会同时从请求队列中弹出请求,然后发送请求。 交给Downloader处理,同时会有专门的线程来处理返回的Response。
的优点和缺点
使用redis队列的优点是实现简单,不需要修改Scrapy源码。 但其缺点也很明显。 它的请求队列是冗余的,并且Scrapy需要一直运行。 Python的内存驻留应用程序会存在内存回收问题。 由于自动回收机制不能很好地回收垃圾,因此进程会占用越来越多的内存,直至占满。 我亲自测试过Python下手动垃圾回收并不能完全解决这个问题。 PHP等语言也存在这个问题。
解决办法有两种,定期重启进程和使用多进程。 线程生成的对象在线程结束时不会被销毁,但进程生成的对象会在进程结束时被释放。 因此,生成对象的所有操作都在一个新的进程中执行。 新进程的生命周期就是爬虫请求的生命周期。
简单的爬虫实现分发
Scrapy是一个非常强大的爬虫框架,但是很多时候,我们写的爬虫都比较简单,所以根本不需要Scrapy。 我们可以利用Python第三方库requests快速编写一个简单的爬虫。 但很多时候,我们需要将这些简单的爬虫部署到多台机器上。 使用如上的Redis方法也可以实现简单的爬虫分发。
▍2.3 验证码识别
模拟浏览器自动化
使用selenium+webdriver或Selenium+Phantomjs动态加载页面并模拟自动化操作(如登录、输入内容、截图、点击按钮)。 支持的浏览器包括 IE(7、8、9)、Mozilla Firefox、Google Chrome 等。
识别码
编码平台
网址
云速度
联众解答疑问
超人编码中心
云编码
卷积神经网络
使用n个卷积层+池化层+全连接卷积神经网络进行模型训练
如下图所示,展示了在5×5图像上对3×3卷积核进行卷积的过程。 每一次卷积都是一种特征提取方法,就像一个筛子,过滤掉图像中符合条件的部分(激活值越大越合格)。
pythontensorflow_cnn_train.py
读取数字+小写字母的验证码,定义CNN进行训练,使用softmax进行分类,准确率达到50%时停止训练,保存模型
pythontensorflow_cnn_test_model.py
测试模型
▍3. 概括
▍4. 参考
标题:联众答题 金融大数据智能数据化运营之系统架构2.1核心架构
链接:https://www.zhangqiushi.com/news/xydt/3725.html
版权:文章转载自网络,如有侵权,请联系删除!