创新实训总结报告

1.分工
我在我们的创新实训队伍当中负责了知乎和头条数据的爬取和整理,实现了给定一个关键词从而查询提供相关问题的内容,更新时间,评论内容,评论数目以及赞同数量等其它数据属性的爬虫,通过爬取的数据存放到mysql中,通过构建本地Elasticsearch,kibana和logstash以及搭建云ELK服务实现了大批量数据的搜索功能,展示功能和分布式功能,能够提供问题排查,监控和预警,关联时间和数据分析的功能,从而为项目提供扎实的数据存储和查询服务。

  1. 实训主要工作
    ①头条数据的爬取,头条数据的爬取是可以在搜索界面找到相关数据的请求,通过分析network数据的请求找到请求的接口。
    在这里插入图片描述
    构造请求头,伪造成浏览器请求接口数据,实现了头条数据的获取,通过分析其json请求获得了新闻内容
    在这里插入图片描述
    但是,有一个难点在于评论的获取,因为在这个请求的接口中返回的数据是不包含评论的,是只有时间和内容的,可以通过这个相关新闻的网页的html元素去获取评论内容但是是无法获取所有热评的,需要点击获取评论,因此我通过不断查找相关接口,找到了评论接口,通过对url进行构造从而获得所有评论。

②知乎数据的爬取。知乎数据的爬取相较于头条爬取来说比较难,通过不断地分析和查找资料,发现了知乎是存在相关的数据请求接口的,但是经过数据爬取后会报错。
在这里插入图片描述
这是一个相当令我困惑的一个点我的请求cookie是正确和合适版本的客户端但是问什么会返回这样一个参数,通过查阅资料x-zse-83:,x-zse-86:是必须加在请求头中才能直接访问的,加了之后获取的数据确实不一样,但是还是无法获得正确的json数据,为此绞尽脑汁,找到了另一条出路,通过不断的分析,发现知乎提供的数据接口是比较奇怪的,为了做到反爬取,知乎对于同一个查询返回的数据接口是不同的,也就是第一个是没有权限的访问,必须要某种要求才能访问,但是其它的后续的接口格式是一样的返回同样的数据,但是没有权限要求,从而实现了数据的爬取。
爬取的数据还是有问题,其中使用utf-8的格式还是GKB-10的格式都会导致数据出错,这和头条的不太一样,我头开始使用的是将数据报错的编码全部替换为空格,实现了数据的写入,但是存在着一点数据的内容是不完整的,可能会给队伍后续的处理造成影响,因此,反复更改编码终于让我找到了解决方案,修改IDE工具的编码方式为utf-8成功的解决了问题。成功读取了数据.
读取到数据是很好的,但是读取的数据多而且杂乱,必须进行处理,分析json文件处理后得到了两种类型的数据一种是answer既包含了数据又包含了问题,另一种是question包含了问题和问题的相关属性,二者是不一样的,必须分开写到两个文件里面。

③实现了flask项目的初建,搭建mysql环境,创建相关数据库和表,将将爬取的处理好的数据通过flask的pymysql写到mysql中,为下一步elasticsearch的搭建打下一个初步基础。
在这里插入图片描述

④ELK集群的本地搭建。因为mysql做查询是相当慢的,如果数据量特别大时,响应速度会变得无法接受,而使用elasticsearch可以TB级中的数据可以返回检索结果。此外要实现在做中文搜索时,组合词检索在数据库是很难完成的。而Elasticsearch支持中文分词插件,很好地解决了问题。Elasticsearch支持全文搜索和相关度评分。在使用数据库进行查询数据时,很多时候都是通过工程代码或者命令端完成,即使使用现成的工具比如navicat也是需要使用sql语法的比较麻烦。数据库自身通常不带可视化界面。Elasticsearch集群中拥有可视化Kibana界面提升了研发的速度。Kibana可视化界面完美支持Elasticsearch。能够在上面快速地进行概念验证,分析结果,提高开发效率。因此我觉得使用由于对ELK的不熟悉,通过在本地构建分布式搜索引擎ELK做一个初步的试探。首先,必须在本地安装java,由于elasticsearch已经更新到7.x版本,他要求是java必须是11的版本,但是我发现其是可以使用java8运行的。接下来就是elk的本地部署,查阅资料,进入官网分别找到elasticsearch,kibana,logstash这3个服务,下载照着教程一步一步安装好这3个服务,做到了3个服务的正常运行。
在这里插入图片描述
在这里插入图片描述

