Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tabelka file_get_contents i preg_match
omi
post 30.11.2017, 23:05:47
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.11.2017

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


Witam.

Chciałbym pobrać tabele z tej strony: https://www.money.pl/banki/elixir/
Mam taki kod:

  1. <?php
  2. $strona = file_get_contents('https://www.money.pl/banki/elixir/');
  3. echo '<pre>';
  4. preg_match('/<table class="tabela_elyxyr tabela big mO tlo_biel vag">(.*)<\/table>/s', $strona, $wynik);
  5. var_dump($wynik);
  6. ?>


Proszę mi napisać dlaczego nie wyświetla mi się tabelka na stronie wyświetla się tylko:

array(0) {
}

Go to the top of the page
+Quote Post
viking
post 1.12.2017, 03:43:06
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Do parsowania DOM służą funkcje DOM typu simplexml, domdocument.


--------------------
Go to the top of the page
+Quote Post
kreatiff
post 1.12.2017, 10:20:13
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


Masz 0 wyników, ponieważ masz literówkę we wzorze i nie ma dopasowania (mO - wielkie o, a w kodzie jest m0 - zero).
Go to the top of the page
+Quote Post
omi
post 1.12.2017, 20:33:21
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.11.2017

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


Był błąd bo zamiast 0 napisałem O a teraz wyświetla się cała tabela. Chciałbym teraz zapytać się jak zmienić ten mój kod żeby nie wyświetlała się mi cała tabelka tylko z tej tabeli Alior Bank i Bank Zachodni WBK?
Go to the top of the page
+Quote Post
kreatiff
post 2.12.2017, 16:48:27
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


By złapać tylko tę konkretną tabelę, użyj (.*?) zamiast (.*). Później możesz np. zrobić explode po np. zamknięciu wiersza (</tr>) i szukać w tablicy wartości, która zawiera to co Ciebie interesuje. Później wyczyścić to odpowiednio innymi funkcjami.

Ogólnie nie powinno się parsować htmla wyrażeniami regularnymi, bo można napotkać na nieoczekiwane rezultaty. Ale ja osobiście robiłem to wielokrotnie i nie miałem z tym problemu, ale parsuję pewne rzeczy (własne źródła, bez niespodzianek).
Go to the top of the page
+Quote Post
trueblue
post 2.12.2017, 17:26:43
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Polecam lekturę: http://kawalekkodu.pl/post/the-tag-is-out-...domxpath-s01e01

  1. $html = file_get_contents('https://www.money.pl/banki/elixir/');
  2.  
  3. $dom = new DOMDocument;
  4. libxml_use_internal_errors(true);
  5. $dom->loadHTML($html);
  6. $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
  7. libxml_clear_errors();
  8. $dom->encoding = 'UTF-8';
  9. $xpath = new DOMXPath($dom);
  10.  
  11. $trs = $xpath->query('//table[@class="tabela_elyxyr tabela big m0 tlo_biel vag"]//a[text()="Alior Bank" or text()="Bank Zachodni WBK"]/ancestor::tr');
  12. foreach($trs as $tr){
  13. echo $tr->nodeValue; // innerText
  14. echo $tr->C14N(); // innerHTML
  15. }


--------------------
Go to the top of the page
+Quote Post
omi
post 2.12.2017, 19:26:43
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.11.2017

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


O to chodziło właśnie. Dziękuję. Jeszcze jest jedna kwestia. Bo PHP Skrypty i Bazy danych to dla mnie na razie wieka zagadka. Mam jeszcze jedno pytanie, jak te dane z Alior Banku i Banku Zachodniego WBK umieścić w bazie danych na serwerze, czy trzeba utworzyć jakieś tabele wcześniej przed zapisaniem tych danych w bazie danych. Chodzi o to żeby pobrać dane z tabeli tych dwóch banków i zapisać do bazy danych.
Go to the top of the page
+Quote Post
trueblue
post 2.12.2017, 19:31:06
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Najpierw musisz pomyśleć jakie dane dokładnie chcesz przechowywać i w jakiej postaci. Czy będziesz je przetwarzać /obrabiać /prowadzić na nich jakieś obliczenia.
Jeśli tylko wyświetlać, to możesz stworzyć tabelę o podobnej strukturze do tabeli HTML.


--------------------
Go to the top of the page
+Quote Post
omi
post 2.12.2017, 21:27:09
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.11.2017

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


