Как получить текст следующего тега? (Прекрасный Суп)

#python #python-3.x #web-scraping #beautifulsoup #web-crawler

Вопрос:

HTML — код является :

 <div class="card border p-3">
               <span class="small text-muted">Contact<br></span>
               <div>Steven Cantrell</div>
               <div class="small">Department of Justice</div>
               <div class="small">Federal Bureau of Investigation</div>
               <!---->
               <!---->
               <!---->
               <div class="small"><a href="mailto:skcantrell@fbi.gov ">skcantrell@fbi.gov</a></div>
               <div class="small">256-313-8835</div>
            </div>
 

Я хочу получить вывод внутри <div> тега, т. Е. Steven Cantrell .

Мне нужен такой способ, чтобы я мог получить содержимое следующего тега. В данном случае это 'span',{'class':'small text-muted'}

То, что я пытался, это :

 rfq_name = soup.find('span',{'class':'small text-muted'})
print(rfq_name.next)
 

Но это напечатано Contact вместо названия.

Ответ №1:

Вы почти на месте, просто измените свой отпечаток на: print(rfq_name.find_next('div').text)

Найдите элемент, содержащий текст "Contact" . Затем используйте .find_next() , чтобы получить следующий <div> тег.

 from bs4 import BeautifulSoup

html = '''<div class="card border p-3">
               <span class="small text-muted">Contact<br></span>
               <div>Steven Cantrell</div>
               <div class="small">Department of Justice</div>
               <div class="small">Federal Bureau of Investigation</div>
               <!---->
               <!---->
               <!---->
               <div class="small"><a href="mailto:skcantrell@fbi.gov ">skcantrell@fbi.gov</a></div>
               <div class="small">256-313-8835</div>
            </div>'''
            
soup = BeautifulSoup(html, 'html.parser')
contact = soup.find(text='Contact').find_next('div').text
 

Выход:

 print(contact)
Steven Cantrell