[PHP] Skrapowanie obrazków |
[PHP] Skrapowanie obrazków |
12.07.2016, 17:31:47
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
Witajcie! Próbuję stworzyć funkcję, która zwróci główne obrazki ze strony http://jbzd.pl. TYLKO główne obrazki, nie jakieś loga czy inne pierdoły. Niestety mój twór wywala kilka błędów. Zerknijcie, proszę, na te hieroglify i powiedzcie, co w nich nie gra.
|
|
|
12.07.2016, 17:52:19
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) |
Podzielisz się z nami treścią tych błędów?
-------------------- |
|
|
12.07.2016, 17:59:54
Post
#3
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
Oczywiście, oto te straszydła:
Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 35 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Warning: DOMDocument::loadHTML(): Unexpected end tag : script in Entity, line: 220 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Warning: DOMDocument::loadHTML(): Unexpected end tag : script in Entity, line: 226 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 487 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 487 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Warning: DOMDocument::loadHTML(): Tag video invalid in Entity, line: 554 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Warning: DOMDocument::loadHTML(): Tag source invalid in Entity, line: 555 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Warning: DOMDocument::loadHTML(): Unexpected end tag : p in Entity, line: 800 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Warning: DOMDocument::loadHTML(): Unexpected end tag : p in Entity, line: 816 in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 20 Catchable fatal error: Object of class DOMNodeList could not be converted to string in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 28 |
|
|
12.07.2016, 18:19:16
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Kod $content = file_get_contents('http:/...');
preg_match_all('/image rolled.*?src="(.*?)"/s', $content, $match); var_dump($match); Ten post edytował Pyton_000 12.07.2016, 18:19:25 |
|
|
13.07.2016, 19:19:39
Post
#5
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
Poprawiłam mój kod. Chciałabym teraz, żeby powstała tablica ze wszystkimi ścieżkami oraz info, czy jest to jpg, czy gif, bo teraz pojawia się tylko wskaźnik (liczba obrazków). Podpowiedzcie, proszę, jak to zrobić. Będę wdzięczna
|
|
|
13.07.2016, 21:00:03
Post
#6
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 49 Dołączył: 12.04.2010 Ostrzeżenie: (0%) |
Funkcja substr($src, -3);
Pobiera ostatnie 3 znaki atrybutu src (rozszerzenie pliku). Możnaby też explode z kropką i wtedy ostatni ciąg. -------------------- Pozdrawiam,
mlawnik Cytat(nospor) Jedzmy gówno.... miliony much nie może się przecież mylić |
|
|
13.07.2016, 21:16:38
Post
#7
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
|
|
|
14.07.2016, 06:13:32
Post
#8
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 49 Dołączył: 12.04.2010 Ostrzeżenie: (0%) |
Lepiej nie rozumieć i zapytać o wyjaśnienie niż nie rozumieć i błądzić
Funkcja substr zwraca część ciągu podanego jako argument. Skoro masz już adres obrazka, można wyciągnąć jego rozszerzenie.
Tu uruchomione: https://3v4l.org/fOdBM Albo też możemy użyć funkcji explode, która dzieli ciąg w miejscu gdzie znajduje się podany znak:
Tu uruchomione: https://3v4l.org/oHe33 Mam nadzieję że teraz na przykładzie wyda się to prostsze. Jeżeli umiesz angielski to polecam szukać w google i na stackoverflow, a jak Ci się nie uda, to zapraszamy z powrotem tutaj . -------------------- Pozdrawiam,
mlawnik Cytat(nospor) Jedzmy gówno.... miliony much nie może się przecież mylić |
|
|
14.07.2016, 12:47:43
Post
#9
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
Dziękuję za wyjaśnienie i pomoc, Przyjacielu! Mniej więcej o coś takiego mi chodziło, chciałabym jednak, żeby wyrzuciło mi na ekran tablicę ze wszystkimi plikami z rozszerzeniem .gif i .jpg, do których prowadzi ścieżka $src, oraz info o na ich temat - że gif to gif, a jpg to jpg. Zaczęłam więc kombinować z wyrażeniami regularnymi, ale pozytywnego efektu narazie brak. Stworzyłam coś takiego, ale nie wiem czy mój tok rozumowania jest słuszny i czy ma choć trochę sensu :/
|
|
|
14.07.2016, 13:09:22
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
-------------------- |
|
|
14.07.2016, 13:23:53
Post
#11
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
Niestety rezultat jest podobny do tego z mojego kodu. Czyli wypluwa tablicę z liczbą elementów, bez ścieżek do obrazków i bez informacji, czy to jpg, czy gif…
|
|
|
14.07.2016, 13:28:25
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Tyle, że tym zapytaniem nie zastąpisz tego o czym piszesz, ale wyciągasz tylko jpg i gif.
Po nim stosujesz foreach, który podałaś wyżej, a w nim wystarczy sprawdzić czy rozszerzenie to jpg, jeśli nie to gif (przykład podał mlawnik). -------------------- |
|
|
14.07.2016, 13:49:06
Post
#13
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
No, teraz wszystko pięknie śmiga. Dzięki za pomoc i cierpliwość, Chłopaki
|
|
|
14.07.2016, 17:18:48
Post
#14
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 49 Dołączył: 12.04.2010 Ostrzeżenie: (0%) |
Takim osobom jak ty przyjemnie się pomaga, dlatego że potrafią czytać ze zrozumieniem i wytłumaczyć o co im chodzi
-------------------- Pozdrawiam,
mlawnik Cytat(nospor) Jedzmy gówno.... miliony much nie może się przecież mylić |
|
|
15.07.2016, 15:47:39
Post
#15
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
Miło mi to słyszeć Raz jeszcze, z całego serduszka, dziękuję za pomoc
Myślałam, że dalej dam sobie radę sama, ale za cienka jestem jeszcze w kodzie, by nie zadawać głupich pytań. Założyłam, że mój skrypt będzie sprawdzał, czy obrazek to .jpg czy nie, dlatego w wyrażeniu regularnym tylko .jpg uwzględniłam. Dodatkowo chciałabym, żeby mój skrypt pobrał wszystkie obrazki z 5 stron i zapisał je na dysku oraz informację, czy są jpg. Wiem, że w poniższym kodzie jest bajzel i wszystko źle, ale uczę się dopiero i jeszcze błądzę, dlatego tak często szukam pomocy. Z góry bardzo dziękuję za rady, jak to ugryźć, żeby działało
EDIT: Już chyba wszystko ogarnęłam, poza jednym. Za nic nie potrafię stworzyć pętli, która będzie powtarzać wyżej wymienione operacje między stroną główną a piątą podstroną. Nie mam pojęcia, jak inkrementować adres… :/ Ten post edytował wiedzma92 15.07.2016, 15:48:45 |
|
|
15.07.2016, 16:27:46
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) |
-------------------- |
|
|
16.07.2016, 12:58:02
Post
#17
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
Niestety ten sposób nie działa, wywala mi milion warningów tego typu: Warning: DOMDocument::loadHTML(): Empty string supplied as input in /Applications/XAMPP/xamppfiles/htdocs/img.php on line 22
Zaraz pokręci mnie przy tym skrypcie. Powiedzcie, mi proszę, co w tym fragmencie kodu nie gra, że obrazki nie chcą pobrać się na dysk, tylko to cholerstwo mi wyskakuje: „Warning: file_put_contents(/Users/agnieszka/Downloads/): failed to open stream: Is a directory in /Applications/XAMPP/xamppfiles/htdocs/img.php”. Wrzucam tylko foreach, bo reszta kodu jest bez zmian
Ten post edytował wiedzma92 16.07.2016, 12:59:24 |
|
|
16.07.2016, 13:22:43
Post
#18
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) |
W funkcji file_get_contents musisz podać url obrazka tj. $src a nie 'http://jbzd.pl/obr/'.
W file_put_contents podajesz pełną ścieżkę wraz z nazwą pliku, albo samą nazwe pliku żeby zapisać do tego samego folderu gdzie jest skrypt. -------------------- |
|
|
16.07.2016, 13:33:11
Post
#19
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 17.03.2016 Ostrzeżenie: (0%) |
Pozmieniałam to, oczym wspomniałeś. Teraz pojawia się inny komunikat: „Warning: file_put_contents(/Applications/XAMPP/xamppfiles/htdocs/img.php): failed to open stream: Permission denied in /Applications/XAMPP/xamppfiles/htdocs/img.php”.
Skrypt wygląda teraz tak:
|
|
|
16.07.2016, 13:49:35
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) |
Ok. A więc jeszcze raz, file_put_contents zapisuje do pliku podanego w 1 argumencie, zawartość która jest w 2 argumencie. W 2 argumencie tj. $con masz zawartość obrazka i chcesz go zapisać do skryptu PHP o nazwie scrap_img.php? Raczej nie.
Utwórz sobie katalog o nazwie images zaraz obok pliku scrap_img.php a następnie zmień argument tej funkcji na: Co oznacza: dirname(__FILE__) - ścieżka do tego pliku, u Ciebie będzie to "(.....)/XAMPP/xamppfiles/htdocs/" images/ - nowo utworzony katalog images do którego chcesz zapisać te obrazki uniqid() - losowa nazwa obrazka, unikalna $ext - rozszerzenie obrazka Ten post edytował markuz 16.07.2016, 13:51:52 -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 06:57 |