CN110147476A - 基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质 - Google Patents
基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110147476A CN110147476A CN201910294765.3A CN201910294765A CN110147476A CN 110147476 A CN110147476 A CN 110147476A CN 201910294765 A CN201910294765 A CN 201910294765A CN 110147476 A CN110147476 A CN 110147476A
- Authority
- CN
- China
- Prior art keywords
- file
- crawler
- scrapy
- data
- json
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 230000009193 crawling Effects 0.000 title claims abstract description 39
- 230000008676 import Effects 0.000 claims abstract description 25
- 230000006870 function Effects 0.000 claims description 17
- 241000208340 Araliaceae Species 0.000 claims 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 claims 1
- 235000003140 Panax quinquefolius Nutrition 0.000 claims 1
- 235000008434 ginseng Nutrition 0.000 claims 1
- 230000000694 effects Effects 0.000 abstract description 5
- 230000004044 response Effects 0.000 description 21
- 238000012545 processing Methods 0.000 description 13
- 241000239290 Araneae Species 0.000 description 11
- 230000008569 process Effects 0.000 description 11
- 230000000875 corresponding effect Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000002688 persistence Effects 0.000 description 6
- 239000000284 extract Substances 0.000 description 5
- 238000013497 data interchange Methods 0.000 description 4
- 230000002085 persistent effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 235000008733 Citrus aurantifolia Nutrition 0.000 description 3
- 235000011941 Tilia x europaea Nutrition 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 239000004571 lime Substances 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 235000014510 cooky Nutrition 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/951—Indexing; Web crawling techniques
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 Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种数据爬取技术领域,揭露了一种基于Scrapy的数据爬取方法,该方法包括:在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义;对所述JSON文件进行命名,创建爬虫文件,并将所述爬虫文件的名称按照所述JSON文件的名称进行命名;将所述JSON文件的配置参数导入所述爬虫文件;运行导入配置参数后的爬虫文件,爬取网页数据。本发明还提供一种终端设备及计算机可读存储介质。本发明提供的基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质,能够通过JSON文件定义Scrapy文件的配置参数,JSON文件集合了一个爬虫文件所需的配置文件,提高代码编写效率,降低漏洞数量,提高爬取网页数据的效果。
Description
技术领域
本发明涉及数据爬取技术领域,尤其涉及一种基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质。
背景技术
随着信息社会的快速发展,互联网上的数据越来越多,为获取有用信息,目前常常通过网络爬虫技术爬取有用数据。现有爬虫技术中,基于Scrapy的爬虫框架的使用过程中,对于多个网站的爬取要重复编写代码;在编写代码过程中,除了需要分析代码的逻辑,还需要解析网页的规则,会影响网页规则的正确率;另外,Scrapy爬虫框架功能开关及注意点过于分散,分布在各个层级下的文件中,在使用Scrapy爬虫框架爬取数据的过程,很有可能会出现漏洞。因此基于Scrapy框架的使用过程中,存在爬取数据的效果比较差的问题。
发明内容
有鉴于此,本发明提出一种基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质,以解决基于Scrapy框架的使用过程中,存在爬取数据的效果比较差的问题。
首先,为实现上述目的,本发明提出一种基于Scrapy的数据爬取方法,该方法包括步骤:
在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义;
对所述JSON文件进行命名,创建爬虫文件,并将所述爬虫文件的名称按照所述JSON文件的名称进行命名;
将所述JSON文件的配置参数导入所述爬虫文件;
运行导入配置参数后的爬虫文件,爬取网页数据。
可选地,所述在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义的步骤包括:
在所述JSON文件中对所述爬虫文件中各个层级的配置参数进行定义,其中,所述爬虫文件的层级包括爬取器、引擎、调度器、下载器、实体管道、默认配置层级、下载中间件、及爬取中间件。
可选的,所述运行导入配置参数后的爬虫文件,爬取网页数据的步骤包括:
通过所述爬虫文件的引擎从所述导入配置参数后的爬虫文件中获取起始URL,并且将获取的URL提交到调度器中;
在需要从URL中下载数据的情况下,所述调度器将URL通过引擎提交给下载器,所述下载器根据URL下载待爬取数据。
可选地,所述在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义的步骤包括:
在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的起始网站名、起始网站主页、请求头、基于分布式文件存储的数据库的URI地址、数据库名及集合名进行定义;对跟进网页链接的预处理进行定义;对首页的预处理、起始页的类型、允许域名、跟进的链接函数名、待爬取数据的变量名及匹配方式进行定义,其中,所述匹配方式包括xml路径语言选择器、层叠样式表选择器、及正则表达式。
可选地,所述运行导入配置参数后的爬虫文件,爬取网页数据的步骤包括:
通过xml路径语言选择器爬取数据;
在所述xml路径语言选择器未爬取到数据的情况下,通过层叠样式表CSS选择器爬取数据;
在所述层叠样式表选择器未匹配到数据的情况下,通过正则表达式爬取数据。
可选地,所述将所述JSON文件的配置参数导入所述爬虫文件的步骤包括:
在中断命令行接收预先设置的启动命令,根据接收到的启动命令,将所述JSON文件的配置参数导入所述爬虫文件。
可选地,所述将所述JSON文件的配置参数导入所述爬虫文件的步骤包括:
在爬虫Scrapy配置文件的同级目录下基于爬虫Python语言定义启动文件;
通过所述启动文件将所述JSON文件中的配置参数导入所述Scrapy文件。
可选地,所述通过所述启动文件将JSON文件中的配置参数导入所述Scrapy文件的步骤包括:
从所述启动文件获取所述爬虫文件的名称;
确定与所述爬虫文件的名称具有相同名称的JSON文件,从所述确定的JSON文件中获取对应的配置参数;
将所述获取到的配置参数合并到所述Scrapy文件的默认配置文件中。
此外,为实现上述目的,本发明还提供一种终端设备,包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的基于Scrapy的数据爬取系统,所述基于Scrapy的数据爬取系统被所述处理器执行时实现如上述的基于Scrapy的数据爬取方法的步骤。
进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有基于Scrapy的数据爬取系统,所述基于Scrapy的数据爬取系统可被至少一个处理器执行,以使所述至少一个处理器执行如上述的基于Scrapy的数据爬取方法的步骤。
相较于现有技术,本发明所提出的基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质,能够通过JSON文件定义Scrapy文件的配置参数,不同爬虫项目只需要定义一份不同JSON文件即可,JSON文件集合了一个爬虫文件所需的配置文件,无需到爬虫文件的各个层级下进行参数配置及功能修改,提高代码编写效率,降低漏洞数量,提高爬取网页数据的效果。
附图说明
图1是本发明终端设备一可选的硬件架构的示意图;
图2是本发明基于Scrapy的数据爬取系统第一实施例的程序模块示意图;
图3是本发明基于Scrapy的数据爬取系统第二实施例的程序模块示意图;
图4是本发明基于Scrapy的数据爬取方法第一实施例的流程示意图;
图5是本发明基于Scrapy的数据爬取方法第二实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
参阅图1所示,是本发明终端设备2一可选的硬件架构的示意图。
本实施例中,所述终端设备2可包括,但不仅限于,可通过系统总线相互通信连接存储器11、处理器12、网络接口13。需要指出的是,图1仅示出了具有组件11-13的终端设备2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
其中,终端设备可以以各种形式来实施。例如,本发明中描述的终端设备可以包括诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(Personal DigitalAssistant,PDA)、便捷式媒体播放器(Portable Media Player,PMP)、导航装置、可穿戴设备、移动终端、计步器等移动终端,以及诸如数字TV、台式计算机等固定终端。
后续描述中将以终端设备为例进行说明,本领域技术人员将理解的是,除了特别用于移动目的的元件之外,根据本发明的实施方式的构造也能够应用于固定类型的终端设备。
所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述终端设备2的内部存储单元,例如该终端设备2的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述终端设备2的外部存储设备,例如该终端设备2上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述终端设备2的内部存储单元也包括其外部存储设备。本实施例中,所述存储器11通常用于存储安装于所述终端设备2的操作系统和各类应用软件,例如基于Scrapy的数据爬取系统200的程序代码等。此外,所述存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述终端设备2的总体操作。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行所述的基于Scrapy的数据爬取系统200等。
所述网络接口13可包括无线网络接口或有线网络接口,该网络接口13通常用于在所述终端设备2与其他电子设备之间建立通信连接。
至此,己经详细介绍了本发明相关设备的硬件结构和功能。下面,将基于上述介绍提出本发明的各个实施例。
首先,本发明提出一种基于Scrapy的数据爬取系统200。
参阅图2所示,是本发明基于Scrapy的数据爬取系统200第一实施例的程序模块图。
本实施例中,所述基于Scrapy的数据爬取系统200包括一系列的存储于存储器11上的计算机程序指令,当该计算机程序指令被处理器12执行时,可以实现本发明各实施例的基于Scrapy的数据爬取操作。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,基于Scrapy的数据爬取系统200可以被划分为一个或多个模块。例如,在图2中,所述基于Scrapy的数据爬取系统200可以被分割成定义模块201、命名模块202、导入模块203、爬取模块204。其中:
所述定义模块201,用于在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义。
在本实施例中,爪哇脚本对象简谱(Java Script Object Notation,JSON),是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,具有简洁和清晰的层次结构特点,易于阅读和编写,同时也易于机器解析和生成。
所述命名模块202,用于对所述JSON文件进行命名,创建爬虫文件,并将所述爬虫文件的名称按照所述JSON文件的名称进行命名。
举例来说,可以将所述JSON文件命名为spidername,创建爬虫文件,并将爬虫文件命名为spidername。补充说明的是,创建的爬虫文件包括爬取器、引擎、调度器、下载器、实体管道、默认配置层级、下载中间件、及爬取中间件。
补充说明的是,爬取器的英文名可以为Spider、引擎的英文名可以为Enginge、调度器的英文名可以为Scheduler、下载器的英文名可以为Download、实体管道的英文名可以为Item Pipeline、默认配置层级的英文名可以为Setting、下载中间件的英文名可以为Download middleware、及爬取中间件的英文名可以为Spider Middleware。
所述导入模块203,用于将所述JSON文件的配置参数导入所述爬虫文件。
在本实施例中,可以通过运行启动文件,触发启动将所述JSON文件中的配置参数导入爬虫文件。
所述爬取模块204,用于运行导入配置参数后的爬虫文件,爬取网页数据。
在本实施例中,在导入配置参数后,爬虫文件可以确定需要爬取的特定数据,从而快速从指定网站上爬取到需要爬取的特定数据。例如,在导入配置参数后,爬虫文件确定需要爬取关于张三的数据,并在指定的第一网站爬取所有与张三有关的数据。
参阅图3所示,是本发明基于Scrapy的数据爬取系统200第二实施例的程序模块图。本实施例中,所述的基于Scrapy的数据爬取系统200包括定义模块201、命名模块202、导入模块203、爬取模块204,所述爬取模块204还包括:获取子模块2041及下载子模块2042。其中:
所述定义模块201,用于在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义。
在本实施例中,爪哇脚本对象简谱(Java Script Object Notation,JSON),是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,具有简洁和清晰的层次结构特点,易于阅读和编写,同时也易于机器解析和生成。
具体的,所述定义模块201,还用于在所述JSON文件中对所述爬虫文件中各个层级的配置参数进行定义,其中,所述爬虫文件的层级包括爬取器、引擎、调度器、下载器、实体管道、默认配置层级、下载中间件、及爬取中间件。
在本实施例中,爬取器主要用于解析响应,并从中提取需要抓取的项目,即提取需要抓取的数据。下载中间件位于引擎和下载器层级之间的特定钩子,使用下载中间件可以达到以下目的:在将请求发送到下载器之前处理请求;在传递给爬取器之前改变接收到的响应;发送新的请求,而不是将接收到的响应传递给爬取器;向爬取器传递响应而不需要获取网页。实体管道负责处理被爬取器提取的实体,典型的任务包括清理,验证和持久性,其中,持久性包括将爬取的数据存储在数据库中。引擎负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件。调度器调度程序接收来自引擎的请求,并将它们排入队列,并在之后,当引擎需要的时候,将请求发送给引擎。下载器负责提取网页并将它们馈送到引擎,然后引擎将其发送给爬取层级。
具体的,所述定义模块201,还用于在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的起始网站名、起始网站主页、请求头、基于分布式文件存储的数据库的URI地址、数据库名及集合名进行定义;对跟进网页链接的预处理进行定义;对首页的预处理、起始页的类型、允许域名、跟进的链接函数名、待爬取数据的变量名及匹配方式进行定义,其中,所述匹配规则包括xml路径语言选择器、层叠样式表选择器、及正则表达式;所述xml路径语言选择器可以简称为xpath选择器,所述层叠样式表选择器可以简称为CSS选择器。
其中,请求头即为请求报头域,包括cache、client、cookie/logh、entity、miscellaneous、transport等头域分类,对应的作用可参考头域作用说明,在此不做赘述。
在网页界面中包括可以点击继续跟进的链接,例如,当爬虫获取到News.baidu.com页面时,点击在News.baidu.com页面上的跟进链接,可以继续打开跟进链接对应的网页。
所述命名模块202,用于对所述JSON文件进行命名,创建爬虫文件,并将所述爬虫文件的名称按照所述JSON文件的名称进行命名。
举例来说,可以将所述JSON文件命名为spidername,创建爬虫文件,并将爬虫文件命名为spidername。补充说明的是,创建的爬虫文件包括爬取器、引擎、调度器、下载器、实体管道、默认配置层级、下载中间件、及爬取中间件。
所述导入模块203,用于将所述JSON文件的配置参数导入所述爬虫文件。
在本实施例中,可以通过运行启动文件,触发启动将所述JSON文件中的配置参数导入爬虫文件。
具体的,所述导入模块203,还用于在中断命令行接收预先设置的启动命令,根据接收到的启动命令,将所述JSON文件的配置参数导入所述爬虫文件。
举例来说,所述启动命令可以为Python run.py spidername,在中断命令行接收到Python run.py spidername后,爬虫文件调用Scrapyuniversal/utils.py中的get_config()函数,通过get_config()函数启动对爬虫文件的配置信息的解析。其中,Python是运行以py结尾的文件命令,run.py是启动文件,spidername是定义的JSON文件名,与JSON文件名为spidername对应爬虫文件的文件名为spidername。
这样,直接在中断命令行输入Python run.py spidername启动命令,即可启动爬虫文件。其中,Python run.py spidername区别于传统的Scrapy crawl spidername的启动方式,可以提高启动效率。
具体的,所述导入模块203包括:
定义子模块,用于在爬虫Scrapy配置文件的同级目录下基于爬虫Python语言定义启动文件;
导入子模块,用于通过所述启动文件将所述JSON文件中的配置参数导入所述Scrapy文件。
具体的,所述导入子模块包括:
获取单元,用于从所述启动文件获取所述爬虫文件的名称;
确定单元,用于确定与所述爬虫文件的名称具有相同名称的JSON文件,从所述确定的JSON文件中获取对应的配置参数;
合并单元,用于将所述获取到的配置参数合并到所述Scrapy文件的默认配置文件中。
在本实施例中,Scrapy配置文件的同级目录包括以下几个层级:爬取器、引擎、调度器、下载器、项目管道、默认配置层级、下载中间件、爬取中间件,只需要在爬虫Scrapy文件的Scrapy.cfg层级定义一个启动命令run.py即可,无需在各个层级下分别定义启动命令run.py。补充说明的是,还在默认配置层级中,对机器人robots协议的注意点进行设置,将ROBOTSTXT-OBEY=TURE,改成False。其中,默认配置层级是Scrapy框架的默认配置文件。
进一步补充说明的是,引擎用来处理整个系统的数据流处理,触发事务,为框架核心。调度器,用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回;可以想像成一个URL,即抓取网页的网址或者说是链接的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址。下载器,用于下载网页内容,并将网页内容返回给蜘蛛Scrapy。爬取器,用于从特定的网页中提取需要的信息,需要的信息即所谓的实体。用户也可以从中提取出链接,继续抓取下一个页面。
项目管道,负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。下载中间件处理的过程,主要在调度器发送requests请求时、以及网页将response结果返回给spiders时,用于修改Scrapy request和response。爬取器中间件与下载中间件类似,只不过Spider中间件处理的是即将发往爬取器处理的响应对象,以及从爬取器返回的响应对象或Item对象。爬虫中间件是一个Scrapy的spider处理机制的钩子框架,可以插入自定义的功能用来处理引擎发往爬取器的响应请求和爬取器发往引擎的request请求和实体。
这样,不同的网站项目可以同一份爬虫代码,不要重新创建工程project和爬虫文件,只需要定义不同的JSON文件即可。
所述爬取模块204,用于运行导入配置参数后的爬虫文件,爬取网页数据。
在本实施例中,在导入配置参数后,爬虫文件可以确定需要爬取的特定数据,从而快速从指定网站上爬取到需要爬取的特定数据。例如,在导入配置参数后,爬虫文件确定需要爬取关于张三的数据,并在指定的第一网站爬取所有与张三有关的数据。
具体的,所述爬取模块204还包括:
获取子模块2041,用于通过所述爬虫文件的引擎从所述导入配置参数后的爬虫文件中获取起始URL,并且将获取的URL提交到调度器中;
爬取子模块2042,用于在需要从URL中下载数据的情况下,所述调度器将URL通过引擎提交给下载器,所述下载器根据URL下载待爬取数据。
在本实施例中,引擎会获取爬虫文件中的起始URL,并且将URL提交到调度器中。如果需要从URL中下载数据,则调度器会将URL通过引擎提交给下载器,下载器根据URL去下载指定内容,即下载响应体。下载好的数据会通过引擎移交给爬虫文件,爬虫文件可以将下载的数据进行指定格式的解析。如果解析出的数据需要进行持久化存储,则爬虫文件会将解析好的数据通过引擎移交给管道进行持久化存储。在本实施例中,URL可以为政府、企业的网址。这样,可以快速爬取网站数据,并将爬取的数据进行下载及存储备份。
具体的,所述爬取模块204,还用于通过xml路径语言选择器爬取数据;在所述xml路径语言选择器未爬取到数据的情况下,通过层叠样式表选择器爬取数据;在所述层叠样式表选择器未匹配到数据的情况下,通过正则表达式爬取数据。
在本实施例中,XPath全称为XML Path Language,也就是XML路径语言,是一种在结构化文档中定位信息的语言,其中,结构化文档可以为XML和HTML文档。使用Xpath路径表达式来选取XML文档中的节点或节点集。节点是通过沿着路径(path)或者步(steps)来选取的。层叠样式表选择器包括通配符选择器、元素选择器、class选择器、id选择器、EF后代选择器、多元素选择器、向量兄弟选择器等。正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
这样,通过多种匹配方式从网页匹配待爬取的数据,可以提高获取有用数据的成功率。
此外,本发明还提出一种基于Scrapy的数据爬取方法。
参阅图4所示,是本发明基于Scrapy的数据爬取方法第一实施例的流程示意图。在本实施例中,根据不同的需求,图4所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。
该方法包括以下步骤:
步骤S400,在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义。
在本实施例中,爪哇脚本对象简谱(Java Script Object Notation,JSON),是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,具有简洁和清晰的层次结构特点,易于阅读和编写,同时也易于机器解析和生成。
步骤S402,对所述JSON文件进行命名,创建爬虫文件,并将所述爬虫文件的名称按照所述JSON文件的名称进行命名。
举例来说,可以将所述JSON文件命名为spidername,创建爬虫文件,并将爬虫文件命名为spidername。补充说明的是,创建的爬虫文件包括爬取器、引擎、调度器、下载器、实体管道、默认配置层级、下载中间件、及爬取中间件。
补充说明的是,爬取器的英文名可以为Spider、引擎的英文名可以为Enginge、调度器的英文名可以为Scheduler、下载器的英文名可以为Download、实体管道的英文名可以为Item Pipeline、默认配置层级的英文名可以为Setting、下载中间件的英文名可以为Download middleware、及爬取中间件的英文名可以为Spider Middleware。
步骤S404,将所述JSON文件的配置参数导入所述爬虫文件。
在本实施例中,可以通过运行启动文件,触发启动将所述JSON文件中的配置参数导入爬虫文件。
步骤S406,运行导入配置参数后的爬虫文件,爬取网页数据。
在本实施例中,在导入配置参数后,爬虫文件可以确定需要爬取的特定数据,从而快速从指定网站上爬取到需要爬取的特定数据。例如,在导入配置参数后,爬虫文件确定需要爬取关于张三的数据,并在指定的第一网站爬取所有与张三有关的数据。
参阅图5所示,是本发明基于Scrapy的数据爬取方法的第二实施例的流程图。本实施例中,所述的基于Scrapy的数据爬取方法的步骤S500-S506与第一实施例的步骤S400-S406相类似,区别在于该方法还包括步骤S508-510。
该方法包括以下步骤:
步骤S500,在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义。
在本实施例中,爪哇脚本对象简谱(Java Script Object Notation,JSON),是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,具有简洁和清晰的层次结构特点,易于阅读和编写,同时也易于机器解析和生成。
具体的,该步骤S500还包括以下步骤:在所述JSON文件中对所述爬虫文件中各个层级的配置参数进行定义,其中,所述爬虫文件的层级包括爬取器、引擎、调度器、下载器、实体管道、默认配置层级、下载中间件、及爬取中间件。
在本实施例中,爬取器主要用于解析响应,并从中提取需要抓取的项目,即提取需要抓取的数据。下载中间件位于引擎和下载器层级之间的特定钩子,使用下载中间件可以达到以下目的:在将请求发送到下载器之前处理请求;在传递给爬取器之前改变接收到的响应;发送新的请求,而不是将接收到的响应传递给爬取器;向爬取器传递响应而不需要获取网页。实体管道负责处理被爬取器提取的实体,典型的任务包括清理,验证和持久性,其中,持久性包括将爬取的数据存储在数据库中。引擎负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件。调度器调度程序接收来自引擎的请求,并将它们排入队列,并在之后,当引擎需要的时候,将requests请求发送给引擎。下载器负责提取网页并将它们馈送到引擎,然后引擎将其发送给爬取层级。
具体的,该步骤S500还包括以下步骤:在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的起始网站名、起始网站主页、请求头、基于分布式文件存储的数据库的URI地址、数据库名及集合名进行定义;对跟进网页链接的预处理进行定义;对首页的预处理、起始页的类型、允许域名、跟进的链接函数名、待爬取数据的变量名及匹配方式进行定义,其中,所述匹配规则包括xml路径语言选择器、层叠样式表选择器、及正则表达式;所述xml路径语言选择器可以简称为xpath选择器,所述层叠样式表选择器可以简称为CSS选择器。
其中,请求头即为请求报头域,包括cache、client、cookie/logh、entity、miscellaneous、transport等头域分类,对应的作用可参考头域作用说明,在此不做赘述。
在网页界面中包括可以点击继续跟进的链接,例如,当爬虫获取到News.baidu.com页面时,点击在News.baidu.com页面上的跟进链接,可以继续打开跟进链接对应的网页。
步骤S502,对所述JSON文件进行命名,创建爬虫文件,并将所述爬虫文件的名称按照所述JSON文件的名称进行命名。
举例来说,可以将所述JSON文件命名为spidername,创建爬虫文件,并将爬虫文件命名为spidername。补充说明的是,创建的爬虫文件包括爬取器、引擎、调度器、下载器、实体管道、默认配置层级、下载中间件、及爬取中间件。
步骤S504,将所述JSON文件的配置参数导入所述爬虫文件。
在本实施例中,可以通过运行启动文件,触发启动将所述JSON文件中的配置参数导入爬虫文件。
具体的,步骤S504还包括以下步骤:在中断命令行接收预先设置的启动命令,根据接收到的启动命令,将所述JSON文件的配置参数导入所述爬虫文件。
举例来说,所述启动命令可以为Python run.py spidername,在中断命令行接收到Python run.py spidername后,爬虫文件调用Scrapyuniversal/utils.py中的get_config()函数,通过get_config()函数启动对爬虫文件的配置信息的解析。其中,Python是运行以py结尾的文件命令,run.py是启动文件,spidername是定义的JSON文件名,与JSON文件名为spidername对应爬虫文件的文件名为spidername。
这样,直接在中断命令行输入Python run.py spidername启动命令,即可启动爬虫文件。其中,Python run.py spidername区别于传统的Scrapy crawl spidername的启动方式,可以提高启动效率。
具体的,步骤S504还包括以下步骤:
在爬虫Scrapy配置文件的同级目录下基于爬虫Python语言定义启动文件;
通过所述启动文件将所述JSON文件中的配置参数导入所述Scrapy文件。
具体的,所述通过所述启动文件将所述JSON文件中的配置参数导入所述Scrapy文件还包括以下步骤:
从所述启动文件获取所述爬虫文件的名称;
确定与所述爬虫文件的名称具有相同名称的JSON文件,从所述确定的JSON文件中获取对应的配置参数;
将所述获取到的配置参数合并到所述Scrapy文件的默认配置文件中。
在本实施例中,Scrapy配置文件的同级目录包括以下几个层级:爬取器、引擎、调度器、下载器、项目管道、默认配置层级、下载中间件、爬取中间件,只需要在爬虫Scrapy文件的Scrapy.cfg层级定义一个启动命令run.py即可,无需在各个层级下分别定义启动命令run.py。补充说明的是,还在默认配置Setting层级中,对机器人robots协议的注意点进行设置,将ROBOTSTXT-OBEY=TURE,改成False。其中,默认配置层级是Scrapy框架的默认配置文件。
进一步补充说明的是,引擎用来处理整个系统的数据流处理,触发事务,为框架核心。调度器,用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回;可以想像成一个URL,即抓取网页的网址或者说是链接的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址。下载器,用于下载网页内容,并将网页内容返回给蜘蛛Scrapy。爬取器,用于从特定的网页中提取需要的信息,即所谓的实体。用户也可以从中提取出链接,继续抓取下一个页面。
项目管道,负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。下载中间件处理的过程,主要在调度器发送requests请求时、以及网页将response结果返回给spiders时,用于修改Scrapy request请求和response响应。爬取器中间件与下载中间件类似,只不过爬取器中间件处理的是即将发往爬取器处理的响应对象,以及从爬取器返回的响应对象或实体对象。爬虫中间件是一个Scrapy的spider处理机制的钩子框架,你可以插入自定义的功能用来处理引擎发往爬取器的响应和爬取器发往引擎的响应和实体。
这样,不同的网站项目可以同一份爬虫代码,不要重新创建工程和爬虫文件,只需要定义不同的JSON文件即可。
步骤S506,通过所述爬虫文件的引擎从所述导入配置参数后的爬虫文件中获取起始URL,并且将获取的URL提交到调度器中。
步骤S508,在需要从URL中下载数据的情况下,所述调度器将URL通过引擎提交给下载器,所述下载器根据URL下载待爬取数据。
在本实施例中,引擎会获取爬虫文件中的起始URL,并且将URL提交到调度器中。如果需要从URL中下载数据,则调度器会将URL通过引擎提交给下载器,下载器根据URL去下载指定内容,即下载响应体。下载好的数据会通过引擎移交给爬虫文件,爬虫文件可以将下载的数据进行指定格式的解析。如果解析出的数据需要进行持久化存储,则爬虫文件会将解析好的数据通过引擎移交给管道进行持久化存储。在本实施例中,URL可以为政府、企业的网址。这样,可以快速爬取网站数据,并将爬取的数据进行下载及存储备份。
补充说明的是,在图4所示实施例的步骤406还可以包括以下步骤:通过xml路径语言选择器爬取数据;在所述xml路径语言选择器未爬取到数据的情况下,通过层叠样式表选择器爬取数据;在所述层叠样式表选择器未匹配到数据的情况下,通过正则表达式爬取数据。
在本实施例中,XPath全称为XML Path Language,也就是XML路径语言,为一种在结构化文档中定位信息的语言,其中,结构化文档可以为比XML和HTML文档。XPath使用路径表达式来选取XML文档中的节点或节点集。节点是通过沿着路径(path)或者步(steps)来选取的。CSS选择器包括通配符选择器、元素选择器、class选择器、id选择器、EF后代选择器、多元素选择器、向量兄弟选择器等。正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
这样,通过多种匹配方式从网页匹配待爬取的数据,可以提高获取有用数据的成功率。
本实施例提供的基于Scrapy的数据爬取方法,能够通过JSON文件定义Scrapy文件的配置参数,不同爬虫项目只需要定义一份不同的JSON文件即可,JSON文件集合了一个爬虫文件所需的配置文件,无需到爬虫文件的各个层级下进行参数配置及功能修改,提高代码编写效率,降低漏洞数量,提高爬取网页数据的效果。
本发明还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有基于Scrapy的数据爬取程序,所述基于Scrapy的数据爬取程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的基于Scrapy的数据爬取方法的步骤。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,终端设备,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于Scrapy的数据爬取方法,其特征在于,所述方法包括步骤:
在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义;
对所述JSON文件进行命名,创建爬虫文件,并将所述爬虫文件的名称按照所述JSON文件的名称进行命名;
将所述JSON文件的配置参数导入所述爬虫文件;
运行导入配置参数后的爬虫文件,爬取网页数据。
2.如权利要求1所述的基于Scrapy的数据爬取方法,其特征在于,所述在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义的步骤包括:
在所述JSON文件中对所述爬虫文件中各个层级的配置参数进行定义,其中,所述爬虫文件的层级包括爬取器、引擎、调度器、下载器、实体管道、默认配置Setting层级、下载中间件、及爬取中间件。
3.如权利要求2所述的基于Scrapy的数据爬取方法,其特征在于,所述运行导入配置参数后的爬虫文件,爬取网页数据的步骤包括:
通过所述爬虫文件的引擎从所述导入配置参数后的爬虫文件中获取起始URL,并且将获取的URL提交到调度器中;
在需要从URL中下载数据的情况下,所述调度器将URL通过引擎提交给下载器,所述下载器根据URL下载待爬取数据。
4.如权利要求1所述的基于Scrapy的数据爬取方法,其特征在于,所述在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的配置参数进行定义的步骤包括:
在爪哇脚本对象简谱JSON文件中对基于Scrapy框架的爬虫文件的起始网站名、起始网站主页、请求头、基于分布式文件存储的数据库的URI地址、数据库名及集合名进行定义;对跟进网页链接的预处理进行定义;对首页的预处理、起始页的类型、允许域名、跟进的链接函数名、待爬取数据的变量名及匹配方式进行定义,其中,所述匹配方式包括xml路径语言选择器、层叠样式表选择器、及正则表达式。
5.如权利要求1或2所述的基于Scrapy的数据爬取方法,其特征在于,所述运行导入配置参数后的爬虫文件,爬取网页数据的步骤包括:
通过xml路径语言选择器爬取数据;
在所述xml路径语言选择器未爬取到数据的情况下,通过层叠样式表选择器爬取数据;
在所述层叠样式表选择器未匹配到数据的情况下,通过正则表达式爬取数据。
6.如权利要求1或2所述的基于Scrapy的数据爬取方法,其特征在于,所述将所述JSON文件的配置参数导入所述爬虫文件的步骤包括:
在中断命令行接收预先设置的启动命令,根据接收到的启动命令,将所述JSON文件的配置参数导入所述爬虫文件。
7.如权利要求1或2所述的基于Scrapy的数据爬取方法,其特征在于,所述将所述JSON文件的配置参数导入所述爬虫文件的步骤包括:
在爬虫Scrapy配置文件的同级目录下基于爬虫Python语言定义启动文件;
通过所述启动文件将所述JSON文件中的配置参数导入所述Scrapy文件。
8.如权利要求7所述的基于Scrapy的数据爬取方法,其特征在于,所述通过所述启动文件将JSON文件中的配置参数导入所述Scrapy文件的步骤包括:
从所述启动文件获取所述爬虫文件的名称;
确定与所述爬虫文件的名称具有相同名称的JSON文件,从所述确定的JSON文件中获取对应的配置参数;
将所述获取到的配置参数合并到所述Scrapy文件的默认配置文件中。
9.一种终端设备,其特征在于,所述终端设备包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的基于Scrapy的数据爬取系统,所述基于Scrapy的数据爬取系统被所述处理器执行时实现如权利要求1-8中任一项所述的基于Scrapy的数据爬取方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有基于Scrapy的数据爬取系统,所述基于Scrapy的数据爬取系统可被至少一个处理器执行,以使所述至少一个处理器执行如权利要求1-8中任一项所述的基于Scrapy的数据爬取方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910294765.3A CN110147476A (zh) | 2019-04-12 | 2019-04-12 | 基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质 |
PCT/CN2019/120540 WO2020207022A1 (zh) | 2019-04-12 | 2019-11-25 | 基于Scrapy的数据爬取方法、系统、终端设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910294765.3A CN110147476A (zh) | 2019-04-12 | 2019-04-12 | 基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110147476A true CN110147476A (zh) | 2019-08-20 |
Family
ID=67588746
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910294765.3A Pending CN110147476A (zh) | 2019-04-12 | 2019-04-12 | 基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110147476A (zh) |
WO (1) | WO2020207022A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111274466A (zh) * | 2019-12-18 | 2020-06-12 | 成都迪普曼林信息技术有限公司 | 一种海外服务器非结构数据采集系统及方法 |
CN111414523A (zh) * | 2020-03-11 | 2020-07-14 | 中国建设银行股份有限公司 | 一种数据获取方法和装置 |
CN111554272A (zh) * | 2020-04-27 | 2020-08-18 | 天津大学 | 一种面向中文语音识别的语言模型建模方法 |
WO2020207022A1 (zh) * | 2019-04-12 | 2020-10-15 | 深圳壹账通智能科技有限公司 | 基于Scrapy的数据爬取方法、系统、终端设备及存储介质 |
CN112612943A (zh) * | 2020-07-30 | 2021-04-06 | 吉林大学 | 一种基于异步处理框架的具有自动测试功能的数据爬取方法 |
CN113515681A (zh) * | 2021-04-30 | 2021-10-19 | 广东科学技术职业学院 | 基于scrapy框架的房地产数据爬虫方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104978408A (zh) * | 2015-08-05 | 2015-10-14 | 许昌学院 | 基于Berkeley DB数据库的主题爬虫系统 |
US20160094497A1 (en) * | 2014-09-26 | 2016-03-31 | Oracle International Corporation | Building message relationships for offline operation of an enterprise application |
CN107943838A (zh) * | 2017-10-30 | 2018-04-20 | 北京大数元科技发展有限公司 | 一种自动获取xpath生成爬虫脚本的方法及系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107944055A (zh) * | 2017-12-22 | 2018-04-20 | 成都优易数据有限公司 | 一种解决Web证书认证的爬虫方法 |
CN108829792A (zh) * | 2018-06-01 | 2018-11-16 | 成都康乔电子有限责任公司 | 基于scrapy的分布式暗网资源挖掘系统及方法 |
CN110147476A (zh) * | 2019-04-12 | 2019-08-20 | 深圳壹账通智能科技有限公司 | 基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质 |
-
2019
- 2019-04-12 CN CN201910294765.3A patent/CN110147476A/zh active Pending
- 2019-11-25 WO PCT/CN2019/120540 patent/WO2020207022A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160094497A1 (en) * | 2014-09-26 | 2016-03-31 | Oracle International Corporation | Building message relationships for offline operation of an enterprise application |
CN104978408A (zh) * | 2015-08-05 | 2015-10-14 | 许昌学院 | 基于Berkeley DB数据库的主题爬虫系统 |
CN107943838A (zh) * | 2017-10-30 | 2018-04-20 | 北京大数元科技发展有限公司 | 一种自动获取xpath生成爬虫脚本的方法及系统 |
Non-Patent Citations (1)
Title |
---|
崔庆才: "Scrapy框架的使用之Scrapy通用爬虫", 《掘金》, pages 7 - 14 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020207022A1 (zh) * | 2019-04-12 | 2020-10-15 | 深圳壹账通智能科技有限公司 | 基于Scrapy的数据爬取方法、系统、终端设备及存储介质 |
CN111274466A (zh) * | 2019-12-18 | 2020-06-12 | 成都迪普曼林信息技术有限公司 | 一种海外服务器非结构数据采集系统及方法 |
CN111414523A (zh) * | 2020-03-11 | 2020-07-14 | 中国建设银行股份有限公司 | 一种数据获取方法和装置 |
CN111554272A (zh) * | 2020-04-27 | 2020-08-18 | 天津大学 | 一种面向中文语音识别的语言模型建模方法 |
CN112612943A (zh) * | 2020-07-30 | 2021-04-06 | 吉林大学 | 一种基于异步处理框架的具有自动测试功能的数据爬取方法 |
CN113515681A (zh) * | 2021-04-30 | 2021-10-19 | 广东科学技术职业学院 | 基于scrapy框架的房地产数据爬虫方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2020207022A1 (zh) | 2020-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147476A (zh) | 基于Scrapy的数据爬取方法、终端设备及计算机可读存储介质 | |
Kouzis-Loukas | Learning scrapy | |
JP4467205B2 (ja) | サーバ側制御オブジェクトによるポストバック入力のハンドリング | |
US8775930B2 (en) | Generic frequency weighted visualization component | |
US8751466B1 (en) | Customizable answer engine implemented by user-defined plug-ins | |
US8443346B2 (en) | Server evaluation of client-side script | |
US20030140045A1 (en) | Providing a server-side scripting language and programming tool | |
US20090106296A1 (en) | Method and system for automated form aggregation | |
US8200784B2 (en) | Method and computer system for unstructured data integration through graphical interface | |
US20160371386A1 (en) | Topical Mapping | |
JP2009543167A (ja) | ページに関するページ・レイアウトを継承するためのコンピュータで実行される方法、コンピュータ・プログラム、およびデータ処理システム | |
CN101211364A (zh) | 用于万维网页中暴露的资源的公共书签的方法和系统 | |
US20090172602A1 (en) | Technique that enhances the manipulation of an html tree presentation by using an array representation of the hierarchical path of a tree node | |
US8812551B2 (en) | Client-side manipulation of tables | |
US11263062B2 (en) | API mashup exploration and recommendation | |
US20130138725A1 (en) | Smart Browsing Providers | |
CN103827778A (zh) | 企业工具增强 | |
CN112612943A (zh) | 一种基于异步处理框架的具有自动测试功能的数据爬取方法 | |
CN106055567A (zh) | 提供app商店搜索结果 | |
CN108388796B (zh) | 动态域名验证方法、系统、计算机设备和存储介质 | |
CN113918460A (zh) | 页面测试方法、装置、设备和介质 | |
CN101231655A (zh) | 用于处理搜索引擎结果的方法和系统 | |
US20150248500A1 (en) | Documentation parser | |
CN105095416B (zh) | 一种在搜索中实现内容推广的方法和装置 | |
US20030080994A1 (en) | System, method and computer program product for recognizing a state of a remote application |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190820 |
|
WD01 | Invention patent application deemed withdrawn after publication |