soup.find("tagName", { "id" : "articlebody" })
Warum werden die <div id="articlebody"> ... </div>
Tags und Inhalte dazwischen NICHT zurückgegeben ? Es gibt nichts zurück. Und ich weiß, dass es existiert, weil ich direkt darauf starre
soup.prettify()
soup.find("div", { "id" : "articlebody" })
funktioniert auch nicht.
( BEARBEITEN: Ich habe festgestellt, dass BeautifulSoup meine Seite nicht richtig analysiert hat, was wahrscheinlich bedeutete, dass die Seite, die ich analysieren wollte, nicht richtig in SGML oder was auch immer formatiert ist.)
python
beautifulsoup
Tony Stark
quelle
quelle
Antworten:
Sie sollten Ihr Beispieldokument veröffentlichen, da der Code einwandfrei funktioniert:
Das Finden von
<div>
s in<div>
s funktioniert auch:quelle
div = soup.find(id="articlebody")
soup.find('div', id='articlebody')
So finden Sie ein Element anhand seiner
id
:quelle
Beautiful Soup 4 unterstützt die meisten CSS-Selektoren mit dieser
.select()
Methode . Daher können Sie einenid
Selektor verwenden, z.Wenn Sie den Typ des Elements angeben müssen, können Sie vor dem Selektor einen Typselektor hinzufügen
id
:Die
.select()
Methode gibt eine Sammlung von Elementen zurück. Dies bedeutet, dass dieselben Ergebnisse wie im folgenden.find_all()
Methodenbeispiel zurückgegeben werden :Wenn Sie nur ein einzelnes Element auswählen möchten, können Sie einfach die folgende
.find()
Methode verwenden :quelle
Ich denke, es gibt ein Problem, wenn die 'div'-Tags zu stark verschachtelt sind. Ich versuche, einige Kontakte aus einer Facebook-HTML-Datei zu analysieren, und die Beautifulsoup kann keine Tags "div" mit der Klasse "fcontent" finden.
Dies passiert auch bei anderen Klassen. Wenn ich im Allgemeinen nach Divs suche, werden nur diejenigen angezeigt, die nicht so stark verschachtelt sind.
Der HTML-Quellcode kann eine beliebige Seite von Facebook der Freundesliste eines Freundes von Ihnen sein (nicht der eines Ihrer Freunde). Wenn jemand es testen und Ratschläge geben kann, würde ich es wirklich schätzen.
Dies ist mein Code, in dem ich nur versuche, die Anzahl der Tags "div" mit der Klasse "fcontent" zu drucken:
quelle
Höchstwahrscheinlich hat der Standard-Beautifulsoup-Parser ein Problem. Ändern Sie einen anderen Parser wie 'lxml' und versuchen Sie es erneut.
quelle
soup = BeautifulSoup(data, parser="html.parser")
In der Beautifulsoup-Quelle ermöglicht diese Zeile, dass Divs in Divs verschachtelt werden. Ihre Besorgnis in Lukas 'Kommentar wäre also nicht gültig.
Ich denke, Sie müssen die gewünschten Attribute angeben, z
quelle
haben Sie versucht
soup.findAll("div", {"id": "articlebody"})
?klingt verrückt, aber wenn Sie Sachen aus der Wildnis kratzen, können Sie mehrere Divs nicht ausschließen ...
quelle
Ich benutzte:
Als meine Syntax für find / findall; Dies sollte jedoch nicht anders sein, es sei denn, es gibt andere optionale Parameter zwischen dem Tag und der Attributliste.
quelle
Ist mir auch beim Versuch passiert, Google zu kratzen.
Am Ende habe ich Pyquery benutzt.
Installieren:
Verwenden:
quelle
Hier ist ein Codefragment
Wie Sie sehen können, finde ich alle Tags und dann alle Tags mit class = "article"
quelle
Die
Id
Immobilie ist immer eindeutig gekennzeichnet. Das heißt, Sie können es direkt verwenden, ohne das Element anzugeben. Daher ist es ein Pluspunkt, wenn Ihre Elemente den Inhalt analysieren müssen.quelle