Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Pobranie tabeli (danych) z innej strony
kubax33
post
Post #1





Grupa: Zarejestrowani
Postów: 157
Pomógł: 1
Dołączył: 27.01.2010

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


Potrzebuję pobrać dane ze strony kuriera DPD a mianowicie chodzi mi o tabelę statusu przesyłki:
http://www.dpd.com.pl/tracking.asp?przycis...=0000000870377S

  1. $file = file_get_contents("http://www.dpd.com.pl/tracking.asp?przycisk=Wyszukaj&p1=0000000870377S");
  2. preg_match('#<table border="0" cellpadding="0" cellspacing="0" class="subpage_modules">(.+?)</table><br>#', $file, $operator);
  3. echo $operator[1];
  4.  
  5.  


Niestety kod nie działa poprawnie. Czy ktoś może mnie naprowadzić jak to zrobić poprawnie?

Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
athei
post
Post #2





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

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


  1. preg_match('#<table border="0" cellpadding="0" cellspacing="0" class="subpage_modules">(.+?)<\/table><br>#s', $file, $operator);
Go to the top of the page
+Quote Post
-didoFREE-
post
Post #3





Goście







Nie chcę zakładać nowego tematu więc podłączę się pod ten... Mam tabele na pewnej stronie z której chce wyciągnąć dane (między znacznikami <td> ) i zapisać je do bazy.


Tabela wygląda tak:
  1. <div id="detail_prod" class="wyslik">
  2. <h1>igl09273 </h1>
  3.  
  4. .......................
  5.  
  6.  
  7. <table cellspacing="0" class="common small">
  8. <tr>
  9. <th>Rodzaj produktu</th>
  10. <td> iglica </td>
  11. <th>waga</th>
  12. <td> 4 </td>
  13. </tr> <tr>
  14. <th>Rozmiar (mm)</th>
  15. <td>198 x 1</td>
  16. <th>szt./ opak</th>
  17. <td>4</td>
  18. </tr> <tr>
  19. <th>Kolor</th>
  20. <td>biały</td>
  21. <th>&nbsp;</th>
  22. <td>&nbsp;</td>
  23. </tr>
  24.  
  25. </tbody>
  26. </table>



I teraz tak rozumie że muszę pobrać dane ze strony i wrzucić dane do tabeli czyli teraz mój antyskrypt (IMG:style_emoticons/default/wink.gif)

  1. <?php
  2. $s = file_get_contents( 'http://jakasdomena/produkt1/igl09273.html' );
  3. preg_match_all( '#<td>(.*?)</td>#is', $s, $m, PREG_SET_ORDER );
  4. print_r( $m ) ;
  5.  
  6. ?>



Chciałbym osiągnąć taki wynik w bazie danych MYSQL:
  1. ID nazwa_prod rodzaj_prod waga rozmiar pakowanie kolor
  2. 1 igl09273 iglica 4 198x1 4 biały
  3. 2 igl09287 iglica 8 220x1 2 biały
  4. 3 iwxl0jdk8 wiertło 2 10x0,5 10 srebny
  5. 4 iiwerwdk8 wiertło 3 10x0,5 10 srebny
  6.  
  7.  
  8.  

Go to the top of the page
+Quote Post
rossecki
post
Post #4





Grupa: Zarejestrowani
Postów: 39
Pomógł: 3
Dołączył: 3.12.2011

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


