Ich möchte gerne mittels PHP preg_match Daten aus einer HTML-Seite extrahieren.
Für den ersten Punkt hab ich noch ne Idee: "/<div class="content">(.*?)</div>/" aber dann ist bei mir gähnende Leere... Hoffe Ihr könnt mir Helfen.
Nur mal als Verdeutlichung, wie umständlich dein Vorhaben mit preg_match ist – das Ganze mit XPath:
html = lxml.html.fromstring(htmlquellcode)
gesamtbildurl = html.xpath('//div[@class="content"]/img[@title="Gesamtbild"]/@src')[0]
tabelle = list()
for spalten in (tr.xpath('td') for tr in html.xpath('//div[@class="content"]/table[1]/tr[position()>1]')):
'''
Doppelt verschachtelte Schleife:
Je tr-Zeile ein Durchlauf (aus tr in html.xpath('//…tr')), wobei in spalten
eine Liste mit jeweiligen td-Elementen steckt (aus tr.xpath('td')).
'''
tabelle.append({
"Nummer": spalten[0].text_content(),
"Bild": spalten[1].xpath("img/@src")[0],
"Typ": spalten[2].text_content(),
"Bezeichnung": spalten[3].text_content()
})
Ergibt in tabelle:
[ { 'Bezeichnung': 'Eins',
'Bild': 'http://localhost/img/Bild1.gif',
'Nummer': '1',
'Typ': 'I'},
{ 'Bezeichnung': 'Zwei',
'Bild': 'http://localhost/img/Bild2.gif',
'Nummer': '2',
'Typ': 'II'},
{ 'Bezeichnung': 'Drei',
'Bild': 'http://localhost/img/Bild3.gif',
'Nummer': '3',
'Typ': 'III'}
]
Das ist jetzt zwar Python und lxml, aber der Punkt ist, dass du nur zweieinhalb recht einfache XPath-Aufrufe brauchst und dazu zwei Schleifen, um die Daten auszulesen. Und mit PHP geht das doch ganz bestimmt genauso einfach :>