Mit Beautiful Soup nach bestimmten DIV-Container suchen.

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.
Antworten
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

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>
      &Ouml;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

@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

*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

@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

Hmm,

einige Versuche habe allerdings schon gefruchtet.

Code: Alles auswählen

testline = soup.h2
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 &middot; Tel:02572/8 16 62 &middot; Grevener Damm 36</h1>
            </span>
            </div>
        <div id="info_mobil_position">
            <div id="info_mobil">
                <h2>48282 Emsdetten</h2>
                &Ouml;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

@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

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.
Sirius3
User
Beiträge: 17757
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sinnentlehrt: zwischen Zeile 2 und Zeile 4 wird wohl irgendetwas stehen, das Du uns verheimlichst.
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

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

@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

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. :oops: Dann bräuchte ich das hier nicht zu schreiben.

BS läuft wunderbar!! Und ich habe wohl so was wie eine Wahrnehmungsstörung. :roll:
*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

Mach dir darüber keinen Kopf, so ein Fehler ist jedem schon passiert. Den wirst du bestimmt nicht wieder machen :wink:
Das Leben ist wie ein Tennisball.
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

Danke für die tröstenden Worte. :wink: 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.
Antworten