Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobranie elementu h1
Destrudo
post
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Hej,

Próbuję pobrać zawartość nagłówka h1 ze źródła strony i nie bardzo mam pomysł. simpledomparser odpada, bo nie jest w stanie pobrać niektórych stron, w związku z czym, chciałem pobrać to ze źródła:

Pobieranie źródła:
  1. $strona = 'example.com';
  2. $datax = file_get_contents('http://'.$strona.'/');
  3. $zrodlo = htmlspecialchars($datax);


Teraz chciałbym pobrać zawartość znajdującą się w zmiennej $zrodlo, pomiędzy "<h1" a "</h1>" (pewnie trzeba użyć encji). Nie mam pomysłu jak wziąc to, co jest pomiędzy, w dodatku z wyłączeniem "class" bądź "style", jeśli nagłówek ma postać: <h1 class="">test</h1> lub <h1 style="">test</h1> lub <h1 style="" class="">test</h1>

Ten post edytował Destrudo 24.01.2017, 09:40:15
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Co to znaczy że nie jest w stanie pobrać stron? Żeby pobierać spoza filesystemu php musi być do tego skonfigurowane.
Go to the top of the page
+Quote Post
Destrudo
post
Post #3





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


A w jaki sposób to skonfigurować? Bo np poniższy plik:
  1. <?php
  2.  
  3. include('simple_html_dom.php');
  4.  
  5. $html = file_get_html('https://example.com');
  6.  
  7. //to fetch all hyperlinks from a webpage
  8. $links = array();
  9. foreach($html->find('a') as $a) {
  10. $links[] = $a->href;
  11. }
  12. print_r($links);
  13.  
  14. //to fetch all images from a webpage
  15. $images = array();
  16. foreach($html->find('img') as $img) {
  17. $images[] = $img->src;
  18. }
  19. print_r($images);
  20.  
  21. //to find h1 headers from a webpage
  22. $headlines = array();
  23. foreach($html->find('h1') as $header) {
  24. $headlines[] = $header->plaintext;
  25. }
  26. print_r($headlines);
  27. ?>

pobiera dobrze, a niektórych stron nie pobiera (nie wiem od czego to zależne). W jaki sposób powinienem skonfigurować simpledomparsera, aby pobierał każdą stronę?

Ten post edytował Destrudo 24.01.2017, 10:10:06
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Bo pewnie niektóre strony są oparte o FW po stronie frontendu.
Go to the top of the page
+Quote Post
Destrudo
post
Post #5





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


jest zatem jakaś szansa na pobranie <h1> z każdej strony?

np destrudo.pl ten parser nie chce pobrać
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jedyne h1 na tej stronie to #logo bez treści żadnej.
Go to the top of the page
+Quote Post
Destrudo
post
Post #7





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


no ok, tylko że parser nie podaje żadnej wartości - https://destrudo.pl/xx/h1.php (nie chce się w ogóle uruchomić)

Ten post edytował Destrudo 24.01.2017, 10:28:17
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jak masz internal server error i wyłączone błedy na ekranie to co ma podać?
Go to the top of the page
+Quote Post
Destrudo
post
Post #9





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Na stackoverflow znalazłem taki kod:
  1. <?php
  2. include('simple_html_dom.php');
  3. $base = 'https://destrudo.pl';
  4.  
  5. $curl = curl_init();
  6. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  7. curl_setopt($curl, CURLOPT_HEADER, false);
  8. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  9. curl_setopt($curl, CURLOPT_URL, $base);
  10. curl_setopt($curl, CURLOPT_REFERER, $base);
  11. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  12. $str = curl_exec($curl);
  13. curl_close($curl);
  14.  
  15. // Create a DOM object
  16. $html_base = new simple_html_dom();
  17. // Load HTML from a string
  18. $html_base->load($str);
  19.  
  20. //get all category links
  21. foreach($html_base->find('a') as $element) {
  22. echo "<pre>";
  23. print_r( $element->href );
  24. echo "</pre>";
  25. }
  26.  
  27. $html_base->clear();
  28. unset($html_base);
  29. ?>


który poprawnie podaje linki, więc jest już jakiś progres. Nie wiem tylko teraz jak go przerobić, aby podawał nagłówki h1
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Dokładnie tak samo jak dla a

  1. foreach($html_base->find('h1') as $element) {
  2. echo "<pre>";
  3. print_r( $element->plaintext );
  4. echo "</pre>";
  5. }
