Witam.
Chciałbym pobrać tabele z tej strony:
https://www.money.pl/banki/elixir/Mam taki kod:
<?php
preg_match('/<table class="tabela_elyxyr tabela big mO tlo_biel vag">(.*)<\/table>/s', $strona, $wynik); ?>
Proszę mi napisać dlaczego nie wyświetla mi się tabelka na stronie wyświetla się tylko:
array(0) {
}
viking
1.12.2017, 03:43:06
Do parsowania DOM służą funkcje DOM typu simplexml, domdocument.
kreatiff
1.12.2017, 10:20:13
Masz 0 wyników, ponieważ masz literówkę we wzorze i nie ma dopasowania (mO - wielkie o, a w kodzie jest m0 - zero).
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?
kreatiff
2.12.2017, 16:48:27
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).
trueblue
2.12.2017, 17:26:43
Polecam lekturę:
http://kawalekkodu.pl/post/the-tag-is-out-...domxpath-s01e01
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();
$dom->encoding = 'UTF-8';
$xpath = new DOMXPath($dom);
$trs = $xpath->query('//table[@class="tabela_elyxyr tabela big m0 tlo_biel vag"]//a[text()="Alior Bank" or text()="Bank Zachodni WBK"]/ancestor::tr');
foreach($trs as $tr){
echo $tr->nodeValue; // innerText echo $tr->C14N(); // innerHTML }
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.
trueblue
2.12.2017, 19:31:06
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.
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:
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();
$dom->encoding = 'UTF-8';
$xpath = new DOMXPath($dom);
$trs = $xpath->query('//table[@class="tabela_elyxyr tabela big m0 tlo_biel vag"]//a[text()="Alior Bank" or text()="Bank Zachodni WBK"]/ancestor::tr');
foreach($trs as $tr){
echo $tr->nodeValue; // innerText echo $tr->C14N(); // innerHTML }
trueblue
2.12.2017, 21:33:22
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.
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ć.
Neutral
5.12.2017, 00:19:57
https://stackoverflow.com/questions/1732348...-contained-tagsMasz 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.
$handle = fopen('file_name.txt','w'); $handle2 = fopen('file_name2.txt','w');
foreach($trs as $tr){
fwrite($handle,$tr->nodeValue.'___'.$tr->C14N()); }
// lub:
foreach($trs as $tr){
fwrite($handle,$tr->nodeValue); }
foreach($trs as $tr){
}
Coś w ten deseń. Inna opcja to DB (database).
$mysqli = new mysqli('localhost','root','','mybase');
foreach($trs as $tr){
$mysqli->query("INSERT INTO `mytable` values(null,'{$tr->nodeValue}','{$tr->C14N()}'));
}
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.
viking
8.12.2017, 04:22:54
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.
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.