PHP Projekt

pars

Mitglied
Also erst einmal Hallo zusammen

Ich habe folgendes Projekt :

1.
Dateien aus dieser Website auslesen : http://www.uni-marburg.de/fb15/fachgebiete/makromolekular/mitarbeiter
was ich so gemacht habe aber nicht richtig hinbekommen habe :
PHP:
<html>
<body>
<?php

$fp = fopen("mitarbeiter.htm","r");
if (!$fp)
{
echo "Datei wurde nicht gefunden";
exit;
}

echo "<table border>";
echo "<tr> <td>Nummer</td> <td>Nachname</td>";
echo "<td>Vorname</td> </tr>";
$nr = 0;

while (!feof($fp))
{
$vn = fgets($fp, 450);
$nn = fgets($fp, 450);
$nr = $nr + 1;
echo "<tr> <td>$nr</td> <td>$nn</td>";
echo "<td>$vn</td> </tr>";
}

echo "</table>";
fclose($fp);

?>
</body>
</html>
es liest aber alle Zeilen. Ich will nur die in der mittleren Tabelle eigefügten sieben Herrschaften.

2.
Die Namen der Herrschaften sind verlinkt.
Wie kann ich jetzt etwas schreiben, dass auf diese sieben Namen zugreift, die jeweiligen Seiten auf macht und dann die Infos ausliest?

Ich habe es mal so versucht und bin gescheitert, da nicht alle links die selbe Struktur aufweisen:

PHP:
<HTML>
<BODY>
<?PHP

// HTML Datei einlesen
$content = file_get_contents("mitarbeiter.htm");

// Links aus der Variable holen
preg_match_all("!<a.*?href=\"([^\"]*)\"[^>]*>(.*?)</a>!s",$content,$ergebnisse);

// Alle Links ausgeben
foreach ($ergebnisse[1] as $link)
{
echo $link.'<br>';
}

// Alle Titel ausgeben
foreach ($ergebnisse[2] as $titel)
{
echo $titel.'<br>';
}

?>
</BODY>
</HTML>
Ich muss es so schreiben, dass es auf die Links der jeweilige Namen klickt und somit die einzelnen Daten herausfiltert.
auf alle sieben Namen könnt ihr klicken. Dabei öffnet sich jeweils eine weitere Seite, dass die Daten der jweiligen Person genauer auflistet.
Diese Daten dann muss ich aufgelistet wiedergeben.

Bitte helft mir die Daten von diesen sieben Personen auszulesen und zuspeichern.
Ich weiss nicht mehr weiter.
Bei erfolgreiche hilfe kann ich auch demgemäß euch entgegen kommen.
 
Schau dir am besten selbst einmal den Quelltext der Seite, die du auslesen sollst, an. Versuche dort ein Muster zu finden, das auf die Zeilen bzw. Tags passt, in denen die Mitarbeiter verlinkt sind. Und dann nimmst du dir reguläre Ausdrücke zu Hilfe und filterst die Infos, die du haben möchtest, fein säuberlich heraus ;)

Tipp: Die Mitarbeiter scheinen in Tabellenzellen der CSS-Klasse "first" zu liegen.

Bist also schon auf dem richtigen Weg.
Da du ja sehr viele Anchor-Tags auf der Seite hast, würde ich nicht empfehlen, das Pattern der RegExp nur darauf zu beschränken. Weite es noch aus. Siehe Tipp oben.
 
Könnt ihr mir bitte genauere Antworten geben...ich bin wie gesagt Anfänger
 
Zuletzt bearbeitet:
Bisher suchst du nach Links (Anchor-Tags) und lässt sie ausgeben. Wie du selber gemerkt hast, sind das nicht nur die der Mitarbeiter. Daher solltest du dir den Quelltext der Seite nochmal mit deinen eigenen Augen ansehen und erkennen, dass sich eben diese Links, die du herausgefiltert haben möchtest, in Tabellenzellen (td-Tags) befinden, die mit der CSS-Klasse "first" versehen sind.

