gpt4 book ai didi

java - 用Java从互联网上获取数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:54 24 4
gpt4 key购买 nike

美好的一天,我是 Java 的新手,我正在尝试从互联网上获取一些数据。如果我想举个例子来搜索谷歌并存储结果数和搜索时间。我考虑过使用 jsoup DOM 功能,但我不知道如何获取该特定元素的值。

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

<div id="resultStats">
About 6,480,000,000 results
<nobr> (0.26 seconds)&nbsp;</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 和里面的文本呢?

最佳答案

首先是问题:

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

因此我们可以使用 https://www.google.com/search。这将呈现一个正常的 html 页面,其结果没有任何 AJAX 喧嚣。但是谷歌仍然阻止来自非浏览器来源的请求,因此您必须将 UserAgent header 添加到您的 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();
}
}
}

关于java - 用Java从互联网上获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12615044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com