【问题标题】:Can't scrape the data that i'm looking for?无法抓取我正在寻找的数据?
【发布时间】:2016-08-12 17:17:08
【问题描述】:

我正在尝试从 URL 中抓取附图中表格中的价格和日期:**** 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();
        }
    }
}

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

你能帮我解决我的学习项目的这个问题吗?谢谢。

【问题讨论】:

    标签: java web-scraping web-crawler jsoup


    【解决方案1】:

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

    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

    【讨论】:

    • 谢谢,您确实遇到了问题,但是当我尝试您的代码时,webClient.close() 仍然存在问题。
    • 这里不能发帖!!!可惜太长了。我向您发送了 Facebook 请求,或者如果您不介意将您的邮件发给我,我将不胜感激。
    • 打开一个新问题并具体说明您在使用 WebClient.close() 时遇到的问题。您应该只发布代码的相关块,而不是整个源代码。
    • 我只是缺少很多依赖项。您是否添加了特定的包?
    • 查看 Html Unit 答案中的链接。
    猜你喜欢
    • 2016-03-04
    • 2017-06-18
    • 1970-01-01
    • 2021-03-04
    • 2017-09-19
    • 2011-03-04
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多