Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-04-20 17:53:12

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

php + wyciąganie nazw ze znaczników html

Witam! Mam taki problem - zrobiłem kod php który wyciąga mi wszystkie linie z pliku html ze znacznikiem IMG
i wrzuca do pliku plik1.txt, wygląda on tak:


<?
$f0="<img";
$litera1 = $f0;

$fd = fopen("dokument.html", "rw+");
$fd1 = fopen("plik1.txt", "rw+");
  while (!feof ($fd)){
   $linia = fgets($fd, 1024);
    if(strpos($linia, $litera1) !== false)
fputs($fd1,"$linia"."\n");

}
?>

problem w tym - jak go przerobić aby wyświetlał mi na ekran listę
wszystkich nazw plików z kodu img i nazw alternatywnych - czyli jak w dokumencie html
mam wpisy typu <img src=plik1.txt alt=test test> czy <img src="/var/www/testy/plik2.txt" alt=tetrtrtrtrt>

to żeby wyświetlił mi na ekran:
plik1.txt   - test test
plik2.txt   - tetrtrtrtrt

Niemam za bardzo pomysłu jak by to można było wykonać??
Był bym wdzięczny za jakąkolwiek pomoc.


debbie
Wrócę jak zjem zupę i drugie danie - tyle
a oto ta zupa:

Offline

 

#2  2009-04-20 19:09:33

  grzegorz.85 - Członek DUG

grzegorz.85
Członek DUG
Skąd: Ostrołęka
Zarejestrowany: 2007-07-12
Serwis

Re: php + wyciąganie nazw ze znaczników html

sa skrypty parsujace kod html, ktore by Ci to ladnie wyjely bez wiekszego problemu, jednak nie wiem, czy w tym przypadku nie bylby to strzal z armaty do muchy

wiec jak juz masz wiersz ze znacznikiem '<img' to najlepiej go obetnij np. przy pomocy substr aby rozpoczynal sie od tego znacznika wlasnie (dlaczego o tym za chwile).
dalej by ten wiersz zamienil na tablice za pomoca explode, jako separator ustawiając spację
no i teraz przeszukac nasza tablice na ocecnosc 'src=' oraz 'alt=', masz np taki wynik:
wiersz[3] = 'src="/var/www/testy/plik2.txt"'
wiersz[6] = 'alt="tertrtrtrtrt"'
teraz wystarczy tylko usunac to co nam niepotrzebne np. przy pomocy str_replace

aha.. mialem wyjasnic dlaczego przycinac wiersz, aby sie rozpoczynal od '<img'. Ano dlatego, ze przed tym znacznikiem w danym wierszu moze wystapic inny znacznik, np.'<javascript>' ktory moze miec parametr 'src'.

Warto tez byloby pokusic sie o sprawdzenie, czy w dalszej czesci wiersza nie wystepuje kolejny znacznik '<img'

Ostatnio edytowany przez grzegorz.85 (2009-04-20 19:12:55)

Offline

 

#3  2009-04-20 19:25:53

  czadman - Bicycle repairman

czadman
Bicycle repairman
Skąd: Wrocław
Zarejestrowany: 2005-07-08

Re: php + wyciąganie nazw ze znaczników html

Kod:

<?php

$str = 'sadfa /><img src="plik1.txt" alt="test test" /><adfa';
preg_match('/(?<img_tag><img.*\/>)/', $str, $match);
$img_tag = $match['img_tag'];
print $img_tag;
preg_match_all('/(src|alt)=\"(?<attrib>\w+\.\w+\b)|([\w\s]+)\"/', $img_tag, $matches);

print_r($matches);

?>

Trzeba trochę dopracować.


http://www.debian.org/logos/openlogo-nd-50.png

Offline

 

#4  2009-04-21 14:01:42

  owca - Członek DUG

owca
Członek DUG
Skąd: Szczerców
Zarejestrowany: 2007-01-30
Serwis

Re: php + wyciąganie nazw ze znaczników html

A ja bym potraktował kod html jako xml, pobrał wszystkie obiekty img do tablicy i w foreach-u wyświetlił pożądane argumenty.

Offline

 

#5  2009-04-21 14:40:48

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: php + wyciąganie nazw ze znaczników html

A ja bym się zastanowił nad celem takiej operacji, html nie jest odpowiednią technologią do przechowywania danych. No chyba, że to dla jednorazowego wygenerowania statycznego htmla. Jesli nie to lepiej stworzyć bazę danych i napisać skrypt, który do niej wrzuca te dane. Wiadomo sporo roboty, ale jasność rozwiązania zachowana, zdobyta dodatkowo wiedza bezcenna ;]

Offline

 

#6  2009-04-21 18:20:44

  czadman - Bicycle repairman

czadman
Bicycle repairman
Skąd: Wrocław
Zarejestrowany: 2005-07-08

Re: php + wyciąganie nazw ze znaczników html

Czasem zachodzi konieczność parsowania stron. Nie wszystkie parsery xml radzą sobie z błędami, a wiele kodu html to nie xml, a do tego można znaleźć mnóstwo błędów w kodzie html. Wyrażenia regularne są najlepszym wyjściem w takim wypadku.


http://www.debian.org/logos/openlogo-nd-50.png

Offline

 

#7  2009-04-21 22:50:28

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: php + wyciąganie nazw ze znaczników html

Nie no to jest zadanie które muszę wykonać! także chyba zostanie mi parsowanie! Chociaż:

Owca ma też ciekawy pomysł:

