[英]Fetching data from the internet in Java
美好的一天,我是Java的新手,我正试图从互联网上获取一些数据。 如果我想以一个例子来搜索谷歌并存储结果的数量和搜索时间。 我想过使用jsoup DOM功能,但我无法弄清楚如何获取该特定元素的值。
如果我使用谷歌浏览器检查元素我感兴趣的是
<div id="resultStats">
About 6,480,000,000 results
<nobr> (0.26 seconds) </nobr>
</div>
这是我唯一能够工作的东西,但是文件不包括那个元素。
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);
}
}
那么我如何只得到那个位的resultStatic和那里的文本?
首先是问题:
看似网址https://www.google.com/webhp
用于动态呈现Google搜索页面。 即使用AJAX获取搜索结果,然后使用javascript将其呈现到页面中。 由于jsoup
不是浏览器并且不运行javascript,因此使用jsoup
的html将不会有任何搜索结果。
相反,我们可以使用https://www.google.com/search
。 这将呈现一个普通的html页面,结果没有任何AJAX hooplah。 但谷歌从非浏览器源还是块的请求,所以你不得不添加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();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.