无法抓取我正在寻找的数据?

时间:2016-08-12 17:17:08

标签: java web-scraping web-crawler jsoup

我正试图从附件中删除表中的价格和日期:**** http://www.airfrance.fr/vols/paris+tunis

我成功地抓住了信息,但没有找到我正在寻找的方式(日期+价格)。我使用了这些代码行

import java.io.IOException;

import javax.lang.model.element.Element;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class Test {
    public static void main(String[] args) {
        Document doc;
        try {
            doc = Jsoup.connect("http://www.airfrance.fr/vols/paris+tunis").get();
            Elements links = doc.select("div");
            for (org.jsoup.nodes.Element e:links) {
                System.out.println(e.text());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行此代码只给我一些价格和一些日期,但不是所有表格,如下图所示。

enter image description here

请帮助我为我的学习项目解决这个问题,谢谢。

1 个答案:

答案 0 :(得分:1)

问题是您正在解析的日历不在服务器提供的原始源代码(右键单击>视图源)中。当浏览器呈现页面时,该表是使用JavaScript生成的(右键单击> inspect)。

Jsoup只能解析源代码。因此,您需要先使用HtmlUnit之类的内容加载页面,然后将此呈现的页面传递给Jsoup。

// load page using HTML Unit and fire scripts
WebClient webClient = new WebClient();
HtmlPage myPage = webClient.getPage("http://www.airfrance.fr/vols/paris+tunis");

// convert page to generated HTML and convert to document
Document doc = Jsoup.parse(myPage.asXml());

// find all of the date/price cells
for(Element cell : doc.select("td.available.daySelection")) {
    String cellDate = cell.select(".cellDate").text();
    String cellPrice = cell.select(".cellPrice > .day_price").text();
    System.out.println(
            String.format(
                    "cellDate=%s cellPrice=%s", 
                    cellDate, 
                    cellPrice));
}

// clean up resources        
webClient.close();

控制台

cellDate=1 septembre cellPrice=302 €
cellDate=2 septembre cellPrice=270 €
cellDate=3 septembre cellPrice=270 €
cellDate=4 septembre cellPrice=270 €
cellDate=5 septembre cellPrice=270 €
....

来源:Parsing JavaScript Generated Pages