使用 Jsoup 获取亚马逊数据价格 table
Get Amazon data prices table with Jsoup
我正在尝试使用 Jsoup 从网站获取数据 table:
http://aws.amazon.com/ec2/pricing/
我需要从 table 获取数据,我正尝试从第一个 table 开始,但页面在一段时间后加载 table。
Document doc = Jsoup.connect(html).get();
Elements tableElements = doc.select("table");
Elements tableHeaderEles = tableElements.select("thead tr th");
Elements tableRowElements = tableElements.select(":not(thead) tr");
Instance ins = new Instance();
for (int i = 0; i < tableRowElements.size(); i++) {
Element row = tableRowElements.get(i);
System.out.println("row");
Elements rowItems = row.select("td");
for (int j = 0; j < rowItems.size(); j++) {
System.out.println(rowItems.get(j).text());
}
System.out.println();
}
无法获取所需内容的原因是:某些内容是由Ajax
加载的,Jsoup
无法识别。
请参考Fetch contents(loaded through AJAX call) of a web page,说明HtmlUnit等可以为您效劳。
Jsoup:
- 为您的连接添加 userAgent 和超时。
- 确保您正确获取源代码。
- 在 http://try.jsoup.org/ 上尝试您的 CSS 选择器查询。
PhantomJSDriver:
如果问题是由Javascript引起的(因为JSoup不支持Javascript),那么我建议使用Selenium + PhantomJSDriver (Ghostdriver),用于GUI -less 浏览器自动化。有了它,您可以轻松浏览页面、select 元素、提交表单并执行一些抓取。 Javascript也支持。
你可以通过Selenium文档here. You will have to download phantomjs.exe文件获取。
中提供了一个很好的 PhantomJSDriver 教程
PhantomJSDriver 的配置(来自教程):
DesiredCapabilities caps = new DesiredCapabilities();
caps.setJavascriptEnabled(true); // not really needed: JS enabled by default
caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C://phantomjs.exe");
caps.setCapability("takesScreenshot", true);
WebDriver driver = new PhantomJSDriver(caps);
我正在尝试使用 Jsoup 从网站获取数据 table: http://aws.amazon.com/ec2/pricing/
我需要从 table 获取数据,我正尝试从第一个 table 开始,但页面在一段时间后加载 table。
Document doc = Jsoup.connect(html).get();
Elements tableElements = doc.select("table");
Elements tableHeaderEles = tableElements.select("thead tr th");
Elements tableRowElements = tableElements.select(":not(thead) tr");
Instance ins = new Instance();
for (int i = 0; i < tableRowElements.size(); i++) {
Element row = tableRowElements.get(i);
System.out.println("row");
Elements rowItems = row.select("td");
for (int j = 0; j < rowItems.size(); j++) {
System.out.println(rowItems.get(j).text());
}
System.out.println();
}
无法获取所需内容的原因是:某些内容是由Ajax
加载的,Jsoup
无法识别。
请参考Fetch contents(loaded through AJAX call) of a web page,说明HtmlUnit等可以为您效劳。
Jsoup:
- 为您的连接添加 userAgent 和超时。
- 确保您正确获取源代码。
- 在 http://try.jsoup.org/ 上尝试您的 CSS 选择器查询。
PhantomJSDriver:
如果问题是由Javascript引起的(因为JSoup不支持Javascript),那么我建议使用Selenium + PhantomJSDriver (Ghostdriver),用于GUI -less 浏览器自动化。有了它,您可以轻松浏览页面、select 元素、提交表单并执行一些抓取。 Javascript也支持。
你可以通过Selenium文档here. You will have to download phantomjs.exe文件获取。
中提供了一个很好的 PhantomJSDriver 教程PhantomJSDriver 的配置(来自教程):
DesiredCapabilities caps = new DesiredCapabilities();
caps.setJavascriptEnabled(true); // not really needed: JS enabled by default
caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C://phantomjs.exe");
caps.setCapability("takesScreenshot", true);
WebDriver driver = new PhantomJSDriver(caps);