使用BeautifulSoup提取特定的嵌套div

时间:2017-08-09 22:38:58

标签: python beautifulsoup

我有这个HTML代码,我正在创建脚本: http://imgur.com/a/dPNYI
我想提取突出显示的文本(“一些文字”)并打印出来。

我尝试通过每个嵌套的div到达我需要的div,就像这样:

import requests
from bs4 import BeautifulSoup

url = "the url this is from"
r = requests.get(url)

for div in soup.find_all("div", {"id": "main"}):
    for div2 in div.find_all("div", {"id": "app"}):
        for div3 in div2.find_all("div", {"id": "right-sidebar"}):
            for div4 in div3.find_all("div", {"id": "chat"}):
                for div5 in div4.find_all("div", {"id": "chat-messages"}):
                    for div6 in div5.find_all("div", {"class": "chat-message"}):
                        for div7 in div6.find_all("div", {"class": "chat-message-content selectable"}):
                            print(div7.text.strip())

我在网上实现了我在导游和类似问题中看到的内容,但我敢打赌,这甚至不是很接近,必须有一个更简单的方法。
这不起作用。它没有打印任何东西,我有点迷失。如何打印突出显示的行(这实际上是div的第一个div子节点,其ID为“chat-messages”)?

HTML CODE:

<!DOCTYPE html>

<html>
<head>
    <title>
    </title>
</head>

<body>
    <div id="main">
        <div data-reactroot="" id="app">
            <div class="top-bar-authenticated" id="top-bar">
            </div>


            <div class="closed" id="navigation-bar">
            </div>


            <div id="right-sidebar">
                <div id="chat">
                    <div id="chat-head">
                    </div>


                    <div id="chat-title">
                    </div>


                    <div id="chat-messages">
                        <div class="chat-message">
                            <div class="chat-message-avatar" style="background-image: url(&quot;https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/65/657dcec97cc00bc378629930ecae1776c0d981e0.jpg&quot;);">
                            </div>
                            <a class="chat-message-username clickable">
                            <div class="iron-color">
                                aloe
                            </div></a>

                            <div class="chat-message-content selectable">
                                <!-- react-text: 2532 -->some text<!-- /react-text -->
                            </div>
                        </div>


                        <div class="chat-message">
                        </div>


                        <div class="chat-message">
                        </div>


                        <div class="chat-message">
                        </div>


                        <div class="chat-message">
                        </div>


                        <div class="chat-message">
                        </div>

1 个答案:

答案 0 :(得分:1)

使用lxml解析器(即soup = BeautifulSoup(data, 'lxml')),您可以将.find与多个类一起使用,就像查找嵌套的div一样简单:

soup.find('div',{'class':'chat-message-content selectable'}).text

只要该类的出现是html中唯一的一行,上面的行应该对你有用。