JSoup这个代码我做错了什么?

时间:2017-08-06 23:07:43

标签: java html 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 个答案:

答案 0 :(得分:0)

正如您在评论中告诉我们的那样,您正在使用Android应用。因此可能会有一些错误(我自己经历过)。

首先,你检查过,你是在一个单独的线程上运行? Android在主UI上为每个NetworkThread使用Threads有点讨厌。 有关参考,请参阅此处: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系统下运行良好。