Ich benutze Beutifulsoup 4 und Python 3.5+, um Webdata zu extrahieren. Ich habe folgende html, aus dem ich zu extrahieren bin:Mit Beautifulsoup, extrahiere Tags des Elements außer den angegebenen
<div class="the-one-i-want">
<p>
content
</p>
<p>
content
</p>
<p>
content
</p>
<p>
content
</p>
<ol>
<li>
list item
</li>
<li>
list item
</li>
</ol>
<div class='something-i-don't-want>
content
</div>
<script class="something-else-i-dont-want'>
script
</script>
<p>
content
</p>
</div>
Alle Inhalte, die ich extrahieren möchten im <div class="the-one-i-want">
Element gefunden wird. Gerade jetzt, ich bin die folgenden Methoden verwenden, die die meiste Zeit arbeiten:
soup = Beautifulsoup(html.text, 'lxml')
content = soup.find('div', class_='the-one-i-want').findAll('p')
Dies schließt Skripte, seltsam Einsatz div
‚s und sonst un-vorhersehbare Inhalte wie Anzeigen oder empfohlenen Inhalt 'Typ Zeug .
Nun gibt es einige Instanzen, in denen andere Elemente als nur die Tags <p>
vorhanden sind, die inhaltlich für den Hauptinhalt wie Listen relevant sind.
Gibt es eine Möglichkeit, den Inhalt von den <div class="the-one-i-want">
in einer Art und Weise als solche zu erhalten:
soup = Beautifulsoup(html.text, 'lxml')
content = soup.find('div', class_='the-one-i-want').findAll(desired-content-elements)
Wo desired-content-elements
wäre inklusive jedes Element, dass ich fit für diesen bestimmten Inhalt als? Wie zum Beispiel alle <p>
Tags, alle <ol>
und <li>
Tags, aber keine <div>
oder <script>
Tags.
Vielleicht bemerkenswert, ist meine Methode, den Inhalt zu speichern:
content_string = ''
for p in content:
content_string += str(p)
Dieser Ansatz sammelt die Daten, in der Reihenfolge des Auftretens, die als schwierig erweisen würde, zu verwalten, wenn ich einfach verschiedene Elementtypen durch verschiedene Iterationsprozesse gefunden . Ich möchte NICHT die Re-Konstruktion von Split-Listen verwalten, um die Reihenfolge wieder herzustellen, in der jedes Element ursprünglich im Inhalt auftrat, wenn möglich.
Funktioniert wie ein Charme, danke für Ihre Hilfe @padraic – theeastcoastwest