我在网页抓取方面遇到问题。我想做的是这样的:
我有这个网站: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 的标题和评级显示我是正确的。
最佳答案
您的选择器可以调整。当您可以使用特定 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 相同的方式选择第三个下拉列表(目标位置)的值。
关于java - 如何从网页上抓取一些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57380628/