如何获取非iv标记的HTMLfree内容

2024-04-20 14:26:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到所有标签的HTML自由内容,除了<div id="nav">内标签的

例如,使用以下HTML:

<div id="nav">
    <h1>Navigate!</h1>
    <nav role="navigation">
        <h2 class="structural">Main navigation</h2>
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/about/">About</a></li>
        </ul>
        </nav>

        <div id="inside_nav">
            <ul>    
                <li><a href="/">inside_home</a></li>
                <li><a href="/about/">inside_About</a></li>
            </ul>
        </div>
</div>

代码:

div = soup1.find("div", id="nav")

def match_only_non_divs(tag):
    return (tag.findParent("div").get('id') == div.get('id')) and tag.name != "div"

print div.findAll(match_only_non_divs, text=True)

此代码应输出:

[u'\n', u'Navigate!', u'Main navigation',
u'Home', u'About', u'\n']

但是!它实际上输出:

[u'\n', u'Navigate!', u'Main navigation',
u'Home', u'About', u'\n',
u'inside_home', u'inside_About', u'\n']

代码不应该走在内部div(id=“inside\u nav”)的内部,但它应该走在内部div的内部。 请帮忙!!你知道吗


Tags: 代码dividhomemaintagli标签
2条回答

至于问题的原因,下面是doc对text关键字的看法:

If you use text, then any values you give for name and the keyword arguments are ignored.

所以,findAll基本上忽略了div.findAll(match_only_non_divs, text=True)中的match_only_non_divs。你应该在匹配之后得到文本(正如johnkeyes所建议的)。你知道吗

您有两种选择:

print [t.string for t in div.findAll(match_only_non_divs)]
# [u'Navigate!', None, u'Main navigation', None, None, u'Home', None, u'About']

print [t.string for t in div.findAll(match_only_non_divs) if t.string]
# [u'Navigate!', u'Main navigation', u'Home', u'About']

相关问题 更多 >