我想从以下 URL 上的隐藏日历中解析 9 月份的日期+价格:http://www.lufthansa.com/vol/vol-paris-berlin 。这里的问题是,当您按下 9 月时,页面将生成日历,但 url 不会发生变化。我使用了这段代码,但没有结果。
public static void main(String[] args)
throws FailingHttpStatusCodeException, MalformedURLException, IOException {
WebClient webClient = new WebClient();
HtmlPage myPage = webClient.getPage("http://www.lufthansa.com/vol/vol-paris-berlin");
Document doc = Jsoup.parse(myPage.asXml());
for(Element s : doc.select("button.daygrid_cell.hasprice")) {
String weekday_text = s.select(".weekday_text").text();
String pricebox = s.select(".pricebox > .br").text();
System.out.println(
String.format(
"weekday_text=%s pricebox=%s",
weekday_text,
pricebox));
}
webClient.close();}
最佳答案
我目前还没有找到使用 htmlUnit 的方法。
不过,您可以使用汉莎航空页面用于填充日历 View 的相同查询来“消除中间人”:
响应采用 JSON 格式,因此您可以使用 JSON 解析器在与汉莎航空页面相同的演示文稿中提取信息(价格始终向上舍入到下一个整数)。在下面的示例中,我使用 json-simple :
Map<String, Integer> prices = new TreeMap<String, Integer>(); // sorted map/keys in sorted order
try {
Document doc = Jsoup
.connect("https://bestprice-live-backend.mcon.net/flights-by-day?l=fr_fr&departure=PAR&destination=BER&departureFrom=2016-09-01&departureTo=2016-09-30&cabin=Economy&duration=7")
.userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36")
.referrer("http://www.lufthansa.com/vol/vol-paris-berlin")
.get();
JSONObject obj = (JSONObject) new JSONParser().parse(doc.text());
obj = (JSONObject) obj.get("dates");
for (Iterator<?> iterator = obj.keySet().iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
JSONObject dateObject = (JSONObject) obj.get(key);
Double price = (Double) dateObject.get("price");
int roundedPrice = (int) Math.ceil(price); // lufthansa displays prices rounded up
prices.put(key, roundedPrice);
}
for (String key : prices.keySet()) {
System.out.println(key + ": " + prices.get(key) + " €");
}
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
输出:
2016-09-01: 163 €
2016-09-02: 158 €
2016-09-03: 160 €
2016-09-04: 160 €
2016-09-05: 160 €
2016-09-06: 158 €
2016-09-07: 155 €
2016-09-08: 159 €
2016-09-09: 160 €
2016-09-10: 156 €
2016-09-11: 160 €
2016-09-12: 159 €
2016-09-13: 157 €
2016-09-14: 158 €
2016-09-15: 160 €
2016-09-16: 184 €
2016-09-17: 156 €
2016-09-18: 160 €
2016-09-19: 179 €
2016-09-20: 159 €
2016-09-21: 163 €
2016-09-22: 180 €
2016-09-23: 188 €
2016-09-24: 160 €
2016-09-25: 160 €
2016-09-26: 160 €
2016-09-27: 154 €
2016-09-28: 157 €
2016-09-29: 159 €
2016-09-30: 163 €
关于javascript - 如何从 HTML 页面解析隐藏的 Javascript 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38939782/