Ich versuche, Artikel von wired.com zu bekommen. Allgemeinen ihre Artikel Inhalt sieht wie folgt aus:Beautifulsoup: findAll rekursiv funktioniert nicht
<article itemprop="articleBody">
<p>Some text</p>
<p>Next text</p>
<p>...</p>
<p>...</p>
</article>
oder so:
<article itemprop="articleBody">
<div class="listicle-captions marg-t...">
<p></p>
</div>
</article>
Deshalb möchte ich, wenn die Seite vom Typ 1, die <p>
und <h>
extrahiert werden, während, wenn die Seite ist vom Typ 2 - tu etwas anderes. Also, wenn die <p>
und <h>
sind direkte Nachkommen von <article>
, dann ist es Typ 1. Ich habe den folgenden Code versucht, es sucht nach <p>
und <h>
und druckt die Tag-Namen. Die Sache ist, die recursive="False"
scheint nicht zu helfen, denn wenn sie auf der Seite des Typs 2 geprüft wird, findet sie die Umbauten, während es nicht sollte (ich erwartete, ein Objekt zu erhalten).
import urllib.request
from bs4 import BeautifulSoup
import datetime
import html
import sys
articleUrl="https://www.wired.com/2016/07/greatest-feats-inventions-100-years-boeing/"
soupArticle=BeautifulSoup(urllib.request.urlopen(articleUrl), "html.parser")
articleBody=soupArticle.find("article", {"itemprop":"articleBody"})
articleContentTags=articleBody.findAll(["h1", "h2","h3", "p"], recursive="False")
for tag in articleContentTags:
print(tag.name)
print(tag.parent.encode("utf-8"))
Warum funktioniert es nicht?
PS Gibt es auch einen Unterschied zwischen der Verwendung von findAll
und findChildren
im Allgemeinen und in diesem speziellen Fall? Diese beiden gleich aussehen zu mir ..
Vielen Dank! Es ist meiner Aufmerksamkeit völlig entgangen. – parsecer
Kein Problem, gern geschehen. –