A ja bym potraktował kod html jako xml, pobrał wszystkie obiekty img do tablicy i w foreach-u wyświetlił pożądane argumenty.

Tylko nie bardzo siedziałem w xml'ach


debbie
Wrócę jak zjem zupę i drugie danie - tyle
a oto ta zupa:

Offline

 

#8  2009-04-22 00:01:20

  czadman - Bicycle repairman

czadman
Bicycle repairman
Skąd: Wrocław
Zarejestrowany: 2005-07-08

Re: php + wyciąganie nazw ze znaczników html

W dokumentacji php jest praktycznie gotowe rozwiązanie, podane jak na tacy.


http://www.debian.org/logos/openlogo-nd-50.png

Offline

 

#9  2009-05-11 23:46:59

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: php + wyciąganie nazw ze znaczników html

witam ponownie! Właściwie to sprawa wygląda tak - program muszę zrobić w c++ ale prosiłem o pomoc w php bo na podstawie php będe w stanie
prędzej to przenieść na c++ bo funkcje są podobne. Temat jest taki że muszę z pliku np plik.html wyciągnąć wszystkie nazwy plików
oraz nazwy alternatywne lub jeśli nie będzie nazwy alternatywnej to komunikat o jego braku. jest tyle prościej że nie muszę kożystac z żadnego parsera ponieważ mam wyciągnąć wszystko co będzie po < i m g s r c=" 
aż do zamknięcia cudzysłowia oraz po alt="
także do zamknięcia cudzysłowia ( czyli nie waże czy po src będzie odrazu nazwa pliku czy ścieżka do pliku:)
Nie bardzo wiem jak zrobić taki warunek który jeśli napotka I potem M potem G następnie S potem R potem C i = oraz " to żeby po " wypisał mi to na ekranie aż do zamknięcia cudzysłowia( a właściwie zrobił liste na ekranie nazw a obok nich nazw alternatywnych.
Był bym bardzo wdzięczny za jakiekolwiek info:)

Ostatnio edytowany przez debbie (2009-05-11 23:48:13)


debbie
Wrócę jak zjem zupę i drugie danie - tyle
a oto ta zupa:

Offline

 

#10  2009-05-12 00:39:38

  czadman - Bicycle repairman

czadman
Bicycle repairman
Skąd: Wrocław
Zarejestrowany: 2005-07-08

Re: php + wyciąganie nazw ze znaczników html

IMHO niepotrzebnie chcesz wymyślać koło od nowa. Jest mnóstwo różnych parserów do html, xml, sgml oraz wyrażenia regularne. No ale skoro chcesz się bawić w pisanie parsera to polecam zacząć do przerobienia pierwszych trzech rozdziałów Ansii CK&R. Jak wykonasz wszystkie załączone ćwiczenia to już będziesz wiedział jak napisać parser. W zasadzie już po pierwszym rozdziale będziesz miał dobrą szkołę jak operować na tekście. :)


http://www.debian.org/logos/openlogo-nd-50.png

Offline

 

#11  2009-05-12 08:42:15

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: php + wyciąganie nazw ze znaczników html

No spoko! ale przecież pisałem wyżej:

Kod:

jest tyle prościej że nie muszę kożystac z żadnego parsera ponieważ mam wyciągnąć wszystko co będzie po < i m g s r c=" 
aż do zamknięcia cudzysłowia oraz po alt="
także do zamknięcia cudzysłowia ( czyli nie waże czy po src będzie odrazu nazwa pliku czy ścieżka do pliku:)

także wolałbym inaczej to obejść


debbie
Wrócę jak zjem zupę i drugie danie - tyle
a oto ta zupa:

Offline

 

#12  2009-05-12 09:11:40

  owca - Członek DUG

owca
Członek DUG
Skąd: Szczerców
Zarejestrowany: 2007-01-30
Serwis

Re: php + wyciąganie nazw ze znaczników html

Wypróbuj flexa i bisona. Myślę, że będą doskonałe.

http://www.sjp.pl/co/korzysta%C4%87

Ostatnio edytowany przez owca (2009-05-12 09:11:51)

Offline

 

#13  2009-05-12 19:10:02

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: php + wyciąganie nazw ze znaczników html

Ale program ma być nie skomplikowany żeby uzywac jakiś narzędzi czy nakładek parsujących. Chodzi tylko o to aby po napotkaniu img src=" wyrzucał wszystko aż do zamkniecia cudysłowiai to samo po alt. Może ktoś chociaż wie jak to zrobić w php??


debbie
Wrócę jak zjem zupę i drugie danie - tyle
a oto ta zupa:

Offline

 

#14  2009-05-12 20:27:38

  czadman - Bicycle repairman

czadman
Bicycle repairman
Skąd: Wrocław
Zarejestrowany: 2005-07-08

Re: php + wyciąganie nazw ze znaczników html

Kod:

#/usr/bin/env python

from re import compile
from pprint import pprint

plik = 'aaa.html'
img = compile(r'<img (.*?)(/|)>')
atrr = compile(r'(alt|src)="(.*?)"')

f = open(plik, 'r')
source = f.read()
f.close()


images_attrs = img.findall(source)
attr_list = [atrr.findall(x[0]) for x in images_attrs]
attr_dict = [dict(x) for x in attr_list]
pprint(attr_dict)

A w php jest biblioteka tidy. W dokumentacji jest nawet przykład jak wyciągać obrazki (czyt. wyżej), ale zapewne nie przeglądałeś, bo po co?

Ostatnio edytowany przez czadman (2009-05-12 20:42:25)


http://www.debian.org/logos/openlogo-nd-50.png

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)