使用Kanna Swift仅从HTML解析纯文本

时间:2018-10-26 07:49:00

标签: html swift parsing xpath html-parsing

我正在使用Kanna Swift进行HTML解析。

例如: 在这种情况下,如何仅解析突出显示的英文文本?

  

容易容易某些事情,通常是不好的事情,意味着拥有   受它影响或这样做的趋势。

enter image description here

                <div class="caption hide_cn"> 
                    <a class="anchor" name="prone_1"></a>
                    <span class="num">1</span>
                    <span class="st" title="能被表示程度的副词或介词词组修饰的形容词">ADJ-GRADED </span>
                    <span class="tips_box">
                        <span class="lbl type-syntax">
                            <span class="span"> [</span>
                            verb-link <span class="hi rend-sc">ADJ</span>
                        </span>
                        <span class="lbl type-syntax">
                            <span class="span">, </span>
                            <span class="hi rend-sc">ADJ</span>
                            to-infinitive
                            <span class="span">]</span>
                        </span>
                    </span> 
                    <span class="def_cn cn_before">
                        <span class="chinese-text">有(不好的)倾向的;易于</span>
                        …
                        <span class="chinese-text">的;很可能</span>
                        …
                        <span class="chinese-text">的</span>
                    </span> 
                    To be <b>prone to</b> something, usually something bad, means to have a tendency to be affected by it or to do it. 
                    <span class="def_cn cn_after">
                        <span class="chinese-text">有(不好的)倾向的;易于</span>
                        …
                        <span class="chinese-text">的;很可能</span>
                        …
                        <span class="chinese-text">的</span>
                    </span>
                </div>

如果我使用: doc.css("div[class='caption hide_cn']") 我把想要的句子弄得一团糟。

也许我错了,但是我找不到足够的用法说明文件。
例如我从stackoverflow中学到了"span[class= 'xxx xxx']",而不是从那个github页面的文档中学到了。
我们有类似"[class != 'xxx xxx'] "!=span

的东西吗

1 个答案:

答案 0 :(得分:1)

经过一些调整,我找到了一个解决方案,以防万一以后有人需要它。

我们可以使用removeChild方法删除所有其他部分!

// Search for nodes by CSS
      for whole in doc.css("div[class='caption hide_cn']") {
        if let a1 = doc.css("span[class='num']").first {
          whole.removeChild(a1)
        }
        if let a2 = doc.css("span[class='st']").first {
          whole.removeChild(a2)
        }
        if let a3 = doc.css("span[class='tips_box']").first {
          whole.removeChild(a3)
        }
        if let s1 = doc.css("span[class='def_cn cn_before']").first {
          whole.removeChild(s1)
        }
        if let s2 = doc.css("span[class='def_cn cn_after']").first {
          whole.removeChild(s2)
        }
        print(whole.text)
      }

可惜我在文档中找不到这个。我猜那些软件包/库足够强大,可以执行几乎所有您想要的操作。您只需要进行一些调整即可。