首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Jsoup从嵌套span获取文本?

如何使用Jsoup从嵌套span获取文本?
EN

Stack Overflow用户
提问于 2017-11-22 12:49:11
回答 2查看 1.3K关注 0票数 0

我在试着把这段文字

使用下面的代码。但是,输出表现得好像嵌套的跨度不存在一样。

代码语言:javascript
运行
复制
            Elements tags = document.select("div[id=tags]"); 

            for (Element tag:tags){


                Elements child_tags = tag.getElementsByTag("class");  

                String key = tag.html();
                System.out.println(key); //only as a test

                for (Element child_tag:child_tags){
                    System.out.println("\t" + child_tag.text());

                }

我的输出是

代码语言:javascript
运行
复制
      <hr />Tags: 
      <span id="category"></span> 
      <span id="voteSelector" class="initially_hidden"> <br /> </span>      
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-25 11:22:02

假设您正在https://chesstempo.com/chess-problems/15上尝试代码,您想要的数据如下图所示

现在,无论作为浏览器中作为源代码呈现的数据是什么,您都可以在浏览器中按CTRL+U键来获取数据,这将打开一个新的窗口,在该窗口中将显示Jsoup将获得的实际内容。现在来问您的问题,您试图检索的部分在浏览器源代码中不存在,请按CTRL+U检查。

如果内容是使用JAVASCRIPT呈现的,这些内容对JSOUP是不可见的,因此您必须使用其他东西来运行javascript并向您提供详细信息。

JSoup不运行Javascript,也不是浏览器。

编辑

使用SELENIUM实现了转机。下面是获取url的确切源代码的工作代码和您正在寻找的所需数据:

代码语言:javascript
运行
复制
import java.io.IOException;
import java.io.PrintWriter;

import org.json.simple.parser.ParseException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class JsoupDummy {
 public static void main(String[] args) throws IOException, ParseException {
    System.setProperty("webdriver.gecko.driver", "D:\\thirdPartyApis\\geckodriver-v0.19.1-win32\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();

    try {
        driver.get("https://chesstempo.com/chess-problems/15");
        Document doc = Jsoup.parse(driver.getPageSource());
        Elements elements = doc.select("span.ct-active-tag");
        for (Element element:elements){
             System.out.println(element.html());
        }

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        /*write.flush();
        write.close();*/
        driver.quit();

    }
}
}

您需要selenium web驱动程序硒Web驱动程序,它模拟浏览器行为,并允许您呈现脚本编写的html内容。

票数 1
EN

Stack Overflow用户

发布于 2017-11-22 13:34:35

代码语言:javascript
运行
复制
Elements child_tags = tag.getElementsByTag("class");

使用这一行,您将尝试获得一个标记类(即<class>...</class> )的元素,该元素并不存在。将这一行改为:

代码语言:javascript
运行
复制
Elements child_tags = tag.getElementsByClass("tag");

若要按属性值class = tag获取元素,请执行以下操作:

代码语言:javascript
运行
复制
Elements child_tags = tag.getElementsByTag("span"); 

通过标记名称= span获取元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47435187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档