2012-06-21 120 views
0

我在應用以下示例http://jsoup.org/cookbook/extracting-data/example-list-links來列出鏈接。JSoup錯誤:java.lang.IllegalArgumentException

package org.jsoup.examples; 

import org.jsoup.Jsoup; 
import org.jsoup.helper.Validate; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

import java.io.IOException; 

/** 
* Example program to list links from a URL. 
*/ 
public class ListLinks { 
    public static void main(String[] args) throws IOException { 
     Validate.isTrue(args.length == 1, "usage: supply url to fetch"); 
     String url = args[0]; 
     print("Fetching %s...", url); 

     Document doc = Jsoup.connect(url).get(); 
     Elements links = doc.select("a[href]"); 
     Elements media = doc.select("[src]"); 
     Elements imports = doc.select("link[href]"); 

     print("\nMedia: (%d)", media.size()); 
     for (Element src : media) { 
      if (src.tagName().equals("img")) 
       print(" * %s: <%s> %sx%s (%s)", 
         src.tagName(), src.attr("abs:src"), src.attr("width"), src.attr("height"), 
         trim(src.attr("alt"), 20)); 
      else 
       print(" * %s: <%s>", src.tagName(), src.attr("abs:src")); 
     } 

     print("\nImports: (%d)", imports.size()); 
     for (Element link : imports) { 
      print(" * %s <%s> (%s)", link.tagName(),link.attr("abs:href"), link.attr("rel")); 
     } 

     print("\nLinks: (%d)", links.size()); 
     for (Element link : links) { 
      print(" * a: <%s> (%s)", link.attr("abs:href"), trim(link.text(), 35)); 
     } 
    } 

    private static void print(String msg, Object... args) { 
     System.out.println(String.format(msg, args)); 
    } 

    private static String trim(String s, int width) { 
     if (s.length() > width) 
      return s.substring(0, width-1) + "."; 
     else 
      return s; 
    } 
} 

我只是換掉 「」 用法:供應網址抓取 「」 用 「http://www.google.com」。 JSoup文檔非常差(如我所見)。所以,我得到以下錯誤&無法找出原因:線程「主」java.lang.IllegalArgumentException異常:用法:http://www.google.com at org.jsoup.helper.Validate.isTrue(Validate.java:45) at TestClass.main(TestClass.java:16)

我發現了關於同一個問題的以下文章:importing java libarary但我已經用網站名稱替換了用法:...等,並沒有幫助。

回答

1

I only replaced ""usage: supply url to fetch"" with "http://www.google.com".

那麼,這表明你不明白什麼Validate.isTrue調用正在做什麼。在改變代碼之前,不要在不知道它在做什麼的情況下更改代碼非常重要。

你不是意思是更改該代碼。你打算運行這個代碼並提供URL作爲命令行參數。第一條語句驗證了恰好一個命令行參數。

所以把代碼回到它是什麼,並運行

java -cp [whatever] org.jsoup.examples.ListLinks http://google.com 
+0

有沒有什麼辦法可以從eclipse運行這個代碼而不是命令行?因爲當我嘗試時,似乎沒有辦法輸入鏈接。 – Mem

+0

當我從eclipse運行代碼時,出現以下錯誤:線程「main」中的異常java.lang.IllegalArgumentException:用法:提供url以獲取 \t at org.jsoup.helper.Validate.isTrue(Validate.java: 45) \t at TestClass.main(TestClass.java:16) – Mem

+0

@Mem:是 - 編輯您的運行配置,以提示您輸入命令行參數,或者僅將命令行參數硬編碼到運行配置中。 –

-1

嘗試,而不是從網站上預先設置這個...我發現這對其他電池堆Q &一個

public class ListLinks { 
    public static void main(String[] args) throws IOException { 

     String url = "http://shopping.yahoo.com"; 
     print("Fetching %s...", url); 

     Document doc = Jsoup.connect(url).get(); 
     Elements links = doc.getElementsByTag("a"); 
} 
+0

請包括來自StackOverflow的原始問題的鏈接! – t0mm13b