Не могу соскрести цену с сайта с Jsoup - PullRequest
1 голос
/ 26 июня 2019

У меня есть проект в колледже, в котором мне нужно создать программное обеспечение, которое отслеживает цены на товары на основе URL-адресов, которые должен ввести пользователь (в настоящее время только с Banggood.com).

Я только начал узнавать о том, как собирать информацию с веб-сайтов, поэтому мне удалось это сделать, и я застрял в самом начале. Мне удалось отменить название предмета, но безуспешно сделать это с ценой предмета. Я загружаю свой текущий код.

Мне не удалось получить нужную информацию ни с сайта Jsoup, ни с Google

import java.io.IOException;
import java.util.Scanner;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class ProjectLearning 
{
    public static void main(String args[])
    {
        Scanner scan = new Scanner(System.in);

        print("Please enter your item URL: ");
        String userUrl = scan.next();
        print("Give me a sec..");

        Document document;
        try {
            //Get Document object after parsing the html from given url.
            document = Jsoup.connect(userUrl).get();

            String title = document.title(); //Get title
            print("Item name: " + title); //Print title.

            //Get price
            Elements price = document.select("div#item_now_price");

            for (int i=0; i < price.size(); i++) 
            {
                print(price.get(i).text());
            }

        } catch (IOException e) 
        {
            e.printStackTrace();
        }
        print("There you go");
    }

    public static void print(String string) {
        System.out.println(string);
    }
}

Выход:

Please enter your item URL: 
https://www.banggood.com/3018-3-Axis-Mini-DIY-CNC-Router-Standard-Spindle-Motor-Wood-Engraving-Machine-Milling-Engraver-p-1274569.html?rmmds=flashdeals&cur_warehouse=CN

Give me a sec..

Item name: 3018 3 axis mini diy cnc router standard spindle motor wood engraving machine milling engraver Sale - Banggood.com

1 Ответ

2 голосов
/ 26 июня 2019

Это потому, что вы получаете элемент с id item_now_price, а не class .

При просмотре введенного вами URL, элемент сцена выглядит следующим образом:

<div class="item_now_price" oriattrmin="0" oriattrmax="0" noworiprice="149.9" oriprice="149.9" oriprice3="146.7" oriprice10="145.16" oriprice30="143.64" oriprice100="142.11">US$149.90</div>

Правильный селектор должен быть Elements price = document.select("div.item_now_price");

Смотрите https://jsoup.org/cookbook/extracting-data/selector-syntax, чтобы узнать больше о селекторах.

Обновление: Итак, я посмотрел в вашем коде и причина, по которой вы не получаете цену в качестве вывода, заключается в том, что цена загружается через другой запрос Ajax.К сожалению, jSoup здесь не может вам помочь.

Для получения дополнительной информации просмотрите этот ответ: Получение содержимого (загруженного посредством вызова AJAX) веб-страницы

...