나는 wired.com에서 기사를 얻으려고합니다. 이 같은 일반적으로 자신의 기사 '내용보기 :BeautifulSoup : findAll 재귀가 작동하지 않습니다.
<article itemprop="articleBody">
<p>Some text</p>
<p>Next text</p>
<p>...</p>
<p>...</p>
</article>
또는과 같습니다 :
<article itemprop="articleBody">
<div class="listicle-captions marg-t...">
<p></p>
</div>
</article>
은 그래서 페이지 1 형의 경우, <p>
및 <h>
는, 추출 할 페이지의 경우 동안 유형 2입니다. 다른 것을하십시오. 따라서 <p>
과 <h>
이 <article>
의 직계 하위 항목 인 경우 유형 1입니다. 다음 코드를 시도한 결과 <p>
과 <h>
을 찾고 태그 이름을 출력합니다. 문제는, recursive="False"
은 유형 2 페이지에서 테스트했을 때 태그를 찾지 못했지만 (나는 NonType
객체를 얻는 것으로 예상했기 때문에) 도움이되지 않는 것 같습니다.
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"))
왜 작동하지 않습니까?
PS 또한 일반적으로 findAll
과 findChildren
을 사용하는 것과이 경우에 차이가 있습니까? 이 두 .. 나에게 같은 모양
감사합니다. 그것은 완전히 나의 통지를 피했다. – parsecer
아무런 문제가 없습니다. 천만에요. –