知乎和头条数据的爬取和整理,实训队伍

优采云 发布时间: 2021-08-12 20:14

  知乎和头条数据的爬取和整理,实训队伍

  1.分工

  我在我们的创新培训团队负责知乎和标题数据的抓取和排序,并意识到给定的关键词可以用来查询相关问题的内容、更新时间、评论内容,以及评论数量以及与数量等其他数据属性一致的爬虫,爬取的数据存储在mysql中,通过构建本地Elasticsearch、kibana和logstash实现*敏*感*词*数据搜索功能、展示功能和分布式功能构建云ELK服务。提供故障排除、监控预警、关联时间和数据分析功能,为项目提供扎实的数据存储和查询服务。

  培训主要工作

  ①头条数据的爬取,头条数据的爬取是在搜索界面中查找相关数据的请求,通过对网络数据的请求进行分析,找到所请求的接口。

  

  构造请求头伪造浏览器请求接口数据,实现标题数据的获取,通过解析其json请求获取新闻内容

  

  但是获取评论有难度,因为请求接口返回的数据不收录评论,只有时间和内容。评论内容可以通过相关新闻页面的html元素获取。但不可能得到所有的热门评论。您需要单击以获取评论。于是,我通过不断搜索相关接口找到了评论接口,通过构造url获取了所有评论。

  ②知乎数据爬取。 知乎数据爬取比标题爬取更难。通过不断的分析和查找资料,发现知乎有相关的数据请求接口,但是爬取数据后会报错。

  

  这一点让我有点困惑。我的请求 cookie 是正确且适当的客户端版本。但是问什么会返回这样的参数,通过查阅资料 x-zse-83:, x-zse-86: 必须加到请求头中才能直接访问。添加后得到的数据确实不同,但是依然无法获取到正确的json数据。为此,我绞尽脑汁,另寻出路。通过不断的分析,发现知乎提供的数据接口比较奇怪。为了实现反爬虫,知乎同一个查询返回的数据接口不同,即第一个是未经许可的访问,必须有一定的要求。访问,但其他后续接口格式相同,返回相同数据,但没有权限要求,从而实现数据爬取。

  抓取的数据还是有问题。使用utf-8格式或GKB-10格式会导致数据错误。这和标题不一样。我以前开始是替换数据错误的所有编码。对于空格来说,数据是写入的,但是有一点不完整的数据内容,可能会影响团队的后续处理。所以,反复改编码终于让我找到了解决办法,修改IDE工具的编码的方法成功解决了utf-8的问题。数据读取成功。

  读取的数据不错,但是读取的数据太乱,必须处理。解析json文件后,得到两类数据。一是答案收录数据和问题。另一个是问题收录问题和问题的相关属性。两者不一样,必须分别写入两个文件。

  ③实现了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三个服务,按照教程一步一步下载安装这三个服务,实现三个服务的正常运行服务。

  

  

  安装后进行配置。由于是分布式搜索引擎,为了充分发挥其性能,我在本地搭建了一个伪分布式分布式搜索引擎。通过修改配置文件,我使用三个端口进行通信,机器的三个端口进行数据传输。伪分配的目的是通过为每个服务分配4G的内存来实现的。 kibana 中创建了 Mapping 来实现数据存储。 elasticsearch默认的tokenizer效果比较差。 , 是纯分词,需要引入额外的分词模块,比如ik分词器,通过github上的ik分词器下载相关文件,引入适合es的中文分词插件。并使用logstash管道将mysql数据同步到es,并修改配置文件。

  

  将远程mysql转移到es。输入kibana创建索引模式,实现数据查询。

  

  kibana 界面中,mysql 替换为专有查询

  ⑤ELK 部署到云端。由于项目建设的需要,我们本地的数据传输会受到一些限制。根据要求,我们将其部署到云端。首先,我做了一个初步的尝试,在阿里云上做了一个初步的

  els的配置,但是在它的配置中,我发现阿里居然直接提供了ELK服务的构建。为此,我不再担心在ECS服务器上部署ELK服务,直接购买相关服务,我可以称为真正的先驱,因为百度根本找不到任何相关的东西。阿里云上的说明也被称为半解释和乱七八糟的,我看不懂。经过不断艰难的尝试,终于在阿里云上购买了ELK全家桶。

  购买的 ES 实例。

  

  购买的logstash实例。

  

  虽然是第二次购买,但是已经实现了多节点分布式部署,包括3个数据节点,一个kibana节点,一个logstash服务打开ES实例的公网地址,实现外网访问为es安装合适的插件,远程打开kibana进行数据处理和map

  Ping 已创建。使用logstash实例创建pipeline实现数据传输同步,

  

  通过安装阿里的sql插件,数据查询不需要使用ES复杂的查询语句,可以使用sql数据库查询语法直接查询数据。

  云端同步部署,实现远程数据写入和查询,也实现了mysql数据的同步。

  ⑥flask中的python连接elasticsearch实现数据管理。通过学习elastic的独特语法正确查询kibana中的相关数据,利用python和elastic的对接实现,在flsa

  k 使用python实现远程数据查询和存储服务。通过kibana中mapping的相关管理,保证了server端和mysql端数据的一致性。对ES服务器返回的json数据格式进行处理,得到需要的数据。

  

  3.培训经历

  通过这一个月的培训,我学到了很多知识,主要是两个方面,一个是爬虫的学习,beautifulsoup的使用以及合适的header、接口调用和json数据处理的构建,获得了一个深入理解,爬虫不仅仅是对html界面的处理,还有界面的正确搜索和调用。另一个方面是ELK堆栈的学习。在大数据时代,信息检索非常重要。只要更高效的获取合适的数据是能力的关键,我已经通过elastic的部署和ES云服务器的配置进行了培训。 es的运维能力,es数据查询语法的学习掌握了一项技能,通过python对es的处理提高了项目的构建能力。如何将服务恰当地应用到项目中的问题,是通过分步解决逐步探索出来的。总之,这次培训给我留下了很深的印象,学到了很多技巧,加深了与同学的沟通能力和搭建项目的能力。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线