【问题标题】:How can I retrieve the "inspected source code" (Google chrome) in Java?如何在 Java 中检索“已检查的源代码”(Google chrome)?
【发布时间】: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


【解决方案1】:

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

是的,我们可以做到这一点 - 通过 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());

您可以将 selenium 返回的页面源提供给 Jsoup,但请注意,selenium 本身在定位元素方面非常强大 - 您甚至可能不需要单独的 HTML 解析器。 p>

【讨论】:

  • 如果我错了请纠正我,我们将检索它的页面源不会是我们在谷歌浏览器中检查页面时得到的代码,是吗?
  • @silverFoxA 在这种情况下与您手动检查的源代码相同。
  • 谢谢它确实按预期工作,我有一个疑问是如何在不加载浏览器的情况下在智能手机中实现相同的功能?
  • @silverFox 好!您实际上可以通过 selenium 和 appium 自动化移动浏览器。
猜你喜欢
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 2016-11-23
  • 2014-06-14
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 2013-06-01
相关资源
最近更新 更多