使用 Beautiful Soup 从非类部分获取数据

Posted

技术标签:

【中文标题】使用 Beautiful Soup 从非类部分获取数据【英文标题】:Using Beautiful Soup to get data from non-class section 【发布时间】:2014-02-07 19:59:21 【问题描述】:

我还是很菜鸟,学python和美汤。我已经挂断了如何从非类 html 中获取文本。

这是我正在使用的 HTML 的 sn-p:

<section class="userbody">
    <script type="text/javascript"></script>
    <figure class="iw">
        <div id="ci">
            <img id="iwi" title="image 2"  src="http://images.craigslist.org/00C0C_daJm4U9yU5B_600x450.jpg" style="min-width: inherit; min-height: 450px;"></img>
        </div>
        <div id="thumbs"></div>
    </figure>
    <div class="mapAndAttrs">
        <div class="mapbox">
            <div id="map" class="leaflet-container leaflet-fade-anim" data-longitude="-84.072447" data-latitude="33.908534" tabindex="0">
                <div class="leaflet-map-pane" style="transform: translate(0px, 0px);"></div>
                <div class="leaflet-control-container">
                    <div class="leaflet-top leaflet-left"></div>
                    <div class="leaflet-top leaflet-right"></div>
                    <div class="leaflet-bottom leaflet-left"></div>
                    <div class="leaflet-bottom leaflet-right">
                        <div class="leaflet-control-attribution leaflet-control"></div>
                    </div>
                </div>
            </div>
            <div class="mapaddress">

                Some Address

            </div>
        </div>
        <div class="attributes"></div>
    </div>
    <section id="postingbody">
            some posting info
            <br></br>
             more posting info
             <br></br>
    </section>
    <section class="cltags"></section>
    <div class="postinginfos"></div>
</section>

我已经可以拉取地址信息了:

     for address in soup.findAll("div",  "class" : "mapaddress" ):
       addressText = ''.join(address.findAll(text=True))

findAll() 似乎不适用于我尝试过的没有类的标签

     for post in soup.findall("section",  "id" : "postingbody" ):
       postText = ''.join(post.findAll(text=True))

如何获取部分 id="postingbody" 中的文本?

【问题讨论】:

谢谢大家。这个社区太棒了! 【参考方案1】:

考虑到s 是html 字符串,您可以执行以下操作:

from bs4 import BeautifulSoup

soup = BeautifulSoup(s)
print soup.find(attrs='id' : 'postingbody')

输出:

<section id="postingbody">
            some posting info
            <br/>
             more posting info
             <br/>
</section>

【讨论】:

【参考方案2】:

除了 Games Brainiac 的回答:要获取文本,只需将 .text 放在其后面。

所以:

print soup.find(attrs='id' : 'postingbody').text

【讨论】:

感谢@SergioP。你知道我要去哪里:)【参考方案3】:

如果你使用 BeautifulSoup4,你可以这样做:

element = soup.find(id="postingbody")

【讨论】:

以上是关于使用 Beautiful Soup 从非类部分获取数据的主要内容,如果未能解决你的问题,请参考以下文章

从页面中获取所有链接 Beautiful Soup

使用 Beautiful Soup 获取所有 HTML 标签

如何使用 Beautiful Soup 获取锚标签的 href?

Beautiful Soup 找不到我想要的 HTML 部分

Beautiful Soup Find - 只获取文本

启用以使用 Beautiful Soup 获取特定网站的 img 标签