CN107679168B - 一种基于java平台的目标网站内容获取方法 - Google Patents
一种基于java平台的目标网站内容获取方法 Download PDFInfo
- Publication number
- CN107679168B CN107679168B CN201710905213.2A CN201710905213A CN107679168B CN 107679168 B CN107679168 B CN 107679168B CN 201710905213 A CN201710905213 A CN 201710905213A CN 107679168 B CN107679168 B CN 107679168B
- Authority
- CN
- China
- Prior art keywords
- user
- website content
- configuration file
- template
- target website
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种基于java平台的目标网站内容获取方法,用于提高网站内容的获取效率。在该方法中,在用户启动网站内容自动获取开关后,根据生成的功能实例读取用户导入的jar配置文件,jar配置文件包括:线程数量、数据源地址和模板;根据jar配置文件设定的线程数量实例化相应数量的工作线程;使用相应数量的工作线程分别请求jar配置文件设定的数据源地址,从数据源地址获取符合搜索规则的目标网站内容,搜索规则包括:用户要求搜索的关键字;将目标网站内容填充到jar配置文件设定的模板中,形成流式文档数据;将流式文档数据存储到流式文档素材库中,以使用户从流式文档素材库中查找匹配目标网站的素材内容。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种基于java平台的目标网站内容获取方法。
背景技术
网站需要靠丰富的内容吸引访客来访,因此需要积累大量与网站主题相关的素材内容,特别像提供综合信息服务的网站尤为如此。例如门户类网站,需要提供可供用户浏览的服务内容。进一步的需求可能需要网站提供文档供访客下载、查看。
现有技术中对于网站的素材内容,需要由人工采编、录入完成,在项目初期这样的投入尤为需要,但需要耗费不少的人力物力。随着项目进展、访客流量增大,对信息、文档的及时性和数量都有更高的要求,基于传统方式去实现需求将不可避免的出现堰塞湖效应,倒逼项目投入更多的资源去应对,因此对于现有技术中网站内容的获取,存在效率低的问题。
发明内容
本发明的目的在于提供一种基于java平台的目标网站内容获取方法,用于提高网站内容的获取效率。
为了达到上述目的,本发明采用这样的如下技术方案:
本发明提供一种基于java平台的目标网站内容获取方法,包括:
在用户启动网站内容自动获取开关后,根据生成的功能实例读取用户导入的jar配置文件,所述jar配置文件包括:线程数量、数据源地址和模板;
根据所述jar配置文件设定的线程数量实例化相应数量的工作线程;
使用所述相应数量的工作线程分别请求所述jar配置文件设定的数据源地址,从所述数据源地址获取符合搜索规则的目标网站内容,所述搜索规则包括:所述用户要求搜索的关键字;
将所述目标网站内容填充到所述jar配置文件设定的模板中,形成流式文档数据;
将所述流式文档数据存储到流式文档素材库中,以使所述用户从所述流式文档素材库中查找匹配目标网站的素材内容。
采用上述技术方案后,本发明提供的技术方案将有如下优点:
本发明实施例用户可以启动网站内容自动获取开关,通过jar配置文件启动多个工作线程,各个工作线程可以请求数据源地址,从数据源地址获取符合搜索规则的目标网站内容,该目标网站内容匹配于用户需要搜索的关键字,通过模板填充的方式可以将目标网站内容保存为流式文档数据,流式文档数据可存储到流式文档素材库中,从而可以实现流式文档素材库的自动更新,用户查找该流式文档素材库,可以找出匹配目标网站的素材内容。本发明实施例中替代人工采编网站内容,并制成流式文档录入素材库中。通过采用本技术方案,可自定义关键词对用户指定的网站内容进行抓取,并根据用户定义的输出模板将符合搜索规则的内容保存到素材库,结合检索、抓取、流式文件构建技术,用户通过应用本发明主张的技术方案,通过设定关键字对目标网站进行内容过滤抓取,并转化成流式文档进行存储,因此本发明实施例中可以实现网站文档的快速积累,提高网站内容的获取效率。
附图说明
图1为本发明实施例提供一种基于java平台的目标网站内容获取方法的流程方框示意图;
图2为本发明实施例提供的抓取指定网站内容构建流式文档数据存储的实现流程示意图。
具体实施方式
本发明实施例提供了一种基于java平台的目标网站内容获取方法,用于提高网站内容的获取效率。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
以下分别进行详细说明。
本发明基于java平台的目标网站内容获取方法的一个实施例,可应用于java平台中的目标网站内容自动获取场景中,本发明实施例提供抓取指定网站内容构建流式文档数据存储的技术,主要基于Java技术平台实现,用户的项目可通过引入技术所封装的jar,并在自己的用户工程中配置相应的文件,即可以实现本发明所主张的内容。请参阅图1和图2所示,本发明提供的基于java平台的目标网站内容获取方法,可以包括如下步骤:
101、在用户启动网站内容自动获取开关后,根据生成的功能实例读取用户导入的jar配置文件,jar配置文件包括:线程数量、数据源地址和模板。
在本发明实施例中,可以在服务器的输出界面上设置网站内容自动获取开关,用户可以设置是否开启该开关,当用户触发该开关之后,按照本发明实施例提供的基于java平台的目标网站内容获取方法执行目标网站内容的自动获取流程。当用户触发网站内容自动获取开关后,首先生成功能实例,进行功能实例化,使用该功能实例读取用户导入的jar(Java ARchive)配置文件。jar配置文件即可以是jar包,在jar包有用户预先写入的类,这些类被打包到jar配置问中,因此可以将jar包引入用户工程,然后就可以直接使用这些jar包中的类和属性以及方法。jar文件可以跨平台使用,多个文件合并到一个jar文件里以后,只需向远程服务器发出一次请求即可。同时,由于采用了压缩技术,所以可在更短的时间里获得全部数据。该jar配置文件具体可以包括:线程数量、数据源地址和模板。需要说明的是,jar配置文件包括的内容可以根据场景灵活确定,此处不做限定。
在本发明的一些实施例中,步骤101用户启动网站内容自动获取开关之前,本发明实施例提供的方法还包括如下步骤:
获取用户导入到用户工程中的jar配置文件;
将jar配置文件放入到工程类路径下,并根据jar配置文件配置用户工程的数据源地址、模板地址、模板注入属性和模板;
使用模板注入属性对模板进行排版,并将模板更新到模板地址。
其中,本发明实施例中具体可以通过用户工程的方式来完成目标网站内容的自动下载。用户工程也就是工程项目,本发明实施例中所使用的用户工程具体可以使用java项目。具体用户工程部署步骤如下:首先用户在工程中导入本发明集成的jar配置文件,该jar配置文件可以包括httpclient与jsoup解析器,基础jar可以通过服务器来下载。其中httpclient主要用于发起请求,爬取网页数据;jsoup相当于解析网页信息的作用,使用方式类似java版的jquery,可以灵活使用。然后将配置文件放入工程类路径下,配置用户所需抓取的深度和广度、数据源地址、模板地址、模板注入属性等属性,模板。其中模板是指生成用户所需要的文档内容,模板注入属性指的是模板中存在变量定义,根据变量的映射关系进行数据填充。接下来根据前述步骤设定的模板注入属性,对模板进行排版,并将模板放置到前述步骤指定的地址,即模板的存储地址。最后在用户工程中引入启动本发明的功能代码模块,调用后即可执行相应的配置操作,本发明实施例提供的功能代码模块,具体如后续实施例中所描述。
102、根据jar配置文件设定的线程数量实例化相应数量的工作线程。
在本发明实施例中,用户可以通过jar配置文件设定线程数,根据预先设定的线程数来实例化相应数量的工作线程,例如用户通过jar配置文件设置了N个数量的线程数量,则可以实例化N个的工作线程,即同时启动N个工作线程,本发明实施例中通过工作线程可以使用多线程执行任务,从而提高目标网站内容的获取效率。
103、使用工作线程分别请求jar配置文件设定的数据源地址,从数据源地址获取符合搜索规则的目标网站内容,搜索规则包括:用户要求搜索的关键字。
在本发明实施例中,各个工作线程再请求指定的数据源地址,其中数据源地址指的是目标网站的统一资源定位符(Uniform Resoure Locator,URL)地址。通过多个工作线程同时访问数据源地址,通过该数据源地址可以获取到符合预先设置的搜索规则的目标网站内容,其中,搜索规则指的是抓取网页数据的匹配规则,也就是正则表达式,搜索规则至少可以包括:用户要求搜索的关键字,即通过步骤103获取到的目标网站内容是匹配于用户要求搜索的关键字。
在本发明的一些实施例中,关键字配置在jar配置文件中;或,关键字由用户输入到前台页面中。其中,用户可以通过jar配置文件导入需要搜索的关键字,用户也可以服务器提供的前台页面来输入需要搜索的关键字,具体实现过程不做限定。
在本发明实施例中,步骤103中的从数据源地址获取符合搜索规则的目标网站内容,具体可以包括如下步骤:
使用用户工程中配置的httpclient请求从数据源地址获取到网页数据;
使用用户工程中配置的jsoup解析器从网页数据过滤掉目标网站的js代码、资源类型数据,得到符合搜索规则的目标网站内容。
其中,httpclient主要用于发起请求,爬取网页数据;jsoup相当于解析网页信息的作用,使用方式类似java版的jquery,可以灵活使用。jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。例如可以使用jsoup对获取到的数据进行处理,类似dom操作,形成html页面,过滤无关的字符包括网站的js代码,html标签等资源类型,例如该资源类型数据可以是包括CSS、JS、图片资源,获取符合从配置文件中配置的或前台输入的关键字的页面内容。
进一步的,在本发明的一些实施例中,前述步骤使用用户工程中配置的httpclient请求从数据源地址获取到网页数据,包括:
基于用户工程中配置的深度优先检索策略或者广度优先检索策略,使用httpclient请求从数据源地址获取到网页数据。
其中,可以根据设定的算法优先级,实施基于广度优先或者深度优先的内容抓取过程。深度指目标地址下存在的子url层级数,广度指抓取同层次的url数据,具体内容抓取所采用的策略可以由用户通过jar配置文件来完成。
104、将目标网站内容填充到jar配置文件设定的模板中,形成流式文档数据。
在本发明实施例中,用户可以导入jar配置文件,通过jar配置文件可以完成对模板的配置,当模板有更新时可以根据模板地址下载到更新后的模板,通过前述步骤103获取到的目标网站内容可以用来填充该模板,其中,填充模板的过程指的是使用目标网站数据和程序抓取来输入模板,该模板中承载有目标网站内容之后可以形成流式文档数据,例如该流式文档数据可以word文档。
105、将流式文档数据存储到流式文档素材库中,以使用户从流式文档素材库中查找匹配目标网站的素材内容。
在本发明实施例中,将指定页面标签下的内容填充到模板中,形成流式文档数据之后,通过对目标网站内容进行分析,进而抓取指定内容构建目标网站的流式文档素材库,例如可以是WORD文档素材库,用户从流式文档素材库中查找匹配目标网站的素材内容。
在本发明的一些实施例中,流式文档素材库,包括:本地数据库,或者云端数据库。其中,流式文档素材库的实现方式取决于不同的应用场景,从而可以实现本地存储和云存储。
举例说明如下,在用户触发启动功能开关后,会触发形成一个功能实例。实例会读取类路径下的配置文件进行初始化,先根据配置文件设定的线程数实例化指定数量的工作线程。各个线程再请求指定的数据源地址,根据设定的算法优先级,实施基于广度优先或者深度优先的内容抓取过程,使用httpclient请求指定目标url获取网页数据,然后根据配置的关键字等搜索规则过滤获取指定的内容,最后使用jsoup对获取到的数据进行处理,类似dom操作,形成html页面,过滤无关的字符包括网站的js代码,html标签等资源类型(CSS、JS、图片资源),获取符合从配置文件中配置的或前台输入的关键字的页面内容,将指定页面标签下的内容填充到模板中,形成流式数据,再根据用户设定是形成本地文件或者直接存入数据库,形成一条从分析、检索、抓取再到入库的完整工作机制。
本发明实施例用户可以启动网站内容自动获取开关,通过jar配置文件启动多个工作线程,各个工作线程可以请求数据源地址,从数据源地址获取符合搜索规则的目标网站内容,该目标网站内容匹配于用户需要搜索的关键字,通过模板填充的方式可以将目标网站内容保存为流式文档数据,流式文档数据可存储到流式文档素材库中,从而可以实现流式文档素材库的自动更新,用户查找该流式文档素材库,可以找出匹配目标网站的素材内容。本发明实施例中替代人工采编网站内容,并制成流式文档录入素材库中。通过采用本技术方案,可自定义关键词对用户指定的网站内容进行抓取,并根据用户定义的输出模板将符合搜索规则的内容保存到素材库,结合检索、抓取、流式文件构建技术,用户通过应用本发明主张的技术方案,通过设定关键字对目标网站进行内容过滤抓取,并转化成流式文档进行存储,因此本发明实施例中可以实现网站文档的快速积累,提高网站内容的获取效率。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (6)
1.一种基于java平台的目标网站内容获取方法,其特征在于,包括:
在用户启动网站内容自动获取开关后,根据生成的功能实例读取用户导入的jar配置文件,所述jar配置文件包括:线程数量、数据源地址和模板;
根据所述jar配置文件设定的线程数量实例化相应数量的工作线程;
使用所述相应数量的工作线程分别请求所述jar配置文件设定的数据源地址,从所述数据源地址获取符合搜索规则的目标网站内容,所述搜索规则包括:所述用户要求搜索的关键字;
将所述目标网站内容填充到所述jar配置文件设定的模板中,形成流式文档数据;
将所述流式文档数据存储到流式文档素材库中,以使所述用户从所述流式文档素材库中查找匹配目标网站的素材内容。
2.根据权利要求1所述的一种基于java平台的目标网站内容获取方法,其特征在于,所述用户启动网站内容自动获取开关之前,所述方法还包括:
获取用户导入到用户工程中的jar配置文件;
将所述jar配置文件放入到工程类路径下,并根据所述jar配置文件配置所述用户工程的数据源地址、模板地址、模板注入属性和模板;
使用所述模板注入属性对所述模板进行排版,并将所述模板更新到所述模板地址。
3.根据权利要求2所述的一种基于java平台的目标网站内容获取方法,其特征在于,所述从所述数据源地址获取符合搜索规则的目标网站内容,包括:
使用所述用户工程中配置的httpclient请求从所述数据源地址获取到网页数据;
使用所述用户工程中配置的jsoup解析器从所述网页数据过滤掉目标网站的js代码、资源类型数据,得到符合搜索规则的目标网站内容。
4.根据权利要求3所述的一种基于java平台的目标网站内容获取方法,其特征在于,所述使用所述用户工程中配置的httpclient请求从所述数据源地址获取到网页数据,包括:
基于所述用户工程中配置的深度优先检索策略或者广度优先检索策略,使用所述httpclient请求从所述数据源地址获取到网页数据。
5.根据权利要求1至4中任一项所述的一种基于java平台的目标网站内容获取方法,其特征在于,所述关键字配置在所述jar配置文件中;或,所述关键字由所述用户输入到前台页面中。
6.根据权利要求1至4中任一项所述的一种基于java平台的目标网站内容获取方法,其特征在于,所述流式文档素材库,包括:本地数据库,或者云端数据库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710905213.2A CN107679168B (zh) | 2017-09-29 | 2017-09-29 | 一种基于java平台的目标网站内容获取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710905213.2A CN107679168B (zh) | 2017-09-29 | 2017-09-29 | 一种基于java平台的目标网站内容获取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107679168A CN107679168A (zh) | 2018-02-09 |
CN107679168B true CN107679168B (zh) | 2021-04-20 |
Family
ID=61138552
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710905213.2A Active CN107679168B (zh) | 2017-09-29 | 2017-09-29 | 一种基于java平台的目标网站内容获取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107679168B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110851746B (zh) * | 2018-07-27 | 2022-08-12 | 北京国双科技有限公司 | 爬虫种子生成方法及装置 |
CN111241452A (zh) * | 2020-01-16 | 2020-06-05 | 大汉软件股份有限公司 | 一种政府网站设计元素标准化系统及其构建方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6415334B1 (en) * | 1997-05-14 | 2002-07-02 | Microsoft Corporation | Method and system for accessing objects of different thread types |
CN101702747A (zh) * | 2009-09-02 | 2010-05-05 | 优视动景(北京)技术服务有限公司 | 用于移动通讯终端的流媒体视频转换系统及其应用方法 |
CN102930059A (zh) * | 2012-11-26 | 2013-02-13 | 电子科技大学 | 一种聚焦爬虫的设计方法 |
CN105608088A (zh) * | 2014-11-19 | 2016-05-25 | 中国航空工业集团公司西安飞机设计研究所 | 一种基于配置文件的数据库自动创建与数据动态记录方法 |
-
2017
- 2017-09-29 CN CN201710905213.2A patent/CN107679168B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6415334B1 (en) * | 1997-05-14 | 2002-07-02 | Microsoft Corporation | Method and system for accessing objects of different thread types |
CN101702747A (zh) * | 2009-09-02 | 2010-05-05 | 优视动景(北京)技术服务有限公司 | 用于移动通讯终端的流媒体视频转换系统及其应用方法 |
CN102930059A (zh) * | 2012-11-26 | 2013-02-13 | 电子科技大学 | 一种聚焦爬虫的设计方法 |
CN105608088A (zh) * | 2014-11-19 | 2016-05-25 | 中国航空工业集团公司西安飞机设计研究所 | 一种基于配置文件的数据库自动创建与数据动态记录方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107679168A (zh) | 2018-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108595583B (zh) | 动态图表类页面数据爬取方法、装置、终端及存储介质 | |
CN106021257B (zh) | 一种支持在线编程的爬虫抓取数据方法、装置及系统 | |
CN109254773B (zh) | 骨架页面生成方法、装置、设备和存储介质 | |
CN110069683B (zh) | 一种基于浏览器爬取数据的方法及装置 | |
CN109376291B (zh) | 一种基于网络爬虫的网站指纹信息扫描的方法及装置 | |
CN105243159A (zh) | 一种基于可视化脚本编辑器的分布式网络爬虫系统 | |
CN104021172A (zh) | 广告过滤方法及广告过滤装置 | |
US20130132422A1 (en) | System and method for creating and controlling an application operating on a plurality of computer platform types | |
CN105608134A (zh) | 一种基于多线程的网络爬虫系统及其网页爬取方法 | |
CN103631875A (zh) | 在浏览器侧进行网络搜索的方法与浏览器 | |
CN108595697B (zh) | 网页集成方法、装置及系统 | |
CN110321503B (zh) | 一种web组件缓存方法、装置及电子设备 | |
CN101441629A (zh) | 一种非结构化网页信息的自动采集方法 | |
CN103714116A (zh) | 网页信息提取方法及设备 | |
CN106599270B (zh) | 网络数据抓取方法和爬虫 | |
CN110851756A (zh) | 页面加载方法、装置、计算机可读存储介质及终端设备 | |
KR20190131778A (ko) | 은닉 url에 포함된 정형 및 비정형 데이터의 수집을 위한 웹 크롤러 시스템 | |
CN103177115A (zh) | 一种提取网页页面链接的方法和装置 | |
CN104407901A (zh) | 代码的添加方法和装置 | |
CN103823907A (zh) | 一种整合在线视频资源地址的方法、装置及引擎 | |
KR20170073693A (ko) | 유사 그룹 요소 추출 | |
CN108415697B (zh) | 一种可视化组件的配置方法及装置 | |
CN107679168B (zh) | 一种基于java平台的目标网站内容获取方法 | |
CN115098098A (zh) | 页面生成方法、页面展示方法及装置 | |
CN112612943A (zh) | 一种基于异步处理框架的具有自动测试功能的数据爬取方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |