Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Simple html dom element o zmiennej pozycji
Forum PHP.pl > Forum > Przedszkole
Robsonkox
Witam, mam problem korzystam z simple_html_dom i chcialbym pobrac dane ze strony otomoto, ale problem jest w tym, ze element znajduje sie on w tabeli i wyswietla sie on raz jako 5 raz jako 7 a czasami jako 2.

Mam kod:

  1. $html->find('ul.offer-params__list li.offer-params__item span.offer-params__label div.offer-params__value',5)->plaintext;


I wyswietla on dobra wartosc jedynie w momencie, gdy element znajduje jako 6, natomiast w nastepnym ogloszeniu ten sam element znajduje sie na powiedzmy miejscu 8...

W jednym ogloszeniu jest tak:
  1. <ul class="offer-params__list">
  2. <li class="offer-params__item">
  3. <span class="offer-params__label">Rok produkcji</span>
  4. <div class="offer-params__value"> 2000</div>
  5. </li>
  6. <li class="offer-params__item">
  7. <span class="offer-params__label">COs tam </span>
  8. <div class="offer-params__value"> anything</div>
  9. </li>
  10. <li class="offer-params__item">
  11. <span class="offer-params__label">else</span>
  12. <div class="offer-params__value"> if</div>
  13. </li>
  14. <li class="offer-params__item">
  15. <span class="offer-params__label">tratatta</span>
  16. <div class="offer-params__value"> hehehe</div>
  17. </li>
  18. <li class="offer-params__item">
  19. <span class="offer-params__label">hihihihi</span>
  20. <div class="offer-params__value"> heheheh</div>
  21. </li>
  22. <li class="offer-params__item">
  23. <span class="offer-params__label">1</span>
  24. <div class="offer-params__value"> 2</div>
  25. </li>
  26. </ul>
  27.  

W kolejnym ogloszeniu jest:


  1. <ul class="offer-params__list">
  2. <li class="offer-params__item">
  3. <span class="offer-params__label">ajsdhjasd</span>
  4. <div class="offer-params__value"> laksdlas</div>
  5. </li>
  6. <li class="offer-params__item">
  7. <span class="offer-params__label">COs tam </span>
  8. <div class="offer-params__value"> anything</div>
  9. </li>
  10. <li class="offer-params__item">
  11. <span class="offer-params__label">Rok produkcji</span>
  12. <div class="offer-params__value">2000</div>
  13. </li>
  14. </ul>


Jedyne co tutaj mogloby pomoc to chyba:

  1. <span class="offer-params__label">Rok produkcji</span>

W tym elemencie zawarte sa zawsze 2 slowa: Rok produkcji i w kolejnym elemencie [div] jest porzadana wartosc.

  1. $zmienna = "Rok produkcji";
  2. $rok = $html->find('ul.... li.... span.... div...',$zmienna)->plaintext;
  3.  

Taki kod tez nic nie wykazuje a z dokumentow udostepnianych przez tworce parsera simple_html_dom nie ma nic, ze mozna kolejnosci wybieranego elementu zastosowac tekst, a na tyle nie jestem zaawansowany w PHP, zeby wiedziec czy to zadziala. Licze na pomoc smile.gif
trueblue
Masz na myśli rok produkcji?


  1. $html='<ul class="offer-params__list">
  2. <li class="offer-params__item">
  3. <span class="offer-params__label">ajsdhjasd</span>
  4. <div class="offer-params__value"> laksdlas</div>
  5. </li>
  6. <li class="offer-params__item">
  7. <span class="offer-params__label">COs tam </span>
  8. <div class="offer-params__value"> anything</div>
  9. </li>
  10. <li class="offer-params__item">
  11. <span class="offer-params__label">Rok produkcji</span>
  12. <div class="offer-params__value">2000</div>
  13. </li>
  14. </ul>';
  15.  
  16. $dom=new DOMDocument;
  17. $dom->loadHTML($html);
  18. $dom->encoding = 'UTF-8';
  19. $xpath = new DOMXPath($dom);
  20. $divs = $xpath->query('//span[text()="Rok produkcji"]/following-sibling::div');
  21. foreach($divs as $div){
  22. echo $div->nodeValue;
  23. }
Robsonkox
Ok, dziala. Naprawde dzieki exclamation.gif!

A mam jeszcze pytanko:

