有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JSoup我在这段代码中犯了什么错误?

我试图通过JSoup从HTML中的h2标记中提取文本,但由于某些原因,它无法工作。任何帮助都将不胜感激,谢谢

HTML代码:

<div id="searchTemplate" class="searchTemplate listLayout so_us_en" >
                <div id="topDynamicContent">
                        <div id="s-result-info-bar" class="a-row a-spacing-base searchUndoAUIHacks"><div id="s-result-info-bar-content" class="a-row"><div class="a-column a-span8 a-spacing-none"><div class="s-first-column">
            <h2 id="s-result-count" class="a-size-base a-spacing-small a-spacing-top-small a-text-normal">1-16 of 121 results for <span><span class="a-color-state a-text-bold">&#034;rx 390&#034;</span></span></h2></div>

Java代码:

Document doc = Jsoup.connect("https://www.amazon.com/s/ref=nb_sb_ss_c_1_6?url=search-alias%3Daps&field-keywords=rx+390&sprefix=rx+390%2Caps%2C166&crid=2MTUBA4KGNY06").get();
        String link= doc.select("div.searchTemplate.listLayout.so_us_en")
                .select("div[id= topDynamicContent]")
                .select("div.a-row.a-spacing-base.searchUndoAUIHacks")
                .select("div.a-row")
                .select("div.a-column.a-span8.a-spacing-none")
                .select("div.s-first-column")
                .select("h2.a-size-base.a-spacing-small.a-spacing-top-small.a-text-normal").first().text();

共 (1) 个答案

  1. # 1 楼答案

    正如你在评论中告诉我们的,你正在开发一款Android应用程序。因此可能会有一些错误(我自己也经历过)

    首先,你有没有检查,你是在一个独立的线程上运行的?Android在主用户界面上的每个网络线程都使用线程,这有点令人讨厌。 参考请参见此处:https://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

    您可以在代码中执行以下操作:

    Thread threadNet = new Thread() {
      public void run() {
        Document doc;
        try {
          doc = Jsoup.connect("https://www.amazon.com/s/ref=nb_sb_ss_c_1_6?url=search-alias%3Daps&field-keywords=rx+390&sprefix=rx+390%2Caps%2C166&crid=2MTUBA4KGNY06").get();
          String link= doc.select("div.searchTemplate.listLayout.so_us_en")
                    .select("div[id= topDynamicContent]")
                    .select("div.a-row.a-spacing-base.searchUndoAUIHacks")
                    .select("div.a-row")
                    .select("div.a-column.a-span8.a-spacing-none")
                    .select("div.s-first-column")
                    .select("h2.a-size-base.a-spacing-small.a-spacing-top-small.a-text-normal").first().text();
              System.out.print(link);
        } catch (IOException e) {
              e.printStackTrace();
        }
      }
    };
    threadNet.start();
    

    尽管如此,正如@saka1029所提到的,代码通常是正确的,在Windows或Linux系统下运行良好