Go to the top of the page
+Quote Post
Destrudo
post
Post #11





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Dzięki wielkie, działa, a jeszcze takie pytanie, bo do destrudo pokazało się: "Your access to this site has been limited" - da się to jakoś obejść?
I drugie pytanko mam jeszcze, jak jesteśmy przy nagłówkach. Jak sobie wybiorę wszystkie h1-h6 i poukładam jeden pod drugim, dajmy na to:

h1 = qwe
h2 = qwe
h2 = qwer


itd., da się jakoś sprawdzić, czy każdy wyciągnięty nagłówek jest różny? (czy są unikalne)
Go to the top of the page
+Quote Post
ostrylg
post
Post #12





Grupa: Zarejestrowani
Postów: 144
Pomógł: 18
Dołączył: 11.12.2005
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Jezeli masz przypisane wszystkie naglowki do zmiennych to mozesz to sprawdzic za pomoca instrukcji if, ewentualnie stworzyc tablice i sprawdzic za pomoca funkcji in_array
Go to the top of the page
+Quote Post
Destrudo
post
Post #13





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Własnie nie do końca mam przypisane, bo np do jednej zmiennej mam przypisane wszystkie nagłówki h2 (dajmy na to jest ich 6) z parsera i teraz zastanawiam się, jak sprawdzić w tej zmiennej, czy nagłówki (może ciągli oddzielone <br>? choć tam nie ma br, nie mam pomysłu zbytnio) są unikalne (czy każdy nagłówek z tych 6 nagłówków h2 jest inny, a potem czy każdy nagłówek (wszystkie h2, h3, h4 itd) jest unikalny
Go to the top of the page
+Quote Post
ostrylg
post
Post #14





Grupa: Zarejestrowani
Postów: 144
Pomógł: 18
Dołączył: 11.12.2005
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


To w jaki sposob przypisujesz naglowki np. H2 do zmiennej i jak pozniej sprawdzasz jej zawartosc?
Go to the top of the page
+Quote Post
Destrudo
post
Post #15





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


W taki sposób:
  1. foreach($html_base->find('h1') as $element) {
  2. echo "<pre>";
  3. $h1 = $element->plaintext;
  4. echo $h1;
  5. echo "</pre>";
  6. }


Choć martwią mnie limity tego parsera
Go to the top of the page
+Quote Post
viking
post
Post #16





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


jakie limity? Możesz przecież find('h1, h2, h3...')..
Go to the top of the page
+Quote Post
ostrylg
post
Post #17





Grupa: Zarejestrowani
Postów: 144
Pomógł: 18
Dołączył: 11.12.2005
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Zrob sobie tablice z tymi naglowkami:

  1. $array = [];
  2.  
  3. foreach($html_base->find('h1') as $element) {
  4. array_push($array, $element->plaintext);
  5. }


Pozniej uzyj array_unique jezeli nie chcesz miec takich samych naglowkow na stronie
Go to the top of the page
+Quote Post
Destrudo
post
Post #18





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


W taki sposób?
  1. $array = [];
  2.  
  3. foreach($html_base->find('h1,h2,h3,h4,h5,h6') as $element) {
  4. array_push($array, $element->plaintext);
  5. $result = array_unique($array);
  6. print_r($result);
  7. }


Jak teraz wyświetlić informację, czy nagłówki są unikalne, czy też powtarzają się?

A co do pytania o limity, to chodziło mi o limity na stronę, bo dostałem taki komunikat: "Your access to this site has been limited", choć możliwe że to limit przez spamowanie tej samej domeny i jest on chwilowy?
Go to the top of the page
+Quote Post
ostrylg
post
Post #19





Grupa: Zarejestrowani
Postów: 144
Pomógł: 18
Dołączył: 11.12.2005
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Moze po prostu napisz co chcesz konkretnie osiagnac z tymi naglowkami, w jaki sposob chcesz je wysiwetlac, grupowac etc.

Co do limitow to limit serwera dla ilosci zapytan.
Go to the top of the page
+Quote Post
Destrudo
post
Post #20





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Chciałbym sprawdzic i wyechowac informacje, czy naglowki są unikalne, przykład:
pobieram naggłówki:

h1 = ttt
h2 = ewew
h3 = q, reqwe, q, ttt

I w tym przykładzie nagłówki nie są unikalne, bo w h3 występują 2 takie same nagłówki ("q") i nagłówek h1 jest taki sam jak jeden z nagłówków h3 ("ttt")

I jeszcze co do limitów: https://destrudo.pl/xx/h11.php - jest wpisana strona destrudo.pl, a jeśli wpiszę jakąś inną stronę w ten kod, to działa, więc nie wiem jak rozumieć te limity i jak je zwiększyć
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.09.2025 - 18:18