Mam juz caly kod, ostatnia prosta... I pod gorke jak zwykle hehe. Problem w tym, ze mam kod na 269 linijek, wszystko dziala do linijki 212.

  1. <?
  2. if(isset($_GET["submit1"]))
  3. {
  4. $link1 = $_GET['link1'];
  5. $html = file_get_html($_GET['link1']);
  6. $imgurl = $html->find('img.img-responsive',0)->src;
  7. echo '<img src="';echo $imgurl;echo'"/>';
  8. $title = $html->find('h1.title',0)->outertext;
  9. echo $title;
  10. $cena = $html->find('div.price',0)->plaintext;
  11. echo $cena;
  12. echo "<br/>";
  13. $rok = $html->find('div.attributes-container ul.list-unstyled li:nth-child(2) span.attribute-value',1)->innertext;
  14. echo $rok;
  15. echo "<br/>";
  16. $przebieg = $html->find('div.attributes-container ul.list-unstyled li:nth-child(2) span.attribute-value',2)->innertext;
  17. echo $przebieg;
  18. echo "<br/>";
  19. $pojemnosc = $html->find('div.attributes-container ul.list-unstyled li:nth-child(2) span.attribute-value',3)->innertext;
  20. echo $pojemnosc;
  21. echo "<br/>";
  22. $moc = $html->find('div.attributes-container ul.list-unstyled li:nth-child(2) span.attribute-value',4)->innertext;
  23. echo $moc;
  24. $description = $html->find('div#offerSimplifiedDescription',0)->plaintext;
  25. $opis = ereg_replace('/&w;/', '',strip_tags($description));
  26. echo $opis;
  27. require_once ("../db.php");
  28. $sql2 = "INSERT INTO auctions (imgurl, tytul, rok, cena, przebieg, pojemnosc, moc, opis, auctionurl)
  29. VALUES ('$imgurl', '$title', '$rok', '$cena', '$przebieg', '$pojemnosc', '$moc', '$opis', '$link1')";
  30. $sql3 = mysql_query($sql2);
  31. if ($conn->query($sql3) === TRUE) {
  32. echo "Rekord dodany pomyslnie";
  33. } else {
  34. echo "Error: " . $sql3 . "<br>" . $conn->error;
  35. }
  36.  
  37. }
  38. if(isset($_GET["submit2"]))
  39. {
  40. $link2=$_GET["link2"];
  41. $html = file_get_html($_GET['link2']);
  42. $imgurl = $html->find('div#photo-gallery-opener img.vtop',0)->src;
  43. echo '<img src="';echo $imgurl;echo'"/>';
  44. $title = $html->find('div.offer-titlebox h1',0)->outertext;
  45. echo $title;
  46. $cena = $html->find('div.price-label strong.xxxx-large',0)->plaintext;
  47. echo $cena;
  48. echo "<br/>";
  49. $rok = $html->find('table.item tbody tr td.value strong',3)->plaintext;
  50. echo $rok;
  51. echo "<br/>";
  52. $przebieg = $html->find('table.item tbody tr td.value',7)->plaintext;
  53. $przebieg = str_replace(' ', '', $przebieg);
  54. echo $przebieg;
  55. echo "<br/>";
  56. $pojemnosc = $html->find('table.item tbody tr td.value',4)->plaintext;
  57. $pojemnosc = str_replace(' ', '', $pojemnosc);
  58. echo $pojemnosc;
  59. echo "<br/>";
  60. $moc = $html->find('table.item strong',6)->plaintext;
  61. $moc = str_replace(' ', '', $moc);
  62. echo $moc;
  63. echo "<br/>";
  64. $description = $html->find('div.clr p.pding10',0)->plaintext;
  65. $opis = ereg_replace('/&w;/', '',strip_tags($description));
  66. echo $opis;
  67. require_once ("../db.php");
  68. $sql2 = "INSERT INTO auctions (imgurl, tytul, rok, cena, przebieg, pojemnosc, moc, opis, auctionurl)
  69. VALUES ('$imgurl', '$title', '$rok', '$cena', '$przebieg', '$pojemnosc', '$moc', '$opis', '$link2')";
  70. $sql3 = mysql_query($sql2);
  71. }
  72.  
  73.  
  74. if(isset($_GET["submit3"]))
  75. {
  76. $link2=$_GET["link3"];
  77. $html = file_get_html($_GET['link3']);
  78. $dom=new DOMDocument;
  79. $dom->loadHTML($html);
  80. $dom->encoding = 'UTF-8';
  81. $xpath = new DOMXPath($dom);
  82. $imgurl = $html->find('img.bigImage',0)->src;
  83. echo '<img src="';echo $imgurl;echo'"/>';
  84. $title = $html->find('h1.offer-title',0)->outertext;
  85. echo $title;
  86. $cena = $html->find('span.offer-price__number',0)->plaintext;
  87. echo $cena;
  88. echo "<br/>";
  89. ?>
  90. <?
  91. /*
  92. Rok produkcji z funkcji DOM
  93. */
  94. $divs = $xpath->query('//span[text()="Rok produkcji"]/following-sibling::div');
  95. foreach($divs as $rokt){
  96. echo $rokt->nodeValue;
  97. $rok = $rokt;
  98. }
  99. echo "<br/>";
  100. /* Koniec funkcji poboru roku produkcji z funkcji DOM */
  101. /* Moc silnika z funkcji DOM */
  102. $divs = $xpath->query('//span[text()="Moc"]/following-sibling::div');
  103. foreach($divs as $moct){
  104. echo $moct->nodeValue;
  105. $moct = str_replace(' ', '', $moct);
  106. $moc = $moct;
  107. }
  108. /* Pobor przebiegu za pomoca funkcji DOM */
  109. $divs = $xpath->query('//span[text()="Przebieg"]/following-sibling::div');
  110. foreach($divs as $przebiegt){
  111. echo $przebiegt->nodeValue;
  112. $przebiegt = str_replace(' ', '', $przebiegt);
  113. $przebieg = $przebiegt;
  114. }
  115. echo "<br/>";
  116. /* Koniec poboru przebiegu z funkcji DOM */
  117. /* Pojemnosc z funkcji DOM */
  118. $divs = $xpath->query('//span[text()="Pojemność skokowa"]/following-sibling::div');
  119. foreach($divs as $pojemnosct){
  120. echo $pojemnosct->nodeValue;
  121. $pojemnosct = str_replace(' ', '', $pojemnosct);
  122. $pojemnosc = $pojemnosct;
  123. }
  124. echo "<br/>";
  125. /* Koniec poboru pojemnosci z funkcji DOM */
  126. echo "<br/>";
  127. $description = $html->find('div#rmjs-1',0)->plaintext;
  128. $opis = ereg_replace('/&w;/', '',strip_tags($description));
  129. echo $opis;
  130. require_once ("../db.php");
  131. $sql2 = "INSERT INTO auctions (imgurl, tytul, rok, cena, przebieg, pojemnosc, moc, opis, auctionurl)
  132. VALUES ('$imgurl', '$title', '$rok', '$cena', '$przebieg', '$pojemnosc', '$moc', '$opis', '$link3')";
  133. $sql3 = mysql_query($sql2);
  134. }
  135. ?>


