【问题标题】:stormCrawler not crawling only main content of pageStormCrawler 不只抓取页面的主要内容
【发布时间】:2020-06-10 11:02:44
【问题描述】:

默认情况下,Crawler 会抓取整个页面,包括在所有页面中通用的页眉和页脚。我们的要求是爬虫只能爬取页面的主要内容(在 div#body-wrapper 下)

我们使用 parsefilters.json 实现了同样的效果。

{
      "class": "com.digitalpebble.stormcrawler.parse.filter.ContentFilter",
      "name": "ContentFilter",
      "params": {
        "pattern": "//DIV[@id=\"body-wrapper\"]",
        "pattern2": "//DIV[@itemprop=\"articleBody\"]",
        "pattern3": "//ARTICLE"
       }
    }

更新 parsefilters.json 后,它只抓取该 div,但它包括所有空格、换行符、JS、CSS 代码等,如下所示。

“内容”:“\n\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t 发展您的业务....... ...... \n\n\n\n\n\n\t\n\t\t\n\t\t\t\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\t\n\n\t\n\t\t\n\n\n\n\n\t\n\n\t\n\t \t\n\t\t\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\t\t\n \n\t\t\n\n\n\n\t\n\t\t\n\t\t\n\n\n\t\t\t\n\t\t\t\t \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\t\t\n \n\t\t\n\n\t\t\n\n\t\t\n\t\n\t\t\t\n\t\t\t\n\t\t \n\t\t\n\n\t\t\n\t\t\t\n\t\t\t\t\n\n\n\t\n\n\n\n\t \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\t\t \t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n\n\t \n\n\t\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\t\t\n\t \t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t \t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\t\n\t\t \n\t\n.登陆页面-指标 { \n\ttop:inherit !important;\n}\n\n\t.slide-share .slide-share-indicators li {\n\t 宽度: 10px;\n\t 高度: 10px;\n \t 边框半径:10px;\n\t 边框:无;\n\t 边距:0px 0 0 14px;\n}\n.slide-share .cta-btn-inline { \n 左边距:0px ;\n}\n .slide-share .slide-share-indicators .active {\n\t 背景颜色:#f33;\n}\n .slide-share .slide-share-item-img {\n \t 宽度:100%;\n\t 高度:360px;\n\t 最大高度:370px;\n\t 背景尺寸:封面;\n\t 背景位置:居中;\n}\n .slide-share .carousel-indicators {\n\t margin-bottom: 0px;\n\t bottom: 24px;\n}\n .slide-share .slide-share-item-caption {\n\t 宽度: 100%;\n\t -webkit-transition: height 0.4s ease;\n\t transition: height 0.4s ease;\n\t padding: 24px 16px;\n\t padding-bottom:0px;\n \t 位置:绝对;\n\t 底部:5%;\n\t 显示:块;\n\t 颜色:黑色;\n}\n .slide-share .slide-share-item-caption:hover {\n\t 文本装饰:无;\n}\n .slide-share .slide-share-item-desc {\n\t 最大宽度:992px;\n\t 宽度:10 0%;\n\t 位置:相对;\n\t 边距:0 自动;\n}\n .slide-share .slide-share-item-desc h2 {\n\t 边距-底部:8px;\ n\t 字体大小:36px;\n\t 字体粗细:700;\n}\n .slide-share .slide-share-item-desc p {\n\t 行高:1.5;\n \t margin-bottom: 24px;\n\t font-size:24px;\n\t font-weight: 400;\n\t width:60%;\n}\n .slide-share .slide-share -arrows {\n\t top: 50px;\n\t margin: 30px;\n\t width: 0;\n\t align-items: initial;\n}\n .slide-share .slide-share -arrow-icon {\n\t color: #fff;\n\t font-size: 25px;\n\t margin-top: 75px;\n}\n.slide-share .slide-share-item- desc {\n 背景颜色:透明;\n}\n .slide-share .slide-share-arrow-icon:hover {\n\t 颜色:#ee1818;\n\t 字体大小:25px;\ n}\n\n.slide-share .carousel-item .shade { \n width: 60%;\n height: 100%;\n position: absolute;\n background-image: linear-gradient(to right, #2e2e2e, 透明);\n 不透明度: .6;\n \n}\n\n @media (max-width: 991px) and (min-width: 768px) {\n\t .slide-share .slide -share-item-desc h2 {\ n\t\t 宽度:100%;\n\t}\n\t .slide-share .slide-share-item-desc p {\n\t\t 宽度:100%;\n\t}\ n}\n @media (max-width: 768px) {\n\t .slide-share .slide-share-item-desc h2 {\n\t\t 宽度: 100%;\n\t\t 字体-size: 24px;\n\t\t margin-bottom: 16px;\n\n\t}\n\t .slide-share .slide-share-item-desc p {\n\t\t font-大小:16px;\n\t\t 显示:无;\n\t}\n\t.slide-share-item-img.left-center {\n\t背景位置:左中心;\n\t } \n\n\t.slide-share-item-img.right-center {\n\t背景位置:右中心;\n\t} \n\t.slide-share-item-img.center- center {\n\t背景位置:centercenter;\n\t}\n}\n \n\n\n\n\n \n\t\n\t\t\n\t\t\t\ t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\ t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\n\t\t\t\t\ t\n\t\t\t\t\n\t\t\t\t\t\n\t\t

但是当 Crawler 抓取整页(默认配置)时,它没有添加空格、换行符、JS、CSS 代码等。

我们如何抓取页面的某些部分但没有空格、换行符、JS、CSS 等。

请多多指教。

谢谢。

【问题讨论】:

    标签: web-crawler stormcrawler


    【解决方案1】:

    ContentFilter 自 StormCrawler 1.13 以来已被弃用,取而代之的是 TextExtractor。

    来自发行说明,

    [...] 主要的新功能是为 JsoupParserBolt 添加了 TextExtractor (#678)。与它取代的 ContentParseFilter 不同,它是从主配置配置的,并且不是 ParseFilter,因为它直接对 Jsoup 生成的对象进行操作。 TextExtractor 允许将文本限制为特定元素以避免样板代码和导航元素,但与合并一些标记的 ContentParseFilter 相比,它提供了更清晰的文本内容。 TextExtractor 还可用于定义排除区域,如果未定义或找到此类区域,则该区域将应用​​于受限区域或整个文档。例如,这对于删除 SCRIPT 或 STYLE 元素很有用。

    原型生成的配置使用 TextExtractor,其配置与 ContentFilter 过去所做的类似。

    【讨论】:

    • 您好 Julien,感谢您的回复。我们使用的是 Storm Crawler 1.12.1,因为我们的 ES 6.5.x。是否可以在 1.12.1 中获得与 TextExtractor 类似的结果,或者我们可以将 Stormcrawler 1.13 与 ES 6.5.x 一起使用
    • 嗨@Julien,感谢您的回复。我们将在 v 1.13 中尝试这个,我们看到 TextExtractor 能够排除脚本和样式标签。它也会排除 \t\t 吗?
    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多