2016-03-06 81 views
-1

我想学习jsoup.I的基本方法试图让一个特定的web page.But我用stackoverflow链接,然后所有的超链接 ,我无法获得该网页上的所有链接,但在另一边时,我改成了 javatpoint它的工作。为什么“http://www.stackoverflow.com”没有得到解析,但“http://www.javatpoint.com/java-tutorial”得到解析

有人可以解释为什么?

这是代码。

import java.io.IOException; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
import org.jsoup.*; 
import org.jsoup.nodes.*; 

import java.io.*; 

import org.jsoup.nodes.Document; 

class Repo { 
    // String html; 
    public static void main(String s[]) throws IOException { 
     try { 
      Document doc = Jsoup.connect("http://www.javatpoint.com/java-tutorial").get(); 
      // Document doc=Jsoup.connect("http://www.stackoverflow.com").get(); 

      System.out.println("doc"); 
      // Elements link=(Elements)doc.select("span[class]"); 
      // Elements link = doc.select("span").first(); 
      // Elements link = (Elements)doc.select("span"); 
      Elements link = (Elements) doc.select("a[href]"); 

      for (Element el : link) { 
       // System.out.print("-"); 
       // System.out.println(el.attr("class")); 
       String str = el.attr("href"); 
       System.out.println(str); 

      } 
     } catch (Exception e) { 
     } 
    } 
} 
+0

在“stackoverflow”的情况下,控制台上不会打印任何东西。 – a874

+3

可能有一个例外,您跳过,因此您不会看到问题所在。 – hotzst

+0

@ hotzst,我现在添加了IOException,所以它的状态码= 403错误。这意味着解析在stackoverflow上是被禁止的。感谢帮助 – a874

回答

2

许多网站需要有效的http请求来携带某些标头。一个突出的例子是userAgent头。因此,例如,将这项工作:

Document doc = Jsoup 
    .connect("http://www.stackoverflow.com") 
    .userAgent("Mozilla/5.0") 
    .get(); 

旁注: 你应该从未尝试捕捉异常,然后静静地忽略可能的失败案例。至少在那里做一些日志记录 - 否则你的程序将很难调试。

+0

,非常感谢。我几乎失去了希望我能够解析这个页面。 – a874

+2

对于你可能想看看这个网址:http://api.stackexchange.com/ – luksch