# Text zwischen P-Tag auslesen



## Identität (12. November 2012)

Ich habe einen Quelltext. Dort kommt beispielweise folgender Code 5x vor: <p class="info">TEXT</p>. Ich würde nun gern alle 5 Texte die im P-Tag stehen, auslesen.

Kann mir jemand einen Tipp geben, wie ich das am besten anstelle? Mit RegEX habe ich derzeit noch nicht gearbeitet, bin aber lernfreudig (falls es hier benötigt wird?!)

preg_match müsste dafür doch geeignet sein, oder? Nur ich weiß nicht, wie ich nur den Text dazwischen auslesen kann.


----------



## timestamp (12. November 2012)

preg_match arbeitet mit regulären Ausdrücken.
Arbeite dich mal hier durch und poste deinen Versuch. Da helfen wir dir gerne weiter 
RegExp Tutorial


----------



## tombe (12. November 2012)

Die Frage ist ob du erstmal die p-Tags innerhalb des Quelltextes finden musst oder ob du nur den jeweiligen Text zwischen den p-Tags herausfiltern musst.

Im zweiten Fall solltest du dir vielleicht auch mal strip_tags anschauen.


----------



## Identität (12. November 2012)

@timestamp
Was mir auch aus diesem Tutorial nicht klar hevorgeht: Kann ich denn damit nur den Text zwischen "<p class="info">" und "</p>" extrahieren? Geht doch gar nicht?!

@tombe
Entfernt doch nur die Tag oder? Die Tags kommen ja mitten im Qulltext vor, von daher kann ich nicht einfach alle HTML-Tags entfernen.

EDIT: Okay, scheinbar geht es doch mit PREG_MATCH. Teste ich gerade noch ...


----------



## timestamp (12. November 2012)

Es geht auf jeden Fall mit preg_match. Um Text zu "extrahieren", musst du den Teil einklammern (...).


----------



## alxy (12. November 2012)

Lass das mit den regexen mal lieber, und schau dir DOMDocument mal an: http://de2.php.net/manual/de/domdocument.construct.php

Alternativ: http://simplehtmldom.sourceforge.net/


----------



## werwiewas29 (28. Februar 2013)

Ich hab auch so ein ähnliches Problem : 

```
<?PHP
  //
  // Text, der durchsucht werden soll
  $subject = file_get_contents ("http://www.news.at");
  //
  $pattern =('="/(<h1.*>)(a-zA-Z0-9)(<\/h1>)/isxmU"=is');
  print_r ($pattern);
  //
  // RegExp auswerten
  //
  $result = preg_match($pattern, $subject, $subpattern);
  //
  // Ergebnis ausgeben
  //
  
 print_r ($subpattern);
?>
```

es passiert nix..


----------



## alxy (28. Februar 2013)

Nimm doch bitte, bitte DOMDocument - ist doch dafür gemacht....

Abgesehen davon ist das, was du da versuchst, Content-Theft (Diebstahl copyrightgeschützten Materials). Wenn die das wollten, hätten die dafür ne API bereitgestellt


----------



## werwiewas29 (4. März 2013)

also statt file_get_contents .. DOM******!

ich hab jetz den Code bissl umgewandelt wo ich drin als 1. prüfen möcht ob überhaupt <h1> enthalten ist.. und dann soll er mir ausgeben was in <h1>::? </h1> enthalten ist. 


```
<?PHP
  //
  // Text, der durchsucht werden soll
  $subject = file_get_contents ("http://www.allhoteldeals.net");
  //
  $pattern =('="/(<h1.*>)(a-zA-Z0-9)(<\/h1>)/isxmU"=is');
  //print_r ($pattern);
  //
  // RegExp auswerten
  //
  do {
	if('="/(<h1.*>)*(<\/h1>)/isxmU"=is' == $subject){
		 
	  $reg = "";
	  $result = preg_match($pattern, $subject, $reg);
  
	$hier = $reg[1].$reg[2];
	print_r ($hier);}
	else {print "False";}
?>
```


----------



## Yaslaw (4. März 2013)

Warum jetzt nciht das Dom-Objekt?

```
$dom = new DOMDocument();
    $dom->load($html);
    $h1List = $dom->getElementsByTagName('h1');
    if($h1List->length == 0){
        print_r("keine h1");
    }else{
        foreach($h1List as $h1){
            print_r($h1->nodeValue);
        }
    }
```


----------



## werwiewas29 (4. März 2013)

müsste mich erst in die DOM function einlesen.. wie die genau funktioniert.. was die macht...etc.


----------



## Yaslaw (4. März 2013)

Weiterbildung kann nie schaden....


----------



## werwiewas29 (4. März 2013)

ja  überhaupt wenn man grad in Ausbildung is..

noch ne Frage, Was macht das : 

```
print_r($h1->nodeValue
```


----------



## hela (4. März 2013)

werwiewas29 hat gesagt.:


> noch ne Frage, Was macht das :
> 
> ```
> print_r($h1->nodeValue
> ```


Warte einfach noch bis in deiner Ausbildung die Bedienung einer Suchmaschine behandelt wird. Dann kannst du im PHP-Handbuch alles nachlesen, auch über die print_r-Funktion.


----------



## werwiewas29 (5. März 2013)

eher ned.. bin ja grad im Praktikum

hab den Code für ein anderes Bsp. umgeändert.. obwohl Javascript enthalten ist,, sagt er " nicht enthalten!"

