Python 如何获取非div标记的HTML自由内容

Python 如何获取非div标记的HTML自由内容,python,screen-scraping,beautifulsoup,Python,Screen Scraping,Beautifulsoup,我想找到所有标签的HTML免费内容,除了 例如,使用以下HTML: <div id="nav"> <h1>Navigate!</h1> <nav role="navigation"> <h2 class="structural">Main navigation</h2> <ul> <li><a href="/">Hom

我想找到所有标签的HTML免费内容,除了

例如,使用以下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>
此代码应输出:

[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的内部。
请帮忙

您有两种选择:

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']

您有两种选择:

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']

至于问题的原因,以下是doc关于
text
关键字的说明:

如果使用文本,则会忽略为名称和关键字参数指定的任何值


因此,
findAll
基本上忽略了
div.findAll中的
match_only_non_divs
(match_only_non_divs,text=True)
。您应该在进行匹配后获得文本(正如John Keyes建议的那样)。

至于问题的原因,下面是doc关于
文本
关键字的说明:

如果使用文本,则会忽略为名称和关键字参数指定的任何值


因此,
findAll
基本上忽略了
div.findAll中的
match_only_non_divs
(match_only_non_divs,text=True)
。您应该在匹配后获得文本(正如约翰·凯斯建议的)。

感谢Avaris的解释:)感谢Avaris的解释:)