Parsowanie informacji.

0

index.php

<?php
include_once('libs/SQL.php');
include_once('libs/curl_query.php');
include_once('libs/simple_html_dom.php');


$html = curl_get('https://vk.com/mudachyo');
$dom = str_get_html($html);
$courses = $dom->find('.post_date');

foreach ($courses as $cours){
    $a = $cours->find('a',0);
    $url = str_replace('/','',$a->href);

    $one = curl_get('https://vk.com/mudachyo?w='.$url);
    $one_dom = str_get_html($one);
   $like = $one_dom->find('.post_full_like',0);
   echo $like->plaintext.'<br>';
}
``````php

curl_query.php

<?php
    function curl_get($url, $refer = 'http://www.google.com'){
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        $data=curl_exec($ch);
        curl_close($ch);
        return $data;
}
``````php

Pokazuje:

4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies 
4,215 Show likes 79 Show shared copies
``````php

Problem polega na tym, jak zrobić, żeby wyciągało like (numer) z innych bloków, a nie z tego samego.
Przykład:

    4,215 Show likes 79 Show shared copies 
    637   Show likes 79 Show shared copies 
    220 Show likes 79 Show shared copies 
    520 Show likes 79 Show shared copies 
    840 Show likes 79 Show shared copies 
    700 Show likes 79 Show shared copies 
    900 Show likes 79 Show shared copies 
``````php

Nie mogę znaleźć błąd. Zmienna $one jest co raz inna, a parsuje tylko z pierwszej strony.

1

Pytając o ścianę w ten sposób https://vk.com/mudachyo?w=xxxxxxxxx , prosisz serwer o wyświetlenie konta użytkownika mudachyo. A następny parametr zdaje się że jest obsługiwany przez js i wyświetlany jest popup. W efekcie w pętli prosisz zawsze o tę samą stronę. Wyrzuciłem zbędne rzeczy i otrzymałem następujący wynik:

4,242 Show likes 80 Show shared copies 
40 Show likes 1 Show shared copies 
262 Show likes 17 Show shared copies 
742 Show likes 29 Show shared copies 
1,254 Show likes 63 Show shared copies 
1,136 Show likes 31 Show shared copies 
948 Show likes 59 Show shared copies 
4,005 Show likes Show shared copies 
1,381 Show likes 57 Show shared copies 
745 Show likes 15 Show shared copies 

Kod wygląda następująco.

$html = $this->curl_get('https://vk.com/mudachyo');
        $dom = HtmlDomParser::str_get_html($html);
        $courses = $dom->find('.post_date');

        foreach ($courses as $cours){
            $a = $cours->find('a',0);

            $one = $this->curl_get('https://vk.com'.$a->href);
            $one_dom = HtmlDomParser::str_get_html($one);
            $like = $one_dom->find('.post_full_like',0);
            echo $like->plaintext.'<br>';
        }

0
Wave21 napisał(a):

Pytając o ścianę w ten sposób https://vk.com/mudachyo?w=xxxxxxxxx , prosisz serwer o wyświetlenie konta użytkownika mudachyo. A następny parametr zdaje się że jest obsługiwany przez js i wyświetlany jest popup. W efekcie w pętli prosisz zawsze o tę samą stronę. Wyrzuciłem zbędne rzeczy i otrzymałem następujący wynik:

4,242 Show likes 80 Show shared copies 
40 Show likes 1 Show shared copies 
262 Show likes 17 Show shared copies 
742 Show likes 29 Show shared copies 
1,254 Show likes 63 Show shared copies 
1,136 Show likes 31 Show shared copies 
948 Show likes 59 Show shared copies 
4,005 Show likes Show shared copies 
1,381 Show likes 57 Show shared copies 
745 Show likes 15 Show shared copies 

Kod wygląda następująco.

$html = $this->curl_get('https://vk.com/mudachyo');
        $dom = HtmlDomParser::str_get_html($html);
        $courses = $dom->find('.post_date');

        foreach ($courses as $cours){
            $a = $cours->find('a',0);

            $one = $this->curl_get('https://vk.com'.$a->href);
            $one_dom = HtmlDomParser::str_get_html($one);
            $like = $one_dom->find('.post_full_like',0);
            echo $like->plaintext.'<br>';
        }

Czy można zrobić tak, żeby parsowało więcej postów, a nie dziesięć?

0

Nie jestem jakimś specjalistą od vk. Kolejne posty zaczytywane są za pomocą js. Masz dwa rozwiązania: możesz próbować analizować ich js i sprawdzić jakie zapytania wychodzą do serwera albo możesz po prostu skorzystać z ich api.

1 użytkowników online, w tym zalogowanych: 0, gości: 1