【发布时间】:2015-12-21 05:38:52
【问题描述】:
好的,所以我正在学习 Web Scraping,而学习某些东西的最佳方法是实际操作。我对 Java 很满意,因此我选择了 Jsoup,这是一个网络抓取库。我计划刮谷歌虽然我知道它的结果source。抓取谷歌结果似乎很容易,但我发现很难抓取所有显示的内容,这是不可能的,因为其中大部分是动态的source,谷歌通过使用一堆客户端 JavaScript 生成页面来做到这一点。我抓取了搜索结果在此处使用以下代码
package JsoupPrac;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class GoogleScraper {
public static void main(String[] args) throws IOException{
Document doc;
try{
doc = Jsoup.connect("https://www.google.co.in/search?as_q=&as_oq=query&as_eq=&as_nlo=&as_nhi=&lr=lang_en&cr=countryCA&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=&gws_rd=cr&ei=4Id1Vs7pC8rQjwOEkbP4CA#lr=lang_en&cr=countryCA&as_qdr=all&tbs=lr:lang_1en%2Cctr:countryCA&q=query")
.userAgent("Mozilla").ignoreHttpErrors(true).timeout(0).get();
Elements links = doc.select("ol[class=g]");
for (Element link : links) {
Elements titles = link.select("h3[class=r]");
String title = titles.text();
Elements bodies = link.select("span[class=st]");
String body = bodies.text();
System.out.println("Title: "+title);
System.out.println("Body: "+body+"\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
所以用上面的代码并用
迭代一下a[href]并寻找
abs:href我也可以获得所有网址的列表。
现在我发现困难的是在搜索结果页面上获取所有可用的内容,这些内容在源代码中不可用,但可以通过检查元素找到。所以我的问题是,有没有办法(可能是第 3 方)收集我们在使用 Java 检查 Google Chrome 中的任何网页时获得的所有源代码。
【问题讨论】:
-
您确定
"all the source code"尚未从抓取中返回吗?我无法想象为什么 JSoup 会从 HTML 结果中过滤掉任何内容。 -
所有代码都不可用,因为它是java脚本
标签: java web-scraping