用Java从internet获取数据

用Java从internet获取数据,java,dom,jsoup,Java,Dom,Jsoup,你好,我是Java新手,我正在尝试从互联网上获取一些数据。如果我想以谷歌搜索为例,存储搜索结果的数量和搜索时间。 我曾考虑过使用JSoupDOM特性,但我不知道如何获得该特定元素的值 import org.jsoup.nodes.Document; import java.io.IOException; public class google_time { public static void main(String[] args) throws IOException {

你好,我是Java新手,我正在尝试从互联网上获取一些数据。如果我想以谷歌搜索为例,存储搜索结果的数量和搜索时间。 我曾考虑过使用JSoupDOM特性,但我不知道如何获得该特定元素的值

import org.jsoup.nodes.Document;


import java.io.IOException;

public class google_time {
    public static void main(String[] args) throws IOException {
        String url = "https://www.google.com/webhp?hl=en&tab=Tw&q=data#hl=en&newwindow=1&output=search&sclient=psy-ab&q=data&oq=data&gs_l=hp.12...0.0.0.1682.0.0.0.0.0.0.0.0..0.0.les%3B..0.0...1c.Q9UUbwkFy-I&pbx=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&fp=6a12f0870d3ff179&biw=1066&bih=483";

        Document doc = Jsoup.connect(url).get();
        System.out.println(doc);

    }
}
如果我使用谷歌浏览器来检查元素,我感兴趣的是

<div id="resultStats">
About 6,480,000,000 results
<nobr>  (0.26 seconds)&nbsp;</nobr>
</div>    
那么,如何只获取位resultStatic和其中的文本呢?

首先是问题:

看起来像url
https://www.google.com/webhp
用于动态呈现谷歌搜索页面。ie使用AJAX获取搜索结果,然后使用javascript将其呈现到页面中。由于
jsoup
不是浏览器并且不运行javascript,因此使用
jsoup
获得的html将不会有任何搜索结果

因此,我们可以使用
https://www.google.com/search
。这将呈现一个正常的html页面,结果没有任何AJAX hooplah。但是google仍然会阻止来自非浏览器源的请求,因此您必须将
UserAgent
头添加到
Jsoup
请求中,如下所示:

Jsoup.connect(url)
    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1;"+
        " en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
    .get();
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.jsoup.nodes.Element;
import org.jsoup.Jsoup;
import java.util.Iterator;
import java.io.IOException;

public class GoogleScraper {
    public static void main(String[] args) throws IOException {
        String url = "https://www.google.com/search?"+
        "hl=en&tab=Tw&q=data#hl=en&newwindow=1&"+
        "output=search&sclient=psy-ab&q=data&oq=data"+
        "&gs_l=hp.12...0.0.0.1682.0.0.0.0.0.0.0.0..0.0.les"+
        "%3B..0.0...1c.Q9UUbwkFy-I&pbx=1&bav=on.2,"+
        "or.r_gc.r_pw.r_cp.r_qf.&fp=6a12f0870d3ff179&biw=1066&bih=483";

        try{

            Document doc = Jsoup.connect(url)
            .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1;"+
                " en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
            .get();

            //Prints the whole markup
            //System.out.println(doc.toString());

            Elements resultDivElems = doc.select("div#resultStats");
            Iterator<Element> itr = resultDivElems.iterator();

            //Prints only what you need, ie the result details
            while(itr.hasNext()){
                System.out.println(((Element)itr.next()).text());
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
最终的代码如下所示:

Jsoup.connect(url)
    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1;"+
        " en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
    .get();
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.jsoup.nodes.Element;
import org.jsoup.Jsoup;
import java.util.Iterator;
import java.io.IOException;

public class GoogleScraper {
    public static void main(String[] args) throws IOException {
        String url = "https://www.google.com/search?"+
        "hl=en&tab=Tw&q=data#hl=en&newwindow=1&"+
        "output=search&sclient=psy-ab&q=data&oq=data"+
        "&gs_l=hp.12...0.0.0.1682.0.0.0.0.0.0.0.0..0.0.les"+
        "%3B..0.0...1c.Q9UUbwkFy-I&pbx=1&bav=on.2,"+
        "or.r_gc.r_pw.r_cp.r_qf.&fp=6a12f0870d3ff179&biw=1066&bih=483";

        try{

            Document doc = Jsoup.connect(url)
            .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1;"+
                " en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
            .get();

            //Prints the whole markup
            //System.out.println(doc.toString());

            Elements resultDivElems = doc.select("div#resultStats");
            Iterator<Element> itr = resultDivElems.iterator();

            //Prints only what you need, ie the result details
            while(itr.hasNext()){
                System.out.println(((Element)itr.next()).text());
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
导入org.jsoup.nodes.Document;
导入org.jsoup.select.Elements;
导入org.jsoup.nodes.Element;
导入org.jsoup.jsoup;
导入java.util.Iterator;
导入java.io.IOException;
公共级谷歌刮板{
公共静态void main(字符串[]args)引发IOException{
字符串url=”https://www.google.com/search?"+
“hl=en&tab=Tw&q=data 35; hl=en&newwindow=1&”+
“输出=搜索&sclient=psy ab&q=数据&oq=数据”+
“&gs_l=hp.12…0.0.0.1682.0.0.0.0.0.0.0…0.0.0.les”+
%3B..0.0..1c.Q9UUbwkFy-I&pbx=1&bav=on.2+
“或.r_gc.r_pw.r_cp.r_qf&fp=6a12f0870d3ff179&biw=1066&bih=483”;
试一试{
Document doc=Jsoup.connect(url)
.userAgent(“Mozilla/5.0(Windows;U;WindowsNT 5.1;”+
“en-US;rv1.8.1.6)Gecko/20070725 Firefox/2.0.0.6”)
.get();
//打印整个标记
//System.out.println(doc.toString());
元素resultvelems=doc.select(“div#resultStats”);
迭代器itr=ResultDiscoverys.Iterator();
//只打印你需要的内容(结果细节)
while(itr.hasNext()){
System.out.println(((元素)itr.next()).text());
}
}捕获(例外e){
e、 printStackTrace();
}
}
}

jsoup提供了DOM(文档对象模型),您可以在其中导航,试着通读一下,也可以看看,特别是
jquery
部分,谢谢,但这不起作用,您还必须使用元素而不是元素,但仍然没有成功