Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne, wyciąganie informacji ze strony
Forum PHP.pl > Forum > PHP
tzm
Cześć wszystkim,

mam nadzieję że problem na tyle poważny że nie pomyliłem działu i nie powinien trafić do przedszkola.

Pisze do was z nietypowym - dla mnie problemem, i dobrze by było kilka szczegółów rzucić na temat mojej osoby.

Jestem stażystą i uczę się PHP, nie pierwszy raz w życiu spotykam się z wyrażeniami regularnymi i proste sam potrafię sformułować, niestety dostałem zadanie wyciągnięcia informacji o 3500 produktach z zagranicznego sklepu internetowego - prawdopodobnie autorski soft bo do niczego nam to nie pasuje żeby szukać wsparcia na forach jakiej kolwiek dystrybucji.

Pozwolę sobie okroić lekko szkielet html bo zależy mi z wiadomych przyczyn na tym bo nikt nie wiedział co to za sklep.

  1. <tr class='row2'>
  2.  
  3. <td class='product-name'>
  4. <div style='position: relative; margin: 0 15px 0 0;'>
  5. <a href='/p/23444-netbooks-10-asus-eee-pc-x101ch-n2600-1gb-320-7se-black.html' title='Netbooks 10`; :: ASUS Eee PC X101CH N2600/1GB/320/7SE black'><span class='product-name-inner'>ASUS Eee PC X101CH N2600/1GB/320/7SE black</span>
  6. <span class='product-features' title='Intel Atom N2600, 1 GB, 320 GB SATA 5400 rpm, 10`, Intel GMA 3600, Windows 7 Starter 32 bit'>(Intel Atom N2600, 1 GB, 320 GB SATA 5400 rpm, 10`, Intel GMA 3600, Windows 7 Starter 32 bit)</span>
  7. </a>
  8. <span class='product-features' style='position: absolute; right: 8px; top: 1px;'>)</span>
  9. </div>
  10. </td>
  11.  
  12.  
  13. <td class='product-price'>334 $</td>
  14.  
  15. </tr>


Samą aplikację do automatyzacji tego napisać potrafię bez większego problemu, lecz mam problem z napisaniem wyrażenia do tego.. prawdę mówiąc nie wiem nawet od czego zacząć. (Tutaj możecie mnie karcić że nie przychodzę ze swoim kodem, ale też nie chodzi mi o to byście to zrobili za mnie)

Myślałem o wykorzystaniu strip-tags'a i podzieleniu tego explode do tablicy by potem to wrzucić do swojej bazy ale problem polega na tym że jeśli np. (Intel Atom N2600, 1 GB, 320 GB SATA 5400 rpm, 10`, Intel GMA 3600, Windows 7 Starter 32 bit) tutaj ktoś dołoży jaki kolwiek parametr, napisze że jest to promocja, cokolwiek się tam zmieni to cała tablica przesunie się i w bazie zrobi mi się taki bałagan że przy ilości produktów w tym sklepie - nigdy tego nie opanuję i będę miał całą bazę do wyrzucenia ze względu na konieczność użycia CRON'a - systematyczna aktualizacja listy.

Wiem że prościej napisać do nich o kopie bazy danych bo to zwyczajna dystrybucja i pewnie by się zgodzili zadowoleni ze sprzedaży w Polsce ale .. jestem na stażu. Mam się uczyć i potrzebuję waszej pomocy przy logicznym ogarnięciu jak te dane wyciągać i formatować.

Ktoś, coś, pomoże?
toffiak
Łatwiej by było gdybyś podał nazwę sklepu, ale jeżeli nie możesz to może sklep udostępnia API swoich produktów ? tak robi np: nexto.
CuteOne
HTML'a nie parsujemy wyrażeniami.. strata czasu i nerwów, od tego masz już gotowe narzędzia:
http://simplehtmldom.sourceforge.net/
tzm
Genialne, szukając informacji na temat użycia trafiłem na to:

http://forum.php.pl/index.php?showtopic=195651

I bardzo mi pomogłeś jednak i tak proszę nie zamykać jeszcze tematu, pewnie będę miał więcej pytań ale suma sumarum jestem bardzo zadowolony CuteOne smile.gif

toffiak niestety sklep nie udostępnia api do tego a nie jestem przekonany że podobnie jak w temacie który wkleiłem - nie mieli by czegoś przeciw takim praktykom.

Ale w końcu kto mi zabrania przeglądać internet i formatować dane po stronie mojego komputera i localhosta..

No.. i tak jak myślałem tak będę miał problem.

Z tego co wyczytałem to jednak simple_html_dom nie do końca zda egzamin przy tym co chce zrobić ze względu na pamięcio żerność ale i tak postawiłem sobie misje wykorzystania go w swojej aplikacji. Problem polega chyba tylko na tym że ucząc się na stażu przerosło mnie to trochę.

  1.  
  2. include 'simple_html_dom.php';
  3.  
  4. $link = $_POST['link'];
  5.  
  6. $html = file_get_html($link);
  7.  
  8.  
  9. for($i = 0; $i < 1; $i++)
  10. {
  11.  
  12. echo '<table style="margin:0 auto;border:1px solid black;padding:15px;">';
  13.  
  14. foreach($html->find('th.dist-desc2, td.dist-desc3') as $k => $e)
  15. {
  16. echo "<tr>".$e."</tr>";
  17. if($k==99) break;
  18.  
  19. }
  20.  
  21. echo '</table>';
  22. }
  23.  


Wynik jest świetny, bez problemu dodaję go do bazy danych ale ja nie potrzebuję ręcznie skanować strony która ma kilka tysięcy podstron tylko zrobić to automatycznie. Szukając w google pod hasłami simple_html_dom multiple urls jest kilka ciekawych pozycji, ale nie zdają do końca egzaminu.

Może ktoś rzucić okiem i wyjaśnić mi jak to zrobić?
CuteOne
  1. $links = array(
  2. '?a=1', '?b=2', '?a=2'
  3. );
  4.  
  5. foreach($links as $v) {
  6.  
  7. $link = 'http://strona.pl/'.$v;
  8.  
  9. // reszta część kodu
  10. }

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.