当前位置: 首页 > 知识库问答 >
问题:

Jsoup html解析span下的项目

柯阳曦
2023-03-14

我正在尝试在 Java 上使用 Jsoup 解析项目。当我打开我正在尝试阅读的网站的源代码时

    <ul class="myptab typ3">
        <li><span class="active"><a href="#;" id="ONE_TO_ONE">1+1</a></span></li>
        <li><span><a href="#;" id="TWO_TO_ONE">2+1</a></span></li>
    </ul>


    <h5 class="invisible" >1+1 itemlist</h5>
    <div class="tblwrap mt50">
        <ul class="prod_list">
        </ul>
        <div class="paging">
        </div>
    </div>

    <h5 class="invisible">2+1 itemlist</h5>
    <div class="tblwrap mt50">
        <ul class="prod_list">

        </ul>
        <div class="paging">
        </div>
    </div>

在这个源代码中,列出了1 1节或2 1节的源代码,但当我使用inspect查看1 1节项目的源代码时,

    <h5 class="invisible">1+1 itemlist</h5>
    <div class="tblwrap mt50"> ==$0
    <ul class="prod_list">
      <li>
        <div class="prod_box">
          <p class="img"></p>
          <p class="title">mangomilk_pet_300ML</p>
      </li>
      <li>...</li>
      <li>...</li>
      <li>...</li>
    </ul>

它像这样弹出。所以我想从源代码中的隐藏跨度项中选择p.title和p.img。

共有1个答案

吕宸
2023-03-14

看起来内容是由 java 脚本动态构建的。在这种情况下,jsoup是不够的。您可以尝试使用jB浏览器驱动程序,它能够检索完成的DOM(具有呈现的 java 脚本部分)。

示例代码:

// Represents result item
public class ProductBox {
    private final String image;
    private final String title;

    public ProductBox(String image, String title) {
        this.image = image;
        this.title = title;
    }

    public String getImage() { return image; }
    public String getTitle() { return title; }
}


// Method responsible for parsing a page
public void processPage(String url) {
    JBrowserDriver driver = new JBrowserDriver(Settings
            .builder()
            .timezone(Timezone.AMERICA_NEWYORK)
            .userAgent(UserAgent.CHROME)
            .build());

    driver.get(url);
    String pageSource = driver.getPageSource();
    driver.quit();

    Document doc = Jsoup.parse(pageSource);
    Elements prodBoxes = doc.select("ul.prod_list div.prod_box");
    List<ProductBox> products = prodBoxes.stream()
            .map(e -> new ProductBox(e.select("p.img").text(), e.select("p.title").text()))
            .collect(Collectors.toList());

    products.forEach(e -> System.out.printf("%s - %s\n", e.getImage(), e.getTitle()));
}
 类似资料:
  • 我有这个代码: 我已经尝试过这个,但不工作:

  • 我是Android Studio的新手,面临以下错误。 错误:无法解析“:”的依赖项app@debug/compileClasspath“:无法解析项目:floatinglibrary。显示受影响模块的详细信息:应用 错误:无法解析“:app@debug/编译类路径”的依赖关系:无法解析项目:d时间筛选库。显示详细信息 受影响的模块:应用

  • 我对Android的Gradle构建有问题。我尝试了很多方法来解决这个问题,但没有什么不起作用。我需要帮助。 Gradle版本:4.4 Gradle插件:3.0.1 错误:无法解析app@serverDebug /compileClasspath的依赖关系:无法解析项目:vksdk_library。 错误:无法解析“”的依存关系:app@mockDebugAndroidTest/compileCl

  • 我希望有人面对同样的问题来解决依赖。下面提到的文件 xsi:schemalocation=“http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”xmlns=“http://maven.apache.org/pom/4.0.0”xmlns:xsi=“http://www.w3.org/2001/x

  • 我正在使用IntelliJIDEA和maven作为构建工具在scala中编写spark应用程序。 我将它们部署在Azure HDInsight集群中。我为Intellij安装了Azure插件。 我使用事件集线器对数据进行流式处理,并在将其写入存储之前执行一些转换。 我对maven的工作有相当的了解--我认为它将pom.xml中提到的依赖关系获取到某个本地位置用户的.m2文件夹。当我们执行mvn包检

  • 我想通过Jenkins用maven Build运行一个项目。 使用的存储库-Git从存储库中提取代码 使用的构建工具--Maven 我的jenkins控制台输出 请注意:-如果你看不到图像,只需使用Ctrl++缩放即可