To znaczy wszystko co jest za tym kodem, juz nie dziala...

  1. $divs = $xpath->query('//span[text()="Moc"]/following-sibling::div');
  2. foreach($divs as $moct){
  3. echo $moct->nodeValue;
  4. $moct = str_replace(' ', '', $moct);
  5. $moc = $moct;
  6. }


Przeanalizowalem kodzik i niby wszystkie otwarcia, zamkniecia sa wporzadku, co mozebyc przyczyna. Dodam ze jesli zamienie miejscami kod np:

  1. $divs = $xpath->query('//span[text()="Moc"]/following-sibling::div');
  2. foreach($divs as $moct){
  3. echo $moct->nodeValue;
  4. $moct = str_replace(' ', '', $moct);
  5. $moc = $moct;
  6. }

na ten:

  1. $divs = $xpath->query('//span[text()="Przebieg"]/following-sibling::div');
  2. foreach($divs as $przebiegt){
  3. echo $przebiegt->nodeValue;
  4. $przebiegt = str_replace(' ', '', $przebiegt);
  5. $przebieg = $przebiegt;
  6. }


To nie pokaze mi juz mocy tylko przebieg... Czyli tak jakby kod urywal sie za linijka ktorastam...
viking
Włącz wyświetlanie błędów (masz w przyklejonym temacie). Masz tam przestarzałe funkcje np ereg_replace które zostały usunięte.
Robsonkox
Utworzylem plik debug.php a w nim:

  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>

w pliku, w ktorym jest ten blad, czy cokolwiek to jest:

  1. include("./debug.php");


I??
Nic, nie pokazuje zadnego bledu, korzystam z hostingu: hostinger.pl
W opcjach mam ustawione:
Wyświetl błędy
Włączone Wyłączone Określenie, błędy będą drukowane na ekranie lub błędy będą ukryte przed użytkownikiem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.