为什么jsoup不会在这个维基百科页面中找到一个简单的p元素?

时间:2013-10-13 12:27:28

标签: java netbeans web screen-scraping jsoup

import java.io.*;
import java.net.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class SWS {

    public static void main(String[] args) {
        scrapeTopic("/wiki/Python");
    }

    public static void scrapeTopic(String url) {
        String html = getUrl("http://www.wikipedia.org/" + url);
        Document doc = Jsoup.parse(html);
        String contentText = doc.select("p").first().text();
        System.out.println(contentText);
    }

    public static String getUrl(String Url) {
        URL urlObj = null;

        try {
            urlObj = new URL(Url);
        } catch (MalformedURLException e) {
            System.out.println("The url was malformed");
            return "";
        }

        URLConnection urlCon = null;
        BufferedReader in = null;
        String outputText = "";

        try {
            urlCon = urlObj.openConnection();
            in = new BufferedReader(new InputStreamReader(
                    urlCon.getInputStream()));
            String line = "";

            while ((line = in.readLine()) != null) {
                outputText += line;
            }

            in.close();
        }

        catch (IOException e) {
            System.out.println("There was a problem connecting to the url");
            return "";
        }

        return outputText;
    }
}

其他人已经尝试过它但它有效但不适合我。唯一可行的是当我使用"*"但是返回整个页面并且格式错误时例如
}k q g h6c y ( ...

我也试过"mw-content-text > p",这肯定是在维基页面。

我为那些一直关注这段代码的人道歉,但我似乎无法抓住html页面中最简单的东西。

这是我在select方法中使用“p”时收到的输出:


Exception in thread "main" java.lang.NullPointerException

    at sws.SWS.scrapeTopic(SWS.java:43)
    at sws.SWS.main(SWS.java:27)
Java Result: 1

第43行是:

String contentText = doc.select("p").first().text();

和第27行是:

scrapeTopic("/wiki/Python");

我目前正在使用Netbeans。我不确定这是否相关,但Netbeans正在强调黄色的下面一行,并显示“已分配的价值从未使用过”

URL urlObj = null;
URLConnection urlCon = null;
BufferedReader in = null;
String line = "";

就像我说的,它似乎适用于其他人而不适合我! 在此先感谢!

2 个答案:

答案 0 :(得分:1)

如果您只是让jsoup连接到维基百科页面,它就会起作用。

public static void scrapeTopic(String url)
{

    Document doc;
    try {
        doc = Jsoup.connect("http://www.wikipedia.org/" + url).get();
        String contentText = doc.select("p").first().text();
        System.out.println(contentText);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

答案 1 :(得分:0)

网址为en.wikipedia.org(英文网页),而不是www.wikipedia.org。