2016-10-18 3 views
1

Я пытаюсь извлечь некоторые элементы текста между классом span с веб-сайта.Извлечение текста из тега класса span с помощью beautifulsoup

Вот фрагмент из HTML-кода:

<h1>2 Some address</h1> 
       </div> 
       <div id="smi-summary-items"> 
        <div id="smi-price-string">&euro;230,000</div> 
        <span class="header_text"> Detached House</span><span class="bar">&nbsp;|&nbsp;</span><span class="header_text">3 Beds</span><span class="bar">&nbsp;|&nbsp;</span><span class="header_text">2 Baths</span> 
        <!-- Text_Link_Full_Ad_Unit --> 
        <div id='dfp-text_link_full_ad_unit' class='sale'> 
         <script type='text/javascript'> 
          googletag.cmd.push(function() 
           { 
            googletag.display('dfp-text_link_full_ad_unit'); 
           } 
          ); 
         </script> 
        </div> 

Я хотел бы, чтобы извлечь текст «3 кровати» и «2 ванных комнат».

Я пробовал несколько решений, но в основном получал ошибки или пустой результат.

Может ли кто-нибудь предложить решение?

ответ

2

Из того, что я понимаю, вы можете просто отфильтровать нужные элементы по классам:

[item.get_text() for item in soup.select("span.header_text")] 

Полный код рабочего образца:

from bs4 import BeautifulSoup 

data = """ 
<div id="smi-summary-items"> 
    <div id="smi-price-string">&euro;230,000</div> 
    <span class="header_text"> Detached House</span><span class="bar">&nbsp;|&nbsp;</span><span class="header_text">3 Beds</span><span class="bar">&nbsp;|&nbsp;</span><span class="header_text">2 Baths</span> 
    <!-- Text_Link_Full_Ad_Unit --> 
    <div id='dfp-text_link_full_ad_unit' class='sale'> 
     <script type='text/javascript'> 
      googletag.cmd.push(function() 
       { 
        googletag.display('dfp-text_link_full_ad_unit'); 
       } 
      ); 
     </script> 
    </div>""" 
soup = BeautifulSoup(data, "html.parser") 
print([item.get_text(strip=True) for item in soup.select("span.header_text")]) 

Это производит:

['Detached House', '3 Beds', '2 Baths'] 
0

Следующий код ks для извлечения некоторых элементов текста между классом пролета с веб-сайта

>>> from bs4 import BeautifulSoup 
>>> import re 
>>> content = """<h1>2 Some address</h1> 
...     </div> 
...     <div id="smi-summary-items"> 
...      <div id="smi-price-string">&euro;230,000</div> 
...      <span class="header_text"> Detached House</span> 
<span class="bar">&nbsp;|&nbsp;</span><span class="header_text">3 
Beds</span><span class="bar">&nbsp;|&nbsp;</span><span class="header_text">2 
Baths</span> 
...      <!-- Text_Link_Full_Ad_Unit --> 
...      <div id='dfp-text_link_full_ad_unit' class='sale'> 
...       <script type='text/javascript'> 
...        googletag.cmd.push(function() 
...         { 
...          googletag.display('dfp- 
text_link_full_ad_unit'); 
...         } 
...       ); 
...       </script> 
...      </div>""" 

>>> soup = BeautifulSoup(content, "html.parser") 
>>> req = soup.find_all("span", {"class":"header_text"}) 
>>> print(req) 
[<span class="header_text"> Detached House</span>, <span 
class="header_text">3 Beds</span>, <span class="header_text">2 Baths</span>] 
>>> x23 = [] 
>>> for i in req: 
...  x23.append(i.get_text()) 
... 
>>> print(x23) 
[' Detached House', '3 Beds', '2 Baths']