2014-09-05 39 views
0

我正在关注Jsoup示例,试图了解它是如何工作的,并且复制并粘贴了所有代码,但我一直收到错误'Exception in thread“main”java.lang .IllegalArgumentException:http://news.ycombinator.com/ at org.jsoup.helper.Validate.isTrue(Validate.java:45) at jsoup.examples.ListLinks.main(ListLinks.java:21)'。 IDE是NetBeans。错误在哪里?jsoup教程抛出java.lang.IllegalArgumentException

package 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, "http://news.ycombinator.com/"); 
     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; 
    } 
} 
+1

你能发布完整的异常吗? – 2014-09-05 02:24:10

+0

运行时你传递了参数吗?如果您未在命令提示符下传递任何参数,则可能会导致错误。 – 2014-09-05 02:30:51

+0

完全异常:线程“main”中的异常java.lang.IllegalArgumentException:http://news.ycombinator.com/ \t at org.jsoup.helper.Validate.isTrue(Validate.java:45) \t at jsoup。 examples.ListLinks.main(ListLinks.java:21) – 2014-09-05 03:18:57

回答

0

返回的响应码是403,意思是Forbidden。

尝试在获取之前设置用户代理。例如:

Document doc = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").get(); 

您的代码与上述更改适用于我。

+0

这不适合我。 :( – 2014-09-05 03:19:45

+0

@SheldonHughes给我看你得到的堆栈跟踪 – ditkin 2014-09-05 03:24:39

+0

尝试删除Validate语句并看看你得到了什么给我看完整的堆栈跟踪剪切并粘贴一切 – ditkin 2014-09-05 03:27:07

相关问题