我想从wired.com上得到一些文章。 一般来说,他们的文章内容如下:
<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"))
为什么不起作用?
另外,在一般情况下和在这种特殊情况下使用findAll
和findChildren
有区别吗?在我看来这两个是一样的。。
字符串文本
"False"
与使用布尔值<False
不同,您需要实际传递recursive=False
:任何非空字符串都将被视为truthy值,您可以传递的唯一有效字符串将是空字符串,即
recursive=""
。但是坚持使用实际的布尔值
False
,也会得到一个空的列表/结果集并返回给recursive=False
,而不是像调用find撸u allnotfind那样没有。相关问题 更多 >
编程相关推荐