2017-08-09 113 views
3

我有我創建的腳本HTML代碼: http://imgur.com/a/dPNYI
我想提取高亮文本(「一些文本」),並打印出來。

我試圖通過每一個div嵌套在去的路上,我需要在div,像這樣:使用BeautifulSoup來提取特定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代碼:

<!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> 
+0

請將html作爲文本發佈,而不是圖片,它可以幫助每個人試圖幫助! –

+0

@ViníciusAguiar你說得對,現在就做! –

回答

1

使用lxml解析器(即soup = BeautifulSoup(data, 'lxml')),可以使用.find有多個類,就像一個類一樣簡單找到嵌套的div:

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

線之上應只要該類的發生是html中的唯一一個,就爲你工作。

+0

這不是唯一的發生,因爲這個類是在每個類「聊天消息」。那麼,你知道任何其他解決方案嗎? –

+0

我添加了相關的HTML代碼。每個帶有「聊天消息」類的div也具有屬性class =「chat-message-content selectable」,所以它不是唯一的發生。我試過了你的建議,但這沒有奏效。 不知道該怎麼辦? –

+0

「但這不起作用」 - 究竟發生了什麼?我用上面的html運行了代碼行,它返回了我期望的輸出:''\ nsome text \ n''。 「每個帶有」聊天消息類「的div也有屬性class =」聊天消息內容可選「」 - 如果您沒有特定的特徵來區分您想要的標籤和其他的**都是**,那麼當然這將是一個很難做到的事情。 –