No kod spoko.
Tylko tym tego do bazy nie zapiszesz (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
-didoFREE-
post
Post #5





Goście







Nie to ja wiem że go do bazy nie zapisze tylko chodzi mi czy dobra koncepcje przyjąłem z tym preg_match_all() (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/wink.gif)
Ja dopiero raczkuje i tylko troche znam sie na php i wiem jaki wynik chce osiągnąć i szukam odpowiednich funkcji do tego (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
-didoFREE-
post
Post #6





Goście







Jednak baza mnie przeraża na razie udało mi się z nią połączyć ale za dużo opcji (IMG:style_emoticons/default/wink.gif) Więc postanowiłem zapisać wynik do pliku i znowu problem (IMG:style_emoticons/default/wink.gif)

Chcę pobrać dane między <td> i zapisać każdy jeden do osobnego wiersza w pliku

  1. <?php
  2. $s = file_get_contents( 'http://pyjter.host.sk/przyklad.html' );
  3. preg_match_all( '#<td>(.*?)</td>#is', $s, $m, PREG_SET_ORDER );
  4.  
  5. $string = implode("\n",$m);
  6.  
  7. file_put_contents('asd.txt',$string);
  8. ?>


Po wykonaniu tego skryptu dostaję tylko

Array
Array
Array
Array
Array
Array
...


Ktoś podpowie co robię źle (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
-Gość-
post
Post #7





Goście







Zastosowałeś parametr PREG_SET_ORDER, który powoduje, że w wyniku masz tablicę elementów, które pasują do wzorca, $m[0] - pierwszy pasujący zestaw, $m[1] - drugi, itd.
Zamiast tego powinieneś zastosować PREG_PATTERN_ORDER, wtedy w wierszu 5. można zastosować:
  1. $string = implode("\n", $m[1]);
Go to the top of the page
+Quote Post
-freeDIDO-
post
Post #8





Goście







Super dzięki ładnie mi zapisało do pliku faktycznie że ja nie skapowałem tego argumentu wcześniej PREG_PATTERN_ORDER, no ale cóż ja dopiero raczkuje w temacie php programistą wybitnym nie będę ale chce sobie zrobić dzięki waszej pomocy skrypt w którym będę wiedział co za co odpowiada (IMG:style_emoticons/default/wink.gif)
Ale mam kolejny problem chcę aby mi wycięło znaki spacji tabulacji itd Wyszukałem że odpowiada za to preg_replace
Czyli załużmy chcę usunąć znaki tabulacji z wyciągniętych haseł z tabeli:

  1. $m = preg_replace("%\t%", "", $m);


Czy takie wyrażenie jest poprawne dla mojego "mega" kodu?? I gdzie mam go umieścić(IMG:style_emoticons/default/questionmark.gif) Od razu powiem że jest to trochę nielogiczne dla mnie ale wydaje mi się że przed linią która rozdziela dane z tabeli czyli najpierw obróbka a potem podział.
  1. $string = implode("\n",$m[1]);


No chyba że to winno sie zaiwerać już w preg_match_all w wyrażeniu regularnym by pomijało tabulacje i podwójne spacje

Aktualnie plik wynikowy asd.txt wygląda tak:

Kod
                                                                                    Zapałki
                                                                            
                                                                                                                                  tak
                                                                                                                      
                                    
                                                                                    3 x 3 x 50
                                                                            
                                                                                    5
                                                                            
                                    
                                                                                    0,3 x 0,3
                                                                            
                                                                                    60
                                                                            
                                    
                                                                                                                                  tak
                                                                                                                      
                                                                                    56tyś
                                                                            
                                    
                                                                                    drewniany
                                                                            
                                                                                    1mln
                                                                            
                                    
                                                                                    nieobroboona
                                                                            
                                                                                    0,45
                                                                            
                                    
                                                                                                                W22                                                                            
&nbsp;
                                                                                                                                  tak
                                                                                                                      
&nbsp;
                                                                                    małe odchyłki
                                                                            
&nbsp;
Go to the top of the page
+Quote Post
-freeDIDO-
post
Post #9





Goście







Zmodyfikowałem trochę skrypt i wyszło mi takie coś(IMG:style_emoticons/default/biggrin.gif)

  1. <?php
  2. $a = file( './plik.txt' );
  3.  
  4. foreach ($a as $t)
  5. {
  6. $s = file_get_contents( $t );
  7. preg_match_all( '#<td>(.*?)</td>#is', $s, $b, PREG_PATTERN_ORDER );
  8.  
  9. $string = implode(";", $b[1]);
  10. }
  11.  
  12.  
  13. file_put_contents('asd.txt',$string);
  14. ?>


w plik.txt mam zapisane 1 adres url = 1 wiersz

Jednak tylko z ostatniego url'a wczytuje mi prawidłowo dane

Przy dwóch piwerwszych wyrzuca mi błąd:
Kod

Warning: file_get_contents(http://www.jakisadres.pl/produkt/eadad/3324.html) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/jail/.../public_html/tabela3.php on line 6

Warning: file_get_contents(http://www.jakisadres.pl/produkt/esad/344.html ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/jail/.../public_html/tabela3.php on line 6
Go to the top of the page
+Quote Post
brzanek
post
Post #10





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Nie chce zakładać nowego tematu bo nie ma takiej potrzeby ale mam problem z zapisaniem danych do bazy mysql
Mój kod wygląda tak.
  1. <?php
  2. $strona = file_get_contents('adres_www');
  3. echo '<pre>';
  4. preg_match_all( '#<font color=red>(.*?)<\/font>#is', $strona, $wynik, PREG_PATTERN_ORDER );
  5. print_r ($wynik[0]);
  6. $string = implode("\n", $wynik[1]);
  7. file_put_contents('asdd.txt',$string);
  8. include ("db.php");
  9. {
  10. $add = mysql_query("INSERT INTO gryfino (id, tekst, tekst1, takst2, tekst3, tekst4, tekst5) VALUES ('', '$wynik[0]', '$wynik[1]', '$wynik[2]', '$wynik[3]', '$wynik[4]', '$wynik[5]')");
  11. }
  12. ?>

Po wywołaniu pliku php w odpowiedzi dostaję taki zapis.
Array
(
[0] => 8.9
[1] => 8.9
[2] => 9.4
[3] => 9.2
[4] => 11.8
[5] => 7.5
)
Do bazy danych nic nie zostaje dodane.
Go to the top of the page
+Quote Post
viking
post
Post #11





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

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


http://php.net/manual/en/function.mysql-error.php
Usuń kolumnę id bo i tak nic nie dodajesz.
Go to the top of the page
+Quote Post
brzanek
post
Post #12





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Troszkę zmieniłem zapytanie ale i tak nie działa
  1. {
  2. $add = mysql_query("INSERT INTO gryfino (tekst, tekst1, takst2, tekst3, tekst4, tekst5) VALUES ('', '".$wynik[0]."', '".$wynik[1]."', '".$wynik[2]."', '".$wynik[3]."', '".$wynik[4]."', '".$wynik[5]."')");
  3. }
Go to the top of the page
+Quote Post
viking
post
Post #13





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

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


6 kolumn, 7 wartości. Dlaczego nie wyświetlasz błędu?
Go to the top of the page
+Quote Post
brzanek
post
Post #14





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Dodałem błędy
  1. {
  2. $add = mysql_query("INSERT INTO gryfino (tekst, tekst1, takst2, tekst3, tekst4, tekst5) VALUES ('$wynik[0]', '$wynik[1]', '$wynik[2]', '$wynik[3]', '$wynik[4]', '$wynik[5]')");
  3. }

Po wywołaniu pliku mam błąd że zapytanie było puste
Go to the top of the page
+Quote Post
viking
post
Post #15





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

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


No bo było puste. Robisz teraz 2 zapytania a $add zawiera true/false. Nie tutaj ten or.
Go to the top of the page
+Quote Post
brzanek
post
Post #16





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


viking już teraz nic nie rozumiem.
Jakie dwa zapytania?
Nie tutaj ten or. ?
Go to the top of the page
+Quote Post
viking
post
Post #17





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

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


2 x wykonujesz zapytania - mysql_query wykonuje zapytanie, tak?
Pierwsze zawiera jakiś błąd zatem $add = false;
Potem robisz
mysql_query(false) or die(mysql_error());
Więc drugie jest puste.

Cytat
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:

mysqli_error()
PDO::errorInfo()
Go to the top of the page
+Quote Post
brzanek
post
Post #18





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Dobra trochę zmodyfikowałem cały kod
  1. <?php
  2. $strona = file_get_contents('strona_www');
  3. preg_match_all( '#<font color=red>(.*?)<\/font>#is', $strona, $wynik, PREG_PATTERN_ORDER );
  4. $fn = date("Y-m-d H:i:s");
  5. echo '<pre>';
  6. print_r ($wynik[0]);
  7. echo '</pre>';
  8. $string = implode("\n", $wynik[1]);
  9. file_put_contents('asdd.txt',$string);
  10. include ("db.php");
  11. {
  12. $add = mysql_query("INSERT INTO gryfino (id, data, tekst, tekst1, tekst2, tekst3, tekst4, tekst5) VALUES ('', '$fn', '$string', '', '', '', '', '')");
  13. }
  14. ?>

Zapisuje się do bazy nowy rekord, data i w pierwszej kolumnie wszystkie dane z tablicy a ja chcę aby dane trafiały do odpowiednich pól.
Zrobiłem jedno zapytanie mysql_query które działa ale nie do końca tak jak powinno.
Go to the top of the page
+Quote Post
viking
post
Post #19





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

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


No dobrze ale dlaczego nie wyświetliłeś błędu wcześniej? Skoro wkładasz do `tekst` string będący złączeniem danych z tablicy a do reszty puste stringi to czego się spodziewasz? $wynik jest tablicą wielowymiarową i w tym mógl być problem.
Go to the top of the page
+Quote Post
brzanek
post
Post #20





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


No tak i w tym jest problem. A więc jak tą tablicę wielowymiarową zapisać do bazy danych mysql?
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: 23.08.2025 - 18:26