htmlunit 抓取网页(搜索索引可以作为数据挖掘的输入信息,后面才发现错了)
优采云 发布时间: 2021-11-10 05:17htmlunit 抓取网页(搜索索引可以作为数据挖掘的输入信息,后面才发现错了)
由于一开始的理解错误,本以为搜索索引可以作为数据挖掘的输入信息,后来发现不对。solr/nutch/lucene形成的搜索索引只是一个搜索索引。只要用户提供查询关键字,就可以找到关键字。单词来自哪个文档并不是文档的文本列表信息,而是挖掘需要整个文档的文本列表(文件中所有单词的集合)才能挖掘出相关信息。
详细看下Nutch抓取数据后的文件:
Nutch的输出文件可以分为crawldb、index、index、linkdb和segments。
Crawldb是所有需要爬取的超链接信息
(另外:存储下载地址,以及下载日期,用于查看页面更新时间)
Linkdb 中存储的是所有超链接以及每个链接的链接地址和锚文本。
Segments:存放抓取到的页面的页面,与上面链接的深度有关。如果深度设置为2,则在segments下会生成两个以时间命名的子文件夹,例如“201”。每轮爬取时,根据 crawldb 生成 Segments。存储的信息包括6种内容,crawl_fetch、crawl_generate、crawl_parse、parse_data和parse_text。内容为抓取到的网页内容;crawl_generate 最初生成(要下载的 URL 集合);crawl_fetch(每个下载地址的状态),爬取时生成的内容;crawl_parse(包括用于更新crawldb的外部链接)、parse_data、Parse_text是在解析捕获的数据文件时生成的。其中crawl_generate、crawl_fetch和crawl_parse是crawldb的url数据的一部分。
indexs:存储每次下载的独立索引目录。这个可以通过Crawldb、Linkdb和segments合成:bin/nutch index crawl/indexscrawl/crawldb crawl/linkdb crawl/segments/*
index:索引合并,存储索引信息。(Nutch的索引中没有存储内容,内容是存储在segment中的,所以直接用Lucene读取Nutch生成的索引会出现问题。Lucene中的segment与Nutch中的segment不同。 Lucene中的segments是索引的一部分,而Nutch中的segment只是WebDB中网页各个部分的内容和索引,它生成的索引与这些segment无关。)
因为挖掘的不是索引文件,而是文档的解析词列表,所以我们关心的是nutch是如何解析网页的。通常,网络爬虫在抓取网页时会解析网页的内容,并将内容下载到本地存储。如果网页可以解析,自然解析pdf文档就不是问题了。Nutch 对富文本的分析是插件的形式,所以只需要在配置文件中添加这个选项。关键问题是如何提取解析后的文本?由于segment下的所有文件都是二进制文件,我们不知道如何将它们转换为可见的文本字符。Nutch 提供了导出捕获数据以供查看的命令。比如为了获取linkdb中的内容,我们可以
使用bin/nutch readlinkdb crawl/linkdb/ -dump linkdb(导出地址),然后会在linkdb文件夹中看到part-00000,然后就可以用文本方式打开了。关键是我们要的是parse_data和parse_text,把segment数据整体导出,bin/nutchreadseg -dump crawl/segments/201segdb导出segment,其中crawl/segments/201是segment文件夹,segdb是转换后存储 文件夹的内容,这样查看时,收录了segments文件夹下的所有文件信息。在网上找了半天,没有找到可以直接操作解析文件的命令。有知道的请告诉我!或者如何使用它来解析文件信息。如果您之前使用过,请留言咨询!
在readseg命令之后,添加一个可选参数命令,-nocontent,这样就不会导出内容,-noparsedata,这样就不会导出parse_data。这样的命令后只能导出parse_text,即解析后的文本,比如网页内容,里面收录label元素,parse_text,去除网页格式的文本信息
参考资料:
1.
2.
3.
4.