Chciałbym zapisać do bazy danych to co jest w tabeli czyli godziny przelewów wychodzących i przychodzących Alior Banku i Banku Zachodniego WBK i raz w miesiącu np pierwszego każdego miesiąca żeby wyświetlał się link do aktualizacji bazy danych na stronie www i będzie to mogła zrobić jedna osoba raz w miesiącu. I zastanawia mnie czy idę z tym wszystkim w dobrym kierunku, czy ten kod będzie można użyć do zapisania tych danych do bazy danych:

  1. $html = file_get_contents('https://www.money.pl/banki/elixir/');
  2.  
  3. $dom = new DOMDocument;
  4. libxml_use_internal_errors(true);
  5. $dom->loadHTML($html);
  6. $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
  7. libxml_clear_errors();
  8. $dom->encoding = 'UTF-8';
  9. $xpath = new DOMXPath($dom);
  10.  
  11. $trs = $xpath->query('//table[@class="tabela_elyxyr tabela big m0 tlo_biel vag"]//a[text()="Alior Bank" or text()="Bank Zachodni WBK"]/ancestor::tr');
  12. foreach($trs as $tr){
  13. echo $tr->nodeValue; // innerText
  14. echo $tr->C14N(); // innerHTML
  15. }
Go to the top of the page
+Quote Post
trueblue
post 2.12.2017, 21:33:22
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Tego kodu nie będzie można użyć do zapisania do bazy danych, bo nie do tego służy. Służy tylko do wyszukiwania danych w strukturze DOM.
Natomiast uzyskane dane można użyć. Możesz je zapisywać wprost w takiej postaci, albo opracować taką strukturę, która pozwoli przechować dla banku odrębnie sesje przychodzące i odrębnie wychodzące (tabela "bank" i tabela "sesja"). W drugim przypadku musisz jednak te dane ponownie przeparsować.
Ale z tego co piszesz, to nie wiem czy Ci jest potrzebna w ogóle baza danych. Możesz zapisać dane do pliku. I albo nadpisywać zawsze ten sam plik i includować go na stronie, albo tworzyć kolejne i wyświetlać listę lub tylko ostatni.


--------------------
Go to the top of the page
+Quote Post
omi
post 3.12.2017, 01:17:06
Post #11





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.11.2017

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


Czyli rozumiem że wykorzystując uzyskane dane można za pomocą odpowiedniego skryptu zapisywać w bazie danych. Nigdy czegoś takiego nie robiłem i nie mam pojęcia jak się za to zabrać. Jak by to nie wymagało bardzo dużo czasu to bym prosił o napisanie skryptu który zapisuje te uzyskane dane do bazy danych. A jak to jest bardzo czasochłonne to proszę się nie fatygować.
Go to the top of the page
+Quote Post
Neutral
post 5.12.2017, 00:19:57
Post #12





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


https://stackoverflow.com/questions/1732348...-contained-tags

Masz podane wszystko na tacy (tak mi się wydaje). Teraz napisz odpowiednie zapytania do servera, aby zapisał dane do pliku lub do bazy, nawet już to zostało wspomniane.

  1.  
  2. $handle = fopen('file_name.txt','w');
  3. $handle2 = fopen('file_name2.txt','w');
  4.  
  5. foreach($trs as $tr){
  6. fwrite($handle,$tr->nodeValue.'___'.$tr->C14N());
  7. }
  8.  
  9. // lub:
  10.  
  11. foreach($trs as $tr){
  12. fwrite($handle,$tr->nodeValue);
  13. }
  14.  
  15. foreach($trs as $tr){
  16. fwrite($handle2,$tr->C14N());
  17. }
  18.  
  19.  
  20.  


Coś w ten deseń. Inna opcja to DB (database).

  1. $mysqli = new mysqli('localhost','root','','mybase');
  2. foreach($trs as $tr){
  3. $mysqli->query("INSERT INTO `mytable` values(null,'{$tr->nodeValue}','{$tr->C14N()}'));
  4. }


Ten post edytował Neutral 5.12.2017, 00:22:39
Go to the top of the page
+Quote Post
omi
post 8.12.2017, 02:51:04
Post #13





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.11.2017

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


Ja chciałbym zapisać te dane do bazy danych na serwerze, na razie co potrafię zrobić to utworzyć bazę danych na serwerze. Więc po kolei tak jak kolega o niku Neutral napisał że trzeba napisać odpowiednie zapytanie ( jak ktoś wie jak to zapytanie ma wyglądać żeby było można te dane było zapisać do bazy danych to proszę napisać) i to zapytanie pobiera dane z tej strony https://www.money.pl/banki/elixir/ i zapisuje dane z tabeli do bazy danych. Bym prosił żeby mi ktoś napisał działający kod który robi takie zapytanie i zapisuje dane z tabeli na stronie https://www.money.pl/banki/elixir/ do bazy danych na serwerze, z opisem żeby było wiadomo o co tam chodzi. Po prostu potrzebuje żeby ktoś mi ten kod napisał krok po kroku i żeby to zadziałało.

Ten post edytował omi 8.12.2017, 02:53:25
Go to the top of the page
+Quote Post
viking
post 8.12.2017, 04:22:54
Post #14





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Kolego. My tu pomagamy rozwiązywać problemy a nie pisać za kogoś cały kod, jeszcze dodatkowo z opisem. Potrzebujesz pdo oraz kurs sql. Prostego inserta napiszesz jak trochę poczytasz.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 12:22