Jsoup не может извлечь цену акций из веб-страницы - PullRequest
0 голосов
/ 02 июля 2011

Я использую Jsoup для извлечения цены акций с сайта биржевой торговли.Цена акций обновляется автоматически через равные промежутки времени.Я пытался использовать примеры, приведенные в кулинарной книге, но не получилось, пожалуйста, помогите мне ...

Вот то, что я пробовал ...

import java.io.IOException;

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


public class sup {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String url="http://money.rediff.com/companies/selan-exploratio/17020281";
        Document doc = Jsoup.connect(url).get();
        String quote = doc.select("#ltpid .f22 span").first().text();
        System.out.println(quote);
    }
}

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Кажется, что цена акции хранится в промежутке с идентификатором ltpid. Таким образом, достаточно использовать селектор #ltpid. Ваш селектор пытается найти диапазон, у которого есть предок с классом .f22, у которого есть предок с идентификатором ltpid.

Прочитайте http://jsoup.org/apidocs/org/jsoup/select/Selector.html для объяснения селекторов.

EDIT:

Однако у вас есть вторая проблема: этот диапазон не находится в загруженном вами документе. Он находится внутри iframe со следующим URL: http://money.rediff.com/money1/current_stat.php?companyCode=17020281.

Попробуйте использовать этот URL вместо того, который вы используете, и он будет работать.

0 голосов
/ 02 июля 2011
     public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        Document doc = Jsoup.connect("http://money.rediff.com/companies/selan-exploratio/17020281").get();
        String javaScript = doc.select(".m_sectionright script").first().toString();
        String regStr = "iValue\\s*=\\s*\\d+\\.?\\d*";
        Pattern p = Pattern.compile(regStr);
        Matcher matcher = p.matcher(javaScript);
        while (matcher.find()) {
              System.out.println(matcher.group().replace("iValue = ",""));
              break;
        }
    }

Самый простой способ - получить его из блока javascript.

...