Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Sinnentlehrt
User
Beiträge: 67 Registriert: Mittwoch 30. Januar 2013, 22:32
Dienstag 2. September 2014, 21:10
Hallo Leute,
möchte einen bestimmten DIV-Container aus einer PHP Datei extrahieren. Habe jetzt verschiedene Versuche ohne Erfolg durchgeführt. BeautifulSoup an sich und das Skript laufen. Nur komme ich nicht an diesen Container ran.
Hier mal mein BS Ausdruck:
Code: Alles auswählen
testline = soup.find_all("div", attrs={"id" : "info_mobil"})
Und hier der Container:
Code: Alles auswählen
<div id="info_mobil">
<h2>48282 Emsdetten</h2>
Öffnungszeiten:<br>
</div>
Weiß jemand wie es geht? Und schon mal Danke für die Hilfe.
Gruss,
Gutschy
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
BlackJack
Dienstag 2. September 2014, 21:38
@Sinnentlehrt: Das „aus einer PHP-Datei” klingt verdächtig. BeautifulSoup ist für HTML, also hast Du da HTML das von PHP erzeugt wurde, oder versuchst Du tatsächlich PHP-Quelltext zu parsen?
Sinnentlehrt
User
Beiträge: 67 Registriert: Mittwoch 30. Januar 2013, 22:32
Dienstag 2. September 2014, 22:05
*grübel*
Ist eine PHP Datei, auf jeden Fall keine ganze HTML Seite sondern nur ein Teil der über include eingebunden werden soll.
Schlimm??
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
BlackJack
Dienstag 2. September 2014, 22:10
@Sinnentlehrt: Wie gesagt: BeautifulSoup ist ein HTML-Parser. Wenn das PHP mit HTML drin ist, dann funktioniert das nicht.
Sinnentlehrt
User
Beiträge: 67 Registriert: Mittwoch 30. Januar 2013, 22:32
Dienstag 2. September 2014, 22:20
Hmm,
einige Versuche habe allerdings schon gefruchtet.
funktioniert.
Und es ist eigentlich auch viel HTML drin, oder ist das dann so ne' DOM Geschichte in der Hirachien unbedingt eingehalten werden müssen?
Mal die PHP Datei:
Code: Alles auswählen
<title>Dettens-Pizzeria-02572-81662-Grevener-Damm-36-Emsdetten</title>
<?php include("../css/screen_mobil.inc"); ?>
</head>
<body>
<div id="mittel_position">
<div id="header">
<div id="title">
<span class="title_keywords">
<h1>Dettens Pizzeria · Tel:02572/8 16 62 · Grevener Damm 36</h1>
</span>
</div>
<div id="info_mobil_position">
<div id="info_mobil">
<h2>48282 Emsdetten</h2>
Öffnungszeiten:<br>
Mo-Fr 11:30-13:30<br>
17:00-23:00<br>
So-Sa & Feier 17:00-23:00<br clear="all"/><br clear="all"/>
<b>Mindestbestellwert: 6,90EUR</b><br>
<b>Reckenfeld,Hembergen,</b><br>
<b>und Saerbeck: 15,-EUR</b>
</div>
</div>
</div>
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
BlackJack
Dienstag 2. September 2014, 22:35
@Sinnentlehrt: Also ich finde in dem gezeigten PHP/HTML etwas mit dem Ausdruck der bei Dir angeblich nichts findet:
Code: Alles auswählen
In [4]: soup.find_all("div", attrs={"id" : "info_mobil"})
Out[4]:
[<div id="info_mobil">
<h2>48282 Emsdetten</h2>
Öffnungszeiten:<br/>
Mo-Fr 11:30-13:30<br/>
17:00-23:00<br/>
So-Sa & Feier 17:00-23:00<br clear="all"/><br clear="all"/>
<b>Mindestbestellwert: 6,90EUR</b><br/>
<b>Reckenfeld,Hembergen,</b><br/>
<b>und Saerbeck: 15,-EUR</b>
</div>]
Sinnentlehrt
User
Beiträge: 67 Registriert: Mittwoch 30. Januar 2013, 22:32
Dienstag 2. September 2014, 22:55
Bei mir kommt als Ausgabe nur ein Paar [] Klammern.
Ich pack das ganze in ein Dictionary mit der Pfad Angabe.
Code: Alles auswählen
testline = soup.find_all("div", attrs={"id" : "info_mobil"})
inc_header_list[folderpath] = testline
for pfad, zeile in inc_header_list.items():
print ("Pfad:{0}" .format(pfad))
print ("Zeile:{0}" .format(zeile))
Also das ist der Code in groben Zügen. Und eigentlich läuft der ja auch.
Aber ich schätze mal du siehst schon wo das Problem liegt, oder?
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Sinnentlehrt
User
Beiträge: 67 Registriert: Mittwoch 30. Januar 2013, 22:32
Mittwoch 3. September 2014, 12:20
Hallo Sirius,
na ja, stimmt schon, so ein bißchen Code ist da noch.
Code: Alles auswählen
import os
from collections import defaultdict
from bs4 import BeautifulSoup
def filter_inc_header():
inc_header_list = {}
zaehler = 0
targetpath = os.path.abspath(".")
print (targetpath)
for folderpath, dirs, files in os.walk(targetpath):
foldername = os.path.basename(folderpath)
if foldername.startswith("speika"):
suchpfad = os.path.join(folderpath, "inc.header.php")
try:
#print (suchpfad)
text_container = []
#print (folderpath)
soup = BeautifulSoup(open(suchpfad, "r"))
testline = soup.find_all("div", attrs={"id" : "info_mobil"})
#print (testline)
inc_header_list[folderpath] = testline
except:
print("{0}: Lesen misslungen!".format(suchpfad))
for pfad, zeile in inc_header_list.items():
print ("Pfad:{0}" .format(pfad))
print ("Zeile:{0}" .format(zeile))
ordner = pfad.split(os.sep)
print ("Ordner:{0}" .format(ordner[5]))
filter_inc_header()
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
BlackJack
Freitag 5. September 2014, 18:07
@Sinnentlehrt: Falls die Ausnahmebehandlung nicht greift und tatsächlich mindestens eine Datei gefunden und verarbeitet wird, enthält die offenbar nicht das gesuchte.
Sinnentlehrt
User
Beiträge: 67 Registriert: Mittwoch 30. Januar 2013, 22:32
Samstag 6. September 2014, 14:27
Hi BlackJack, das muß ich dir zustimmen, ich habe leider über 3 Tage nicht bemerkt das ich mit zwei Datei Versionen das Skript getestet habe. Und ich hätte mir gewünscht das du das ganze schon vergessen hättest.
Dann bräuchte ich das hier nicht zu schreiben.
BS läuft wunderbar!! Und ich habe wohl so was wie eine Wahrnehmungsstörung.
*SCHÄM*
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
EyDu
User
Beiträge: 4881 Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin
Samstag 6. September 2014, 18:30
Mach dir darüber keinen Kopf, so ein Fehler ist jedem schon passiert. Den wirst du bestimmt nicht wieder machen
Das Leben ist wie ein Tennisball.
Sinnentlehrt
User
Beiträge: 67 Registriert: Mittwoch 30. Januar 2013, 22:32
Sonntag 7. September 2014, 11:38
Danke für die tröstenden Worte.
Mal gucken wann ich den nächsten Vogel abschiesse.
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.