Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jsoup从网站获取所需信息_Java_Jsoup_Web Crawler - Fatal编程技术网

Java 使用jsoup从网站获取所需信息

Java 使用jsoup从网站获取所需信息,java,jsoup,web-crawler,Java,Jsoup,Web Crawler,我最近读了一篇关于使用jsoup的文章,作者是 他的代码: 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

我最近读了一篇关于使用jsoup的文章,作者是

他的代码:

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());
        }
    }
}
代码就像一个符咒,看起来非常简单,但是我不知道如何修改它,以便从中获得最便宜的轮胎价格。我该怎么做呢?

试试:

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());
        }
    }
}

我想这个问题还有很多。Pisek的逻辑是正确的。class
lst product item price
给出了所有价格的列表,但它只在一页中给出了列表。在这种情况下,我们有27页。它也有不同的排序顺序。因此,您可能需要浏览所有页面,然后找到最便宜的

但是,我想知道为什么我们需要对html进行解析?正在讨论的URL是
http://www.mimovrste.com/letne-avtomobilske-pnevmatike?p-最小值=31.65&p-max=348.35&o=\u价格
。这本身就是最低和最高价格。因此,可以立即从URL字符串解析结果

假设您需要一个未筛选列表的结果,也就是说,您需要找到所有列表中最便宜的,没有任何最小值或最大值限制的列表。假设您只需键入
http://www.mimovrste.com/letne-avtomobilske-pnevmatike
,那么有两个技巧可以实现这一点

第一(最简单)

注意右边的菜单,上面写着“Cena”,意思是“价格”。该字段默认为最小值和最大值。即使您使用以前的url,这也是适用的。如果您检查html,它会显示该值存储在一个隐藏字段和一个名为“p-min”的文本字段中。因此,选择一个名称属性为
name=“p-min”
的输入,这是最便宜的值。这种方法的优点是它提供了一个直接的十进制值,而到double的转换是直接进行的

cheapest = doc.select("input[name=p-min]").first().attr("value");

请注意url。排序顺序以“o”命名。因此,如果你在url中说
o=price
,它会根据价格按升序对列表进行排序,如果你给它的名称是
o=\u price
,它会给出价格的降序。因此,传入一个参数“o”,其值为“_price”,正如Pisek所说,选择first
lst product item price的值将为您提供最便宜的价格。这将给出一个带有逗号和欧元符号的字符串值

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();
        }
    }
}

希望这有帮助。:)

价格标签的类别似乎是“lst产品项目价格”。。因此,请使用“选择并解析数字”按钮获取所有数据:)你能告诉我,你从哪里得到的
.lst产品项目价格
?只需查看网站的html源代码。在Firefox中,你可以右键点击价格并点击“Inspect element”来获取所选元素的来源。先生,你是一个救生员。你能告诉我,你从哪里得到的
.lst产品项目价格
?你必须检查你想要的网页,找到想要的html标签的ID或CLASS属性。在Chrome中,只需输入一个网页,按Ctrl+Shift+C,然后在网页上选择所需的值。然后在最底部的栏上,您将看到这个特定元素的整个路径。只需复制它的最后一部分。欲了解更多信息,请访问