/ / curl php scraping przez zadanie cron co minutę na Shared hosting - php, curl, cron, skrobanie ekranu, zadania

zwijaj skrobanie php przez cron co minutę na Shared hosting - php, curl, cron, skrobanie ekranu, zadania

Mam trudny problem. Jestem na podstawowym hostingu współdzielonym. Stworzyłem dobry skrypt do skrobania za pomocą curl i php.

Ponieważ wielowątkowość z Curlem nie jest tak naprawdęwielowątkowość, a nawet najlepsze skręcone wielowątkowe skrypty, których użyłem, przyspieszają o 1,5-2 skrobanie, doszedłem do wniosku, że muszę uruchamiać ogromną ilość zadań crona (np. 50) na minutę na moim php skrypt, który współdziała z tabelą mysql, aby oferować moim klientom szybki przegląd stron internetowych.

Mój problem polega na tym, że dostaję „serwer Mysql odszedł”, gdy uruchomionych jest wiele zadań Cron. Jeśli zmniejszę liczbę zadań crona, będzie nadal działać, ale zawsze będzie działać wolno.

Wypróbowałem także rozwiązanie oparte na przeglądarceprzeładowanie skryptu za każdym razem, gdy skończy się czas. Działa lepiej, ale zawsze ten sam problem: gdy zdecyduję się uruchomić 10 razy skrypt w tym samym czasie, zaczyna on przeciążać serwer mysql lub serwer WWW (nie wiem)

Aby rozwiązać ten problem, nabyłem serwer mysql, na którym mogę ustawić my.cnf ... ale problem pozostaje w przybliżeniu taki sam.

========= MOJE PYTANIE BRZMI : GDZIE PROBLEM JEST NADCHODZONY? ROZMIAR TABELI ? POTRZEBUJĘ DUŻYCH SERWERÓW DEDYKOWANYCH 100MBPS. JEŚLI TAK, CZY JESTEŚ NA PEWNO ROZWIĄZANY PROBLEM I JAK SZYBKO JEST? POZNAJĄC CHCĘ, ABY EKSTRAKCJA PRĘDKOŚCI ZOSTAŁA PRZEKROCZONA DO OKREŚLONO 100 URLERÓW NA SEKUNDĘ (w tym czasie jest to 1 URL na 15 sekund, niewiarygodnie powoli ...)

  • W skrypcie jest tylko jedna chwila. Ładuje wszystkie dane dotyczące strony i dopasowania wstępnego lub domeny i wstawia do bazy danych mysql.

  • Wyodrębniam wiele danych, dlatego tabelaszybko zawierają miliony wpisów ... ale kiedy je usuwam, może idzie to nieco szybciej, ale zawsze jest to ten sam problem: niemożliwe jest masowe uruchamianie zadań równolegle w celu przyspieszenia procesu.

  • Nie sądzę, że problem pochodzi z mojego skryptu. We wszystkich przypadkach, nawet zoptymalizowanych idealnie, nie pójdę tak szybko, jak chcę.

  • Korzystając ze skryptu z dodatkami proxy do skrobania, różnica jest bardzo mała ... nieistotna ..

Mój wniosek jest taki, że muszę użyć dedykowanegoserwer, ale nie chcę inwestować jak 100 $ miesięcznie, jeśli nie jestem pewien, czy to rozwiąże problem i będę mógł bez problemu uruchomić te ogromne ilości zadań / wywołań cron na mysql db.

Odpowiedzi:

0 dla odpowiedzi № 1

To takie proste ... nigdy nie wysyłaj wielowątkowości na ten sam adres URL. Może to być wiele różnych adresów URL. Spróbuj jednak przestrzegać pewnego limitu czasu. Możesz to zrobić za pomocą:

sleep($random);  $random = random(15, 35) ; // in seconds

0 dla odpowiedzi nr 2

Musiałbym zobaczyć kod, ale zasadniczo wygląda to tak, jakbyś był ograniczony przez swojego hosta.

Czy można uruchomić crona raz na minutę lub dwie, ale wsadzić skrypty na jedno połączenie SQL w skrypcie?

Zasadniczo celem byłoby jednokrotne otwarcie gniazda sql i uruchomienie wielu przerysowań adresów URL na łączu a bieżącym jednym zeskrobaniem na mysql.

Pseudo kod:

<?php
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
$sql = "SELECT url FROM urls_table WHERE scraped="0" LIMIT 100";
$result = mysqli_query($link, $sql);
while($row = mysqli_fetch_array($result, MYSQLI_NUM)){
$url_to_scrape = $row[0];
//TODO: your scrape code goes here
}
//Only AFTER you"ve scraped multiple URLs do we close the connection
//this will drastically reduce the number of SQL connects and should help
mysqli_close($link);
?>