Jsoup-如何在抓取时绑定两个未嵌套的div标签

时间:2016-03-30 12:29:20

标签: html parsing jsoup

我正在抓取一个网页,其中包含章节名称和文本的单独div。我需要记录哪个文本属于哪个章节。 我用于抓取的方法是选择章节div标签并循环遍历所有元素。然后Text div标记并循环遍历所有文本元素。 章节标签的数量少于文本。这意味着一章内可以有多个文本。 如何记录章节与文字? 请帮忙!

我的Jsoup代码

Elements chapInfos =doc.select("div.chapter");
for(Element chapInfo : chapInfos)
        {
            Elements tempChap= chapInfo.select("div.chapno");
            String ChapterNo = tempChap.text();
        }
        Elements Texts =doc.select("div.chapterText");
        for(Element text : Texts)
        {
            Elements tempText= text.select("div.EnglishText");
            String FinalText = tempText.text();
        }

示例网页HTML

          <div class=chapter>
        <div class=chapno>(1)</div>
        </div>

        <div class=chapterText>
        <div class=EnglishText>Some Text</div>
        </div>
        <div class=chapterText>
        <div class=EnglishText>Some Other Text</div>
        </div>

        <div class=chapter>
        <div class=chapno>(2)</div>
        </div>

1 个答案:

答案 0 :(得分:0)

尝试这样的事情怎么样: Elements elms =doc.select("div.chapter, div.chapterText");

这可能会给出两种类型的div的组合列表,这些div可以迭代,并且只要内部div的类从EnglishText变为chapno,就会指示新章的开头

此外,不是匹配包装器div,也许最好选择内部潜水以避免另一级匹配,如下所示: Elements elms =doc.select("div.chapter div, div.chapterText div");