我在抓取网页时遇到问题。我想做的是这样:
我有这个网站: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的标题和等级显示正确。
答案 0 :(得分:0)
可以调整您的选择器。当您可以使用特定ID时,请勿按类别选择。在这里,您可以因为所需的select
具有唯一的名称和ID <select name="car" id="carlist" ... >
,所以它们中的任何一个都是更好的选择。
这样,您还可以避免for
循环,该循环当前仅循环一个元素,因为类inner-form__elements
只有一个元素。
您的第二个选择器.select-vehicle
也太笼统,选择太多。这样,text()
将其包含的所有内容作为一个字符串返回。要仅获取选项,您必须选择option
内select
等于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相同的方法选择第三个下拉列表(目标位置)的值。