```
$dom = new DOMDocument();
    @$dom->load($html);
    $javasList = $dom->getElementsByTagName('\"[a-zA-Z0-9*]/javascript/i\"');
    if($javasList->length == 0){
        print_r("kein javascript");
    }
	else{
        foreach($javasList as $JS){
            print_r($JS->nodeValue);
        }
    }  



?>
```


----------



## Dimenson (5. März 2013)

Hallo,

ich folgenden Code ausprobiert und es funktioniert auch soweit:


```
<?php

$html=file_get_contents('http://google.de');

    $dom = new DOMDocument();
	libxml_use_internal_errors(true);
    $dom->loadHTML($html);
	libxml_clear_errors();
    $javaList = $dom->getElementsByTagName('script');
    if($javaList->length == 0){
        print_r("kein javascript");
    }else{
		print_r("javascript enthalten");
    }  

?>
```


Du kannst eigentlich davon ausgehen, dass hauptsächlich Javascript innerhalb des Tags <script></script> mit den entsprechenden Html Element "script" vor kommt. Deshalb getElementsByTagName=script.

libxml_use_internal_errors(true);
und 
libxml_clear_errors();

sorgen dafür, dass kein Fehler angezeigt wird. Der  angezeigte Fehler scheint wohl Dokumententyp abhängig zu sein .

Naja, probier es mal aus


----------



## werwiewas29 (6. März 2013)

Hi, danke erstmals. 

habs ausprobiert.. es kommt raus "kein javas." / aber im Quelltext ist schon eins zu finden.. und das was ich machen muss ,, geht dann noch nen Schritt weiter : Keyword in JS suchen. 

```
html=@file_get_contents('http://netcarshow.com');

    $dom = new DOMDocument();
    libxml_use_internal_errors(true);
    @$dom->loadHTML($html);
    libxml_clear_errors();
    $javaList = $dom->getElementsByTagName('script');
    if($javaList->length == 0){
        print_r("kein javascript");
    }else{
        print_r("javascript enthalten");
    }
```


----------



## Dimenson (6. März 2013)

Moin, bekommst du eine Fehlermeldung wenn du das @ vor file_get_contents weg nimmst?

Auf jedenfall bekomme ich die Meldung hier:

Warning: file_get_contents(http://netcarshow.com): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in

Wenn ich es mit deiner URL versuche. 
Für sieht es so aus als wenn der agent wo file_get_conents nutzt, geblockt wird von dem Server oder so ähnlich.


----------



## werwiewas29 (7. März 2013)

ja manchmal nimmt er das f_g_c nicht.. dann setz ich nen Klammeraffen davor. aber bei den Bsp. mit JS , funktioniert es schon.
aber wenn ich f_g_c , mit preg_match verwende ,kommt die Fehlermeldung

und mein 2.Problem is. er gibt mir zwar aus : javascript enthalten, aber ich weiß nicht über was ich auf das <sript> zugreifen kann bzw. auslesen


----------



## Yaslaw (7. März 2013)

Die Frage habe ich dir doch schon mal beantwortet.
Steht alles in der PHP-Dokumentation unter DOMDOCUMENT.


----------



## werwiewas29 (7. März 2013)

ja danke.. aber ich kämpf imma noch damit


----------



## Yaslaw (7. März 2013)

Was hat deine Recherche ergeben? Was hast du schon versucht?
WIr helfen gerne weiter bei konkreten Problemen. Aber nicht bei 'Helft mir das Handbuch zu lesen'


----------



## werwiewas29 (7. März 2013)

ich hab schon einiges versucht. aber ich kann nicht direkt auf <script> oder (<h1>)zugreifen.. was da enthalten ist. 

```
$html=file_get_contents('http://www.hotels.com');

    $dom = new DOMDocument();
    libxml_use_internal_errors(true);
    @$dom->loadHTML($html);
    libxml_clear_errors();
    $javaList = $dom->getElementsByTagName('script');
	
    if($javaList->length == 0){
        print_r("kein javascript");
    }else{
        print_r("javascript enthalten");
    }
```

ich beschäftige mich eh  fast den ganzen Tag damit..


----------



## Yaslaw (7. März 2013)

Oh, hier habe ich was gefunden das dir weiterhilft
http://www.tutorials.de/php/392760-leeres-array.html#post2029258
und
http://www.tutorials.de/php/392760-leeres-array.html#post2029272

Dort steht wie man das sucht.
Soviel verrate ich dir. Das Objektattribut heisst 'textContent'. Jetzt musst du nur noch das richtige Objekt finden....

Zu deiner Information. Ich habe noch nie mit dem DOMDocument gearbeitet. Aber ich habe innerhalb von 15 Sekunden die Lösung auf deine Frage im PHP-Onlinehandbuch gefunden. Gut, ich habe mehr Erfahrung. Aber ich erwarte von dir das du es mindestens versuchst. Und ehrlich, wer programmieren will sollte mindestens wissen wie er ein Handbuch bedienen muss.

Ich erarbeite dir ansonsten gerne eine fertige Lösung inkl. Kommentaren und Anleitungen im Code.
Kostet nur 150 CHF pro Stunde Aufwand.


----------



## werwiewas29 (7. März 2013)

Danke für die Links..  und danke für´s angebot.. aber ich will´s ja auch selber lernen..  
LG


----------

