Seite 1 von 1
Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Dienstag 2. September 2014, 21:10
von Sinnentlehrt
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
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Dienstag 2. September 2014, 21:38
von BlackJack
@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?
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Dienstag 2. September 2014, 22:05
von Sinnentlehrt
*grübel*
Ist eine PHP Datei, auf jeden Fall keine ganze HTML Seite sondern nur ein Teil der über include eingebunden werden soll.
Schlimm??
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Dienstag 2. September 2014, 22:10
von BlackJack
@Sinnentlehrt: Wie gesagt: BeautifulSoup ist ein HTML-Parser. Wenn das PHP mit HTML drin ist, dann funktioniert das nicht.
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Dienstag 2. September 2014, 22:20
von Sinnentlehrt
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>
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Dienstag 2. September 2014, 22:35
von BlackJack
@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>]
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Dienstag 2. September 2014, 22:55
von Sinnentlehrt
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?
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Mittwoch 3. September 2014, 08:18
von Sirius3
@Sinnentlehrt: zwischen Zeile 2 und Zeile 4 wird wohl irgendetwas stehen, das Du uns verheimlichst.
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Mittwoch 3. September 2014, 12:20
von Sinnentlehrt
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()
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Freitag 5. September 2014, 18:07
von BlackJack
@Sinnentlehrt: Falls die Ausnahmebehandlung nicht greift und tatsächlich mindestens eine Datei gefunden und verarbeitet wird, enthält die offenbar nicht das gesuchte.
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Samstag 6. September 2014, 14:27
von Sinnentlehrt
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*
Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Samstag 6. September 2014, 18:30
von EyDu
Mach dir darüber keinen Kopf, so ein Fehler ist jedem schon passiert. Den wirst du bestimmt nicht wieder machen

Re: Mit Beautiful Soup nach bestimmten DIV-Container suchen.
Verfasst: Sonntag 7. September 2014, 11:38
von Sinnentlehrt
Danke für die tröstenden Worte.

Mal gucken wann ich den nächsten Vogel abschiesse.