2015-12-21 52 views
2

好吧,我正在学习网页搜索并且学习某些东西的最佳方式是通过实际操作。我对Java很满意,因此我选择Jsoup,这是一个网络报废库。我计划刮谷歌,但我知道它的结果source。谷歌搜索的结果似乎很容易,但我发现很难标识所有显示的内容,这是不可能的,因为大部分内容都是动态的source,Google通过使用一堆客户端JavaScript生成页面。我放弃了搜索导致这里使用下面的代码如何在Java中检索“检查的源代码”(Google chrome)?

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 GoogleScrapper { 

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
我能得到的所有URL的名单。

现在我发现的困难是获取搜索结果页面上的所有可用内容,该内容在源代码中不可用,但可以通过inspect元素找到。所以我的问题是,有没有一种方法(可能是第三方)收集我们在使用Java检查任何网页时获得的所有源代码。

+0

你确定''所有的源代码''不是已经从scraping返回?我无法想象为什么JSoup会过滤HTML结果中的任何内容。 –

+0

那么所有的代码是不可用的,因为它是由java脚本 – silverFoxA

回答

2

有没有一种方法(可能是第三方)收集我们在使用Java检查Google Chrome中的任何网页时获得的所有源代码。

是的,我们可以做到这一点 - 通过selenium自动化一个真正的浏览器。

初始化驱动程序对象,导航到一个URL,并获得driver.getPageSource()

WebDriver driver = new ChromeDriver(); 
driver.get(url); 

// sometimes here we might also need to wait for the page to load 

System.out.println(driver.getPageSource()); 

可以养活硒回到Jsoup页面的源代码,但要注意selenium本身在定位元素相当强大 - 你甚至可能不需要单独的HTML解析器。

+0

请纠正我,如果我错了,我们将检索它的页面源将不会得到我们在谷歌浏览页面时得到的代码,是? – silverFoxA

+0

@silverFoxA在这种情况下与您手动检查的源代码相同。 – alecxe

+0

谢谢它的工作原理,我有一个问题是如何在没有浏览器加载的情况下在智能手机上实现相同的功能? – silverFoxA