HTML:
      <td class="first">
        <div>
           <a href="http://www.uni-marburg.de/fb15/fachgebiete/makromolekular/agarwal"
              title="">
             Agarwal,
                Seema,
               Prof.&thinsp;Dr.
             
           </a>
           
              <br />

              <div class="funktion">
                 Außerplanmäßige Professorin,
                            Leiterin Polymerpraktikum u. Polymeranalytik
                         
              </div>
           
        </div>
      </td>
Du brauchst also "nur" das Suchmuster (Pattern) für deinen regulären Ausdruck anpassen.
Probier doch mal:
PHP:
<html><head><title>Mitarbeiter herausfiltern</title></head>
  <body>
<?php
$url = "http://www.uni-marburg.de/fb15/fachgebiete/makromolekular/mitarbeiter";

$pattern = "=<td\sclass\=\"first\">.*?<a\shref\=\"(.*?)\".*?>(.*?)</a>.*?<\/td>=s";
$subject = file_get_contents($url);
$matches = array();

preg_match_all($pattern, $subject, $matches);

for($i = 0; $i < count($matches[0]); $i++)
{
	for($j = 1; $j < count($matches); $j++)
	{
		echo $matches[$j][$i]."<br />";
	}
	
	echo "<br />\n";
}
?>
  </body>
</html>

Ausgabe:
Code:
http://www.uni-marburg.de/fb15/fachgebiete/makromolekular/agarwal
Agarwal, Seema, Prof.?Dr.

http://www.uni-marburg.de/fb15/fachgebiete/makromolekular/greiner
Greiner, Andreas, Prof.?Dr.

people_details?UniMrPersonenID=Heitz_Walter_0&came_from=http%3A//www.uni-marburg.de/fb15/fachgebiete/makromolekular/mitarbeiter/st_alphabetical_view
Heitz, Walter, Prof.?Dr.

people_details?UniMrPersonenID=Jiang_Shaohua_0&came_from=http%3A//www.uni-marburg.de/fb15/fachgebiete/makromolekular/mitarbeiter/st_alphabetical_view
Jiang, Shaohua, M.?Sc.

people_details?UniMrPersonenID=Mitschang_Fabian_0&came_from=http%3A//www.uni-marburg.de/fb15/fachgebiete/makromolekular/mitarbeiter/st_alphabetical_view
Mitschang, Fabian, Dipl.-Chem.

people_details?UniMrPersonenID=Paulig_Sebastian_0&came_from=http%3A//www.uni-marburg.de/fb15/fachgebiete/makromolekular/mitarbeiter/st_alphabetical_view
Paulig, Sebastian, Dipl.-Chem.

http://www.uni-marburg.de/fb15/fachgebiete/makromolekular/wendorff
Wendorff, Joachim, Prof.?Dr.

Dann hast du deine Mitarbeiter und die URL's zu deren Infoseiten. Den Rest schaffst du dann auch noch.
 
Vielen Dank dass du dir Zeit genommen hast für mich. Danke sehr. Aber mein Problem besteht ja jetzt darin, wie kann ich es ihm beibringen genau auf diese jeweiligen einzelnen Links zu klicken und die jweiligen Seiten aufmachen, sodass ich aber die Daten ablesen kann und sie in vor einer Tabelle wiedergeben kann ? (in Form einer Tabelle ist kann Problem, das kann ich schon ....was für ein Wunder auch)
 
Du liest dir ja die Links aus zu den Seiten. Mit diesen Links (achtung, es muss der absolute Link angegeben werden!) kannst du file_get_contents() füttern und den HTML-Inhalt der Seite somit auslesen. Jetzt kannst du auf der Seite nach den gewünschten Informationen suchen.
 
Kannst du mir dazu ein Beispiel geben bitte , damit ich es mir auch vorstellen und vorallem umsetzen kann ? (wenn es geht anhand des Projektes hier ?) (wenn es nicht geht auch kein Problem)
 
Also ein bisschen Eigeninitiative sollte schon dabei sein. Beispiele gibt es in der PHP-Dokumentation (in meinen Beiträgen verlinkt) oder bei Google. Wenn du dir das machen lassen willst, bist du wohl besser in der Jobbörse aufgehoben..
 
Zurück