Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[PHP] Pobieranie danych z innych stron.

Ostatnio zmodyfikowano 2017-06-23 02:20
Autor Wiadomość
Capitan
Temat założony przez niniejszego użytkownika
[PHP] Pobieranie danych z innych stron.
» 2017-06-12 14:44:38
Ahoj, chce pobrać konkretne dane z pewnej strony, lecz wyskakuje mi bład :<
Kod przeszukuje ranking (100 pozycji na każdej stronie).
$k - odpowiada za strone
$j - wiersz w tabeli
for ($k = 44; $k < 56; $k++) {
    $html2 = file_get_html("http://www.blablablablabla=$k");
    for ($j = 0; $j < 100; $j++) {
        $nick_nr = 6 * ($j) + 1;
        $nick_spr = $html2->find(".row1 td", $nick_nr)->innertext;
        if ($nick_spr == $nick_b) {
            echo "<td width='150px'; align='center'>" . $nick_spr . "</td>";

        }
    }
}
Wywala błąd:
Fatal error: Maximum execution time of 10 seconds exceeded in /virtual/blablabla/simple_html_dom.php on line 643
Pomoże ktoś? Jak to usunąć, albo może ktoś podpowie jak to zrobić inaczej.

Rozumiem, że błąd wywala, ponieważ za długo skrypt działa. Co zrobić, żeby można było przeszukiwać dużo stron w miarę szybkim czasie? Jakieś pomysły? Ktoś pomoże?
P-162413
hit
» 2017-06-12 15:08:36
To jest limit ustawiony na serwerze. Jeśli masz serwer postawiony lokalnie to możesz w jego ustawieniach pogrzebać i to zmienić ( podaj nazwę ). Jeśli korzystasz z hostingu to może być z tym problem.
P-162416
bombatom69
» 2017-06-12 15:49:38
Rozumiem, że błąd wywala, ponieważ za długo skrypt działa. Co zrobić, żeby można było przeszukiwać dużo stron w miarę szybkim czasie?

Skorzystać ze środowiska nieopartego na języku skryptowym do tego masz server-side ograniczony czasem wykonywania. Wyszukiwarki internetowe również nie przygotowują danych w ten sposób. Dane zbierają boty a wyszukiwarka tylko z nich korzysta.

Przeszukujesz dwie strony w jednym wywołaniu - nie wiem czy tak miało być.

Wracając do początku: rozumiem, że chodzi o Simple HTML DOM Parser?
Nie widzę w dokumentacji takiego wyszukiwania "po klasie" jakie próbowałeś wstawić.
Klasa to także atrybut:
td[class=row1]

"index" to indeks dopasowania.

Jednak ogólnie pobieranie zawartości innych stron to nie jest coś co można sobie robić masowo w php.
P-162419
Capitan
Temat założony przez niniejszego użytkownika
» 2017-06-19 12:27:21
A co pozwoli mi masowo wyciągać coś z innych stron? Skoro nie php? Ktoś coś poleci?
P-162671
SeaMonster131
» 2017-06-19 17:24:37
Pobieranie treści stron trwa dość długo, dlatego skrypt przekracza maksymalny czas wykonywania skryptu, który jest ustawiony na serwerze w tym przypadku 10 sekund.
Dodaj na początku skryptu
set_time_limit(0);
, aby zlikwidować ten limit.

Pamiętaj, że strona, którą odpytujesz może wywalać Ci błąd, jeżeli z taką szybkością będziesz ją odpytywać, dlatego dodałbym tam jeszcze jakiegoś sleepa:
http://php.net/manual/en​/function.sleep.php
http://php.net/manual/en​/function.usleep.php
P-162686
Capitan
Temat założony przez niniejszego użytkownika
» 2017-06-19 22:20:12
function get_data($url)   
{   
$ch = curl_init();   
$timeout = 5;   
curl_setopt($ch,CURLOPT_URL,$url);   
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);   
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);   
$data = curl_exec($ch);   
curl_close($ch);   
return $data;   
}  

function foundYorN($x, $y)
{
if(strstr($x,$y))
{
echo "found it.";
}
else
{
echo "not found.";
}
}

$returned_content = get_data('http://www.lolking.net/summoner/euw/44191281/Koorteo');  
$string = "<title>";
$container = $returned_content;

foundYorN($container,$string);


preg_match('#<title>(.+?)</title>#i',$container, $matches);
echo "<br><br>".$matches[1];


Takie coś na sprawdzenie czy na danej stronie występuje dany fragment i wyciągnięcie go.
Dlaczego jak wpisuje
<div class='summoner-rank'>
 to wyskakuje "not found"  mimo że na stronie jest taki div i chiłbym wyciągnąć zawartość właśnie z niego.
P-162705
Elaine
» 2017-06-20 11:09:06
Dlaczego jak wpisuje
<div class='summoner-rank'>
 to wyskakuje "not found"
Bo w kodzie strony jest <div class="summoner-rank">. Między innymi dlatego do wyciągania danych z dokumentów HTML lepiej użyć Document Object Model zamiast wyszukiwania stringów.



Widzę, że kolega jest z najwspanialszej ligi we wszechświecie?
P-162712
Capitan
Temat założony przez niniejszego użytkownika
» 2017-06-20 12:01:28
Oczywiście, że najwspanialsza :)
Wiec lepiej całkowicie olać preg_match_all? Czy czym lepiej to robić?

Wstawiając
'<div class="">'

Też nie wyszukuje :C
P-162713
« 1 » 2
  Strona 1 z 2 Następna strona