我最近阅读了一篇由example发布的使用jsoup的BalusC。
他的代码:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class test{
public static void main(String[] args) throws Exception {
String url = "https://stackoverflow.com/questions/2835505";
Document document = Jsoup.connect(url).get();
String question = document.select("#question .post-text").text();
System.out.println("Question: " + question);
Elements answerers = document.select("#answers .user-details a");
for (Element answerer : answerers) {
System.out.println("Answerer: " + answerer.text());
}
}
}
代码就像一个魅力,看起来非常简单,但我不知道如何修改它,以便从here获得最便宜的轮胎价格。我该怎么做?
答案 0 :(得分:2)
尝试:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class test{
public static void main(String[] args) throws Exception {
String url = "http://www.mimovrste.com/letne-avtomobilske-pnevmatike?p-min=31.65&p-max=348.35&o=_price";
Document document = Jsoup.connect(url).get();
Elements prices = document.select(".lst-product-item-price");
for (Element price : prices) {
System.out.println("Price: " + price.text());
}
}
}
答案 1 :(得分:1)
我想这个问题还有更多。 Pisek的逻辑是正确的,类lst-product-item-price
给出了所有价格的列表,但它只给出了一页中的列表。在这种情况下,我们有27页。它也有不同的排序顺序。因此,您可能需要浏览所有页面,然后找到最便宜的页面。
但是,我想知道为什么我们需要在这里解析html?相关网址为http://www.mimovrste.com/letne-avtomobilske-pnevmatike?p-min=31.65&p-max=348.35&o=_price
。这本身就是最低价和最高价。因此,可以立即从URL字符串中解析结果。
假设您需要未过滤列表的结果,那么您需要在没有任何最小或最大限制的情况下找到最便宜的结果。假设您只想输入http://www.mimovrste.com/letne-avtomobilske-pnevmatike
来获得限制,那么实现此目的有两个技巧。
首先(最简单)
注意右侧的菜单,上面写着" Cena"意思"价格"。该字段默认为最小值和最大值。即使您使用以前的网址,这也适用。如果您检查html,则显示该值存储在隐藏字段和名称为" p-min"的文本字段中。因此,选择名称属性为name="p-min"
的输入,这是您最便宜的值。这种方法的优点是它提供了一个直接的十进制值,并且转换为double是直接的。
cheapest = doc.select("input[name=p-min]").first().attr("value");
<强>第二强>
注意网址。排序顺序以&#39; o命名。因此,如果您在网址中说o=price
,则会根据价格按升序对列表进行排序,如果您将其设为o=_price
,则会按价格降序排列。所以传入一个参数&#34; o&#34;有价值的&#34; _price&#34;正如Pisek所说,选择第一个lst-product-item-price
的值会给你最便宜的价值。这将给出一个带逗号和€符号的String值。
doc = Jsoup.connect(URL).data("0", "_price").get();
cheapest = doc.select("b.lst-product-item-price").first().text();
全部放在一起
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class TyrePrice {
public static void main(String[] args) {
try {
String URL = "http://www.mimovrste.com/letne-avtomobilske-pnevmatike";
Document doc = Jsoup.connect(URL).get();
// Approach 1
String cheapest = doc.select("input[name=p-min]").first().attr("value");
System.out.println(cheapest); // Prints 31.65
// Approach 2
doc = Jsoup.connect(URL).data("0", "_price").get();
cheapest = doc.select("b.lst-product-item-price").first().text();
System.out.println(cheapest); // Prints 31,65 €
} catch (IOException e) {
e.printStackTrace();
}
}
}
希望这会有所帮助。 :)