安装好后对其进行配置,由于它是分布式的搜索引擎,为了充分利用其性能我在本地做了一个伪分布的分布式搜索引擎,通过修改配置文件,使用本机的三个端口进行通讯,本机的三个端口进行数据传输,通过为每一个服务分布4G的内存达到了伪分布的目的,在kibana中创建mapping,实现数据的存储,由于elasticsearch默认的分词器效果比较差,就是纯粹的字的切分,需要引入额外的分词模块,比如ik分词器,通过到github上的ik分词器下载相关的文件,为es引入合适的中文分词插件。并且利用logstash的pipeline实现mysql数据同步到es当中去,修改配置文件。
在这里插入图片描述
将远程mysql传输到es中。进入kibana创建index pattern实现数据的查询。
在这里插入图片描述
在kibana界面通过专有的查询实现了mysql的取代

⑤ELK部署到云端,由于项目构建的需要,我们本地进行数据传输受到了一些限制,应要求,将其部署到云端,首先我做了初步的尝试在阿里云上做了初步
的els的配置,但是在其配置中,我发现了阿里实际上直接提供了ELK服务的构建,为此,我就不再纠结于ECS服务器上部署ELK服务了,直接购买相关的服务,我可以称作是这个真正的先行者了,因为百度根本找不到相关的东西,阿里云上的说明也是已知半解扯得乱七八糟,看也看不懂个,经过不断的艰难尝试,终于实现了在阿里云上购买了ELK全家桶。
购买的ES实例。
在这里插入图片描述
购买的logstash实例。
在这里插入图片描述
我购买的虽然是比较次,但是已经实现了多节点的分布式部署,包含3个数据节点,一个kibana节点,还有一个logstash服务打开ES实例的公网地址,实现外网访问,为es安装合适的插件,通过远程打开kibana进行数据处理和map
ping创建。使用logstash实例创建管道,实现数据的传输同步,
在这里插入图片描述
通过安装阿里的sql插件,实现数据的查询不需要使用ES复杂的查询语句,可以直接使用sql的数据库查询语法直接查询数据。
同步部署在云端,实现了远程数据写入和查询,还实现了mysql数据的同步。

⑥flask中python接入elasticsearch实现数据的管理。通过学习elastic特有的语法在kibana正确的查询相关的数据,利用python和elastic的对接实现,在flsa
k利用python实现了远程进行数据查询和存储服务,通过在kibana中进行mapping的相关管理,实现了服务器端和mysql端的数据的一致性保证,利用python对elastic进行增删改查,通过对ES服务器返回的json数据格式进行处理获得需要的数据。
在这里插入图片描述
3.实训心得
通过本次一个月左右的实训,学了很多知识,主要有两个方面,一个方面是爬虫的学习,对于beautifulsoup的使用和构建合适的header头以及接口的调用和json数据的处理了更深层次的理解,爬虫不单单是html界面的处理更是接口的正确查找和调用。另一个方面是对ELK stack的学习,在大数据时代,信息检索是相当重要的,只要更高效的获取合适的数据才是能力的关键,通过elastic的部署和ES云服务器的配置,锻炼了我的运维能力,并且对es数据查询语法的学习有掌握了一个技能,并且通过python对es的处理提高了项目的构建能力,如何将一个服务合适的应用到项目中的问题通过一步步探索逐渐解决。总之,对于本次实训印象深刻,学到了很多技巧,加深了和同学们的沟通能力和项目的构建能力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值