如何从网页上抓取一些数据

时间:2019-08-06 16:45:38

标签: java jsoup

我在抓取网页时遇到问题。我想做的是这样:

我有这个网站:https://www.arrentacar.rs/sr/vozni-park/#

当您点击页面按钮“ Rezervisi”时可以看到,我想抓取下一个数据:

网站打开新窗口时的第一个下拉菜单,在该下拉列表中其“ Volkswagen UP!1.0”,我想报废所有汽车,然后在这个名为“ Mesto preuzimanja vozila”的下拉菜单中,我要报废所有物品,并在我要删除所有项目的下拉菜单称为“ Mesto vracanja vozila”。

这是我在第一个下拉菜单中尝试输入汽车名称的方法:

Document doc
            = Jsoup.connect("https://www.arrentacar.rs/sr/vozni-park/#").get();

    Elements elems = doc.select(".inner-form__elements");

    for (Element e : elems) {
        String carName = e.select(".select-vehicle").text();
        System.out.println(carName);
    }

这很好,但不会在表格列中显示数据,而IMDB的标题和等级显示正确。

1 个答案:

答案 0 :(得分:0)

可以调整您的选择器。当您可以使用特定ID时,请勿按类别选择。在这里,您可以因为所需的select具有唯一的名称和ID <select name="car" id="carlist" ... >,所以它们中的任何一个都是更好的选择。 这样,您还可以避免for循环,该循环当前仅循环一个元素,因为类inner-form__elements只有一个元素。 您的第二个选择器.select-vehicle也太笼统,选择太多。这样,text()将其包含的所有内容作为一个字符串返回。要仅获取选项,您必须选择optionselect等于id的所有标签carlist。然后,您可以遍历它们,以便获得单个字符串。 前两个下拉菜单的代码为:

Document doc = Jsoup.connect("https://www.arrentacar.rs/sr/vozni-park/#").get();

// selecting all "options" from element with id=carlist
Elements cars = doc.select("#carlist > option");

// remove "Izaberi vozilo"
cars.remove(cars.first());

// display all cars
for (Element car : cars) {
    System.out.println(car.text());
}

System.out.println("------");

// selecting all "options" from element with id=mestopreuzimanja
Elements startLocations = doc.select("#mestopreuzimanja > option");

// display locations
for (Element startLocation : startLocations) {
    System.out.println(startLocation.text());
}

尝试使用与startLocations相同的方法选择第三个下拉列表(目标位置)的值。