本发明涉及海事数据的获取和更新,具体而言,尤其涉及一种海事多模态数据的获取及更新方法。
背景技术:
1、requests是python中的一个流行的http库,简化了发送http请求和处理响应的过程。它的出现使得在python中进行网络数据的获取变得更加容易和便捷。
2、随着数据挖掘和机器学习技术的发展,大量的数据被认为是宝贵的资源,因此对于获取数据的需求进一步增加。python技术为数据挖掘和机器学习提供了丰富的数据来源。
3、随着互联网的发展,网络上的信息量呈指数级增长,人们对获取特定数据的需求也越来越大。传统的手动方式已经无法满足日益增长的数据需求,因此自动化的网络数据获取技术变得尤为重要。
4、scrapy提供了一个强大而灵活的框架。在scrapy出现之前,虽然也有其他的工具和库,但它们可能在性能、功能感易用性方面存在一些不足。scrapy的出现填补了这一空白,提供了一个全面而高效的获取数据解决方案。它使用了twisted异步网络框架,这使得它可以高效地发送和处理大量的网络请求,从而实现了高并发和高效率的网页数据获取。它的设计非常模块化,它将数据获取过程拆分成多个组件,包括请求发送、页面解析数据存储等,每个组件都可以根据需求进行定制和扩展,使得开发者可以根据具体需求灵活地构建获取数据应用。它提供了完整的数据获取开发工具和流程。它的出现使得开发变得更加标准化和模块化,大大提高了开发效率。
5、scrapy框架支持使用xpath和css选择器对网页进行解析和定位元素,从而提取所需的数据。这两种选择器能够灵活地定位网页中的元素,是进行数据获取的重要工具。它还包括提供了丰富的中间件机制,包括下载中间件、中间件和管道中间件,可以在不同阶段对请求和响应进行处理,实现自定义的功能,如请求头的设置、代理的切换、数据的清洗等。
6、在海事多模态数据的获取与更新中,scrapy通常将获取到的数据暂存到内存中,并通过管道机制进行处理和存储。可以通过编写自定义的pipeline来实现数据的存储到数据库、文件或其他存储介质中。
7、增量更新方法只更新发生变化的数据,而不是重新获取整个数据集。可以通过比较已有数据和新获取的数据的差异来实现。比如在获取数据时记录数据的时间戳等重要的标识信息,然后在后续的获取中获取时间戳大于上次抓取的数据。
8、设计合适的增量数据获取策略,如按时间范围增量数据获取、按页面增量数据获取等。这样可以避免重复数据获取已经存在的数据,提高数据获取效率。
9、制定数据更新的策略,包括增量更新和全量更新两种方式。增量更新可以通过定时任务或实时监测数据变化来实现,保证数据的及时更新;全量更新则可以定期进行,确保数据的完整性和准确性。
10、redis作为一种高性能的键值对存储数据库,被广泛用于数据缓存、消息队列等场景。在scrapy中,可以将抓取到的数据存储到redis中,利用其快速读写的特性,实现海事数据的高效管理和更新。
11、综合利用以上技术,可以实现基于scrapy的海事多模态数据的高效更新,保持数据的及时性和准确性。
12、目前技术存在的问题,如下:
13、目前针对海事数据的获取及更新方法中,在大规模数据抓取和更新时,scrapy结合数组的更新方法性能可能成为瓶颈。特别是在高并发和大数据量的情况下,可能会导致内存占用过高等问题导致速度变慢。scrapy与redis结合需要设计合适的数据存储结构或者方法,将清洗后的海事数据存储到redis中,需要设计考虑数据存储哪些必要的值。
技术实现思路
1、根据上述提出的技术问题,提供一种海事多模态数据的获取及更新方法。本发明使用scrapy框架进行海事数据的获取和更新,设计合适的获取结构和规则,确保能够有效地从目标网站中获取到多模态数据。对获取到的数据进行清洗和处理,去除噪声数据,进行数据格式转换和标准化,以便后续做知识图谱存储和使用。此外本发明能够保证数据的及时更新,确保数据的完整性和准确性,并解决更新速度的问题,改进数据的更新方法,以便后续的数据获取和更新。
2、本发明采用的技术手段如下:
3、一种海事多模态数据的获取及更新方法,包括:
4、获取海事多模态船舶数据、港口数据、新闻数据;
5、根据获取的海事多模态船舶数据,基于船舶首字母,更新多模态船舶数据;
6、根据获取的港口数据,更新多模态港口数据;
7、根据获取的新闻数据,更新多模态新闻数据。
8、进一步地,所述获取海事多模态船舶数据、港口数据、新闻数据,具体包括:
9、获取海事多模态船舶数据,船舶基本信息是结构化数据,以表格或数据库记录的形式存在,便于分类和分析;船舶图像、船舶轨迹是非结构化数据,通过特定的技术和工具进行处理和分析;
10、获取港口数据,港口数据中的基本信息、船舶到港时间、离港时间、货物装卸情况是结构化数据,港口的图片数据是非结构化数据;
11、获取新闻数据,新闻数据中的发布作者、发布时间是结构化数据,而新闻内容属于非结构化数据;
12、获取对应数据字典,网站结构化数据中存在数据字典;
13、观察数据,查看网站是否需要登录;由于有的网站每页显示的船舶数量可以调整,根据获取数据的时间,找出最优获取数据的每页显示的参数,提升获取速度;
14、成功获取到第一页的数据后,计算出需要获取的数据的页数,通过第一次请求获取出总数,再根据每页数量,计算出需要获取多少页的数据;
15、采用时间戳的形式表示对于船舶结构化数据文本更新时间和船舶建造时间有关时间的字段数据,从1970年1月1日00:00:00开始计算时间戳,这个时间点之前的时间戳为负数,之后的时间戳为正数。
16、进一步地,所述根据获取的海事多模态船舶数据,基于船舶首字母,更新多模态船舶数据,具体包括:
17、第一次获取船舶结构化数据时使用的方法,如下:
18、遍历存储的船舶新增标识数据,判断参数传递的船舶imo号数据是否存在于船舶新增标识数据中,若无,则将参数传递的船舶imo号数据存储到船舶新增标识数据中,最后返回true or false;
19、当需要存储船舶更新代表的任意字段时,控制台会提示用户,请输入船舶更新存储模型的字段内容,以空格隔开,请严格按照item类子段命名,请务必将imo作为第个参数存人,若有时间参数,请将时间结构改为类似;
20、如果用户在控制台输入的字符串没有识别到是imo或者imo时,会报错提示用户,输入redis中字段标识顺序或者命名有问题;
21、如果用户在控制台输入的字符串中的数量与方法传递的参数不一致时,删除所有存储数据,并会报错,报错内容为控制台提供字段长度与传递参数的长度不一致;控制台提供字段长度的具体数据,传递参数的长度的具体数据,并显示内容“对不起!所有数据请重新存储”;
22、若没有以上任意的一种错误,则将船舶imo号对应的更新标识字段存储到船舶更新标识数据中;
23、第一次获取船舶图片数据时使用的方法,如下:
24、遍历存储的船舶新增标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
25、若没有以上的错误,会判断此页面传递过来的imo号是否存储过,返回true orfalse;
26、船舶结构化数据的新增文件使用的方法,如下:
27、遍历存储的船舶新增标识数据,判断此页面传递过来的imo号是否存储过,如果没有存储过将新增船舶的首字母,将此船舶的imo号存储到船舶新增标识数据中或存储到新增船舶的新增标识数据中,将船舶首字母存储到新增船舶首字母数据中;
28、将从页面传递过来imo号是否存储过作为标记,返回true or false;
29、当有新增的船舶出现时,控制台会提示用户,提示内容为“请输入新增文件中船舶存储模型的字段内容与存储在redis中的字段内容的长度和顺序是否一致,请务必将imo作为第一个参数存入,若有时间参数,请将时间结构改为类似”;
30、当用户输入其他的字母,会继续让用户输入;
31、当用户输入n/n,则删除所有存储数据,并会报错,报错内容为“对不起!所有数据请重新存储”;
32、当字段参数传递的数量与存储内存字段的数量不一致时,删除所有存储数据,并会报错,报错内容为“控制台提供字段长度与传递参数的长度不一致,控制台提供字段长度信息,传递参数的长度信息,对不起!所有数据请重新存储”;
33、遍历存储的船舶新增标识数据,如果没有数据,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
34、若没有以上任意的一种错误,会将船舶imo号对应的更新标识字段存储到船舶更新标识数据中;
35、获取新增船舶图片数据时使用的方法,如下:
36、遍历新增船舶首字母的存储数据,如果有数据,则返回所有数据;如果没有数据,则报错,报错内容为“当前没有新增船舶的首字母信息”;
37、遍历存储新增船舶的新增标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
38、判断从页面传递的船舶imo号是否在新增船舶的新增标识数据中,将返回true orfalse;
39、船舶结构化数据的更新文件使用的方法,如下:
40、遍历存储的船舶更新标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
41、当字段参数传递的数量与存储内存字段的数量不一致时,会报错,报错内容为“控制台提供字段长度与传递参数的长度不一致,控制台提供字段长度信息,传递参数的长度信息,请修改好后重新运行此文件”;
42、当有数据更新的船舶出现时,控制台会提示用户,提示内容为“请输入更新文件中船舶存储模型的字段内容与存储在redis中的字段内容的长度和顺序是否一致,请务必将imo作为第一个参数存入,若有时间参数,请将时间结构改为类似”;
43、当用户在控制台输入n/n时,会报错,报错内容为“您认为字段不同,请对比文件的字段,修改成功后重新运行此更新文件”;
44、若没有以上任意的一种错误,在相同船舶imo号为前提,比对从页面传递过来的此船舶更新标识字段值与存储的更新标识字段值是否相同,若不同,将存储此船舶imo号对应的更新标识字段数据更新;
45、返回从页面传递过来的船舶数据是否需要更新的记录标志,返回true or false;
46、当用户第二次或者多次获取新增的船舶数据时,需要删除新增船舶的新增标识数据。
47、进一步地,所述根据获取的港口数据,更新多模态港口数据,具体包括:
48、第一次获取港口结构化数据时使用的方法,如下:
49、遍历存储的港口新增标识数据,判断页面传递的港口un_locode,name,country数据是否存储过,若无,则将传递的港口un_locode,name,country数据存储到港口新增标识数据中,最后返回true or false;
50、当有港口需要存储到港口更新标识数据中时,控制台会提示用户,提示内容为“请输入港口更新存储模型的字段内容,以空格隔开,请严格按照item类字段命名,请务必将un_locode作为第一个参数存入、port_name作为第二个参数存入、port_country作为第三个参数存入”;
51、如果用户在控制台输入参数的顺序不同时,会报错,报错内容为“输入redis中字段标识顺序或者命名有问题”;
52、如果用户在控制台输入的字符串中的数量与方法传递的参数不一致时,删除所有存储数据,并会报错,报错内容为“控制台提供字段长度与传递参数的长度不一致,控制台提供字段长度信息,传递参数的长度信息,对不起!所有数据请重新存储”;
53、若没有以上任意的一种错误,则将该港口对应的更新标识字段存储到更新标识数据中;
54、第一次获取港口图片数据时使用的方法,如下:
55、遍历存储的港口新增标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
56、若没有错误,判断页面传递过来的un_locode,name,country数据是否存储过,返回true or false;
57、港口结构化数据的新增文件使用的方法,如下:
58、遍历港口新增标识数据,判断此页面传递的港口un_locode,name,country数据是否存储过,如果没有存储过,将页面传递的港口un_locode,name,country数据存储到港口新增标识数据中或存储到新增港口的新增标识数据中;
59、返回从页面传递过来的港口un_locode,name,country数据是否存储过作为标记,返回true or false;
60、当有新增的港口出现时,控制台会提示用户,提示内容为“请输入新增文件中港口存储模型的字段内容与存储在redis中的字段内容的长度和顺序是否一致,请务必将un_locode作为第一个参数存入、port_name作为第二个参数存入、port_country作为第三个参数存入(y/n)”;
61、当用户输入其他的字母,会继续让用户输入;
62、当用户输入n/n,所有存储数据删除,并会报错,报错内容为“对不起!所有数据请重新存储”;
63、当字段参数传递的数量与存储内存字段的数量不一致时,删除所有存储数据,并会报错,报错内容为“控制台提供字段长度与传递参数的长度不一致,控制台提供字段长度信息,传递参数的长度信息,对不起!所有数据请重新存储”;
64、遍历港口更新标识数据,如果没有数据,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
65、若没有以上任意的一种错误,将参数传递的港口更新标识字段存储到更新标识数据中;
66、返回从页面传递过来的港口更新标识字段是否是新增的港口记录标志,并返回true or false;
67、获取新增港口图片数据时使用的方法,如下:
68、遍历新增港口的新增标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
69、判断从页面传递的港口un_locode,name,country数据是否在新增港口的新增标识数据中,将返回true or false;
70、港口结构化数据的更新文件使用的方法,如下:
71、遍历港口更新标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
72、将字段参数传递的数量与存储内存字段的数量不一致时,会报错,报错内容为“控制台提供字段长度与传递参数的长度不一致,控制台提供字段长度信息,传递参数的长度信息,请修改好后重新运行此文件”;
73、当有港口需要更新数据时,控制台会提示用户,提示内容为“请输入新增文件中港口存储模型的字段内容与存储在redis中的字段内容的长度和顺序是否一致,请务必将un_locode作为第一个参数存入、port_name作为第二个参数存入、port_country作为第三个参数存入(y/n)”;
74、当用户在控制台输入n/n时,会报错,报错内容为“您认为字段不同,请对比文件的字段,修改成功后重新运行此更新文件”;
75、若没有以上任意的一种错误,在相同港口un_locode,name,country数据为前提,比对从页面传递过来的此港口更新标识字段值与存储的更新标识字段值是否相同,若不同,将存储的此港口对应的更新标识字段数据更新;
76、返回从页面传递过来的港口数据是否是更新港口的记录标志,返回true orfalse;
77、当用户第二次或者多次获取新增的港口数据时,需要删除存储的新增港口的新增标识数据。
78、进一步地,所述根据获取的新闻数据,更新多模态新闻数据,具体包括:
79、第一次获取新闻时使用的方法,如下:
80、如果传递的参数日期格式有问题,会报错,报错内容为“日期存储错误,请重新检查后运行此文件”;
81、当有新闻内容需要存储时,控制台会提示用户,提示内容为“请输入新闻更新存储模型的字段内容,以空格隔开,请严格按照方法的参数传递,第一个参数最好以船舶imo号为标识,若imo号为空可以传递船舶的name为标识;若此网站没有新闻类别,则第二个参数传递空值,请将时间参数结构改为类似”;
82、如果用户在控制台输入的第一个参数不是imo或者name时,会报错提示用户,报错内容为“输入redis中字段标识顺序或者命名有问题”;
83、如果用户在控制台输入的字符串中的数量与方法传递的参数不一致时,删除所有存储数据,并会报错,报错内容为“控制台提供字段长度与传递参数的长度不一致,控制台提供字段长度信息,传递参数的长度信息,对不起!所有数据请重新存储”;
84、若没有以上任意一种错误,将传递的新闻四个字段数据,其中新闻内容转为ascii码,并存储到新闻更新标识数据中;
85、第一次获取新闻用户图片时使用的方法,如下:
86、如果传递的参数日期格式有问题,会报错,报错内容为“日期存储错误,请重新检查后运行此文件”;
87、遍历存储的新闻更新标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
88、判断从页面传递过来这四个参数字段数据是否已经存储在新闻更新标识数据中,并返回记录标志和true or false,其中将传递参数的新闻内容数据转为ascii码;
89、遍历存储的新闻用户图片url数据,判断从页面传递过来的新闻用户图片url是否被存储过,若没有被存储过,则将新闻用户图片url存储到新闻用户图片url数据中,并返回记录标志,true or false;
90、新闻更新文件使用的方法,如下:
91、如果传递的参数日期格式有问题,会报错,报错内容为“日期存储错误,请重新检查后运行此文件”;
92、遍历存储新闻更新标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
93、如果用户在控制台输入的字符串中的数量与方法传递的参数不一致时,删除所有存储数据,并会报错,报错内容为“控制台提供字段长度与传递参数的长度不一致,控制台提供字段长度信息,传递参数的长度信息,对不起!所有数据请重新存储”;
94、若没有以上任何错误,控制台会提示用户,提示内容为“请输入新闻更新存储模型的字段内容,以空格隔开,请严格按照方法的参数传递,第一个参数最好以船舶imo号为标识,若imo号为空可以传递船舶的name为标识;若此网站没有新闻类别,则第二个参数传递空值,请将时间参数结构改为类似”;
95、当用户在控制台输入n/n时,会报错,报错内容为“您认为字段不同,请对比文件的字段,修改成功后重新运行此更新文件”;
96、若上述没有任意错误,将传递的新闻内容参数值转化为ascii码,传递判断从页面传递的船舶imo或者name参数字段数据值是否在存储的新闻更新标识数据中,若没有存储过,将新闻数据存储到新闻更新标识数据中,并存储到更新的新闻更新标识数据中;若存储过,判断相同船舶传递的新闻类别参数字段数据值是否在存储的新闻更新标识数据中,若没有存储过,将新闻数据存储到新闻更新标识数据中,并存储到更新的新闻更新标识数据中;若存储过,在相同船舶和相同新闻类别的条件下,判断传递的新闻发布时间参数字段数据值格式并转为时间戳与存储在新闻更新标识数据中提取的时间转为时间戳比较,若参数传递过来的时间比存储的新闻时间更新,将新闻数据存储到新闻更新标识数据中,并存储到更新的新闻更新标识数据中;若时间更旧,则不做任何处理;若时间相等,判断传递的新闻内容参数值转化的ascii码与存储在新闻更新标识数据中的该船舶新闻ascii码是否相同,若新闻相同,不做任何处理;若新闻不相同,则遍历存储当日被更新掉的新闻数据,若参数传递过来的新闻没有在当日被更新掉的新闻数据中,则删除所有此船舶相同类别的所有新闻,更新此船舶新闻的更新标识数据,并将传递的新闻内容参数值转化的ascii码存储到被更新掉的新闻数据中;若传递的新闻内容参数值转化的ascii码在被更新掉的新闻数据中,则不做任何处理;
97、返回从页面传递过来的新闻参数值是否需要更新的记录标志,并返回true orfalse;
98、新闻用户图片更新文件使用的方法,如下:
99、如果传递的参数日期格式有问题,会报错,报错内容为“日期存储错误,请重新检查后运行此文件”;
100、遍历更新的新闻更新标识数据,如果是空值,则报错,报错内容为“执行文件顺序或空数据错误,请按照顺序执行文件”;
101、将传递的新闻参数值转为ascii码,判断从页面传递的四个参数值是否存储在更新的新闻更新标识数据中,并返回记录标志,true or false;
102、遍历新闻用户图片url数据,判断从页面传递的新闻用户图片url数据是否存储过,并返回记录标志,true or false;
103、当用户第二次或者多次获取更新的新闻数据时,需要删除存储更新的新闻更新标识数据。
104、较现有技术相比,本发明具有以下优点:
105、1、本发明提供的一种海事多模态数据的获取及更新方法,采取redis分块存储海事多模态数据,有的网站数据可能存在相同的情况,基于redis分块读写的速度比较快,本发明方法可以筛选重复的数据,即保证数据的唯一性和获取数据的效率。
106、2、本发明提供的一种海事多模态数据的获取及更新方法,可以传入动态数据作为参数,及时更新,即保证数据的实时性。
107、3、本发明提供的一种海事多模态数据的获取及更新方法,在新增文件中使用,可以防止第一次获取数据时没有全部获取到,即保证数据的完整性。
108、4、本发明提供的一种海事多模态数据的获取及更新方法,在第一次获取如船舶、港口图片等的非结构化数据时,通过遍历已经存储的船舶、港口标识数据,获取图片,即保证数据的一致性。
109、5、本发明提供的一种海事多模态数据的获取及更新方法,在大部分网站都是通用的,只要是有船舶的imo号、名称数据,港口的un_locode、名称、国家数据,新闻发布时间、新闻内容、关联的船舶imo号或者船名数据,都可以采用本发明方法,即保证本发明方法的通用性。
110、基于上述理由本发明可在海事数据的获取及更新等领域广泛推广。
1.一种海事多模态数据的获取及更新方法,其特征在于,包括:
2.根据权利要求1所述的一种海事多模态数据的获取及更新方法,其特征在于,所述获取海事多模态船舶数据、港口数据、新闻数据,具体包括:
3.根据权利要求1所述的一种海事多模态数据的获取及更新方法,其特征在于,所述根据获取的海事多模态船舶数据,基于船舶首字母,更新多模态船舶数据,具体包括:
4.根据权利要求1所述的一种海事多模态数据的获取及更新方法,其特征在于,所述根据获取的港口数据,更新多模态港口数据,具体包括:
5.根据权利要求1所述的一种海事多模态数据的获取及更新方法,其特征在于,所述根据获取的新闻数据,更新多模态新闻数据,具体包括: