Получить данные с веб-сайта с Java - PullRequest
2 голосов
/ 27 июля 2011

Я пытался получить некоторые данные с сайта Amazon с помощью этого кода:

public class Bot {

    public static void main(String[] args) throws IOException {

        BufferedReader buff;
        InputStreamReader inStream;
        String htmlCode = null;
        try{
            URL url = new URL("http://www.amazon.it/gp/bestsellers/electronics/473246031/ref=s9_dnav_bw_ir12_z?pf_rd_m=A11IL2PNWYJU7H&pf_rd_s=center-1&pf_rd_r=1VC27Z69NFM1FJAR2YNY&pf_rd_t=101&pf_rd_p=245982287&pf_rd_i=412609031");
            URLConnection urlConnection = (URLConnection)url.openConnection();



            inStream = new InputStreamReader(urlConnection.getInputStream());
            buff = new BufferedReader(inStream);

            while(true){
                if (buff.readLine()!=null){
                    htmlCode += buff.readLine() + "\n";
                }else{
                    break;
                }
            }

            int startFrom = htmlCode.indexOf("<div class=\"zg_rank\">");
            int endFrom = htmlCode.indexOf("</div>");

            String idNumber = htmlCode.substring(startFrom, endFrom);

            System.out.println(idNumber);
        }catch(Exception e){};  

    }

}

Так что я не так сделал?Как я могу это исправить?

Ответы [ 3 ]

3 голосов
/ 30 декабря 2012

Нет, мой друг, ваш код правильный. Однако экземпляр строки не может содержать всю страницу. Вот как вы указываете от начала до конца вашего div:

boolean CodeNeeded = false;

while ((line = br.readLine()) != null) {
    // Here I Point on the beginig of the Code needed
    if(line.contains("<div class=\"zg_rank\">")){
        CodeNeeded = true;
    }

    // Here I Point on the End of the Code needed
    if (line.contains("</div>")) {
        CodeNeeded = false;
    }        
    // If the Code is needed Stored it in DivWanted
    if(CodeNeeded) {
        DivWanted += line + "\n";
    }    
} 
0 голосов
/ 27 июля 2011

Может быть, вам нужно попробовать что-то подобное:

int startFrom = htmlCode.indexOf("<div class=\"zg_rank\">");
int endFrom = htmlCode.indexOf("</div>", startFrom);

Чем вы ищете первый </div> внешний вид после <div class="zg_rank">.

0 голосов
/ 27 июля 2011

Я пытаюсь использовать телепатию, и я думаю, что это сработало!

Я думаю, что ваша проблема в endFrom. Попробуйте это:

int endFrom = htmlCode.lastIndexOf("</div>"); // lastIndexOf, not indexOf

В противном случае вы получите только первый </div>

РЕДАКТИРОВАНИЕ:

Чтобы получить следующий </div> после вашего запуска, используйте это:

int endFrom = htmlCode.indexOf("</div>", startFrom); // Add 2nd parameter
...