Я, скорее всего, выполнил это, используя регулярное выражение, но я чувствую, что должен быть более простой способ выполнить это. У меня есть тенденция сделать все сложнее, чем это должно быть печально.
<p><span class="colorL"><ruby>三重県<rt>みえけん</rt></ruby></span>の<span class="colorL"><ruby>伊賀市<rt>いがし</rt></ruby></span>は、<a class="dicWin" href="javascript:void(0)" id="id-0000"><ruby><span class="under">忍者</span><rt>にんじゃ</rt></ruby></a>の<a class="dicWin" href="javascript:void(0)" id="id-0001"><span class="under">ふるさと</span></a>だと<ruby>言<rt>い</rt></ruby>われています。</p>
Вы можете использовать селектор CSS, встроенный в BeautifulSoup:
data = '''<p><span class="colorL"><ruby>三重県<rt>みえけん</rt></ruby></span>の<span class="colorL"><ruby>伊賀市<rt>いがし</rt></ruby></span>は、<a class="dicWin" href="javascript:void(0)" id="id-0000"><ruby><span class="under">忍者</span><rt>にんじゃ</rt></ruby></a>の<a class="dicWin" href="javascript:void(0)" id="id-0001"><span class="under">ふるさと</span></a>だと<ruby>言<rt>い</rt></ruby>われています。</p>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'lxml')
print(soup.select('ruby, p'))
Это выберет только теги <ruby>
и <p>
:
[<ruby>言<rt>い</rt></ruby>, <ruby>三重県<rt>みえけん</rt></ruby>, <ruby>伊賀市<rt>いがし</rt></ruby>, <ruby><span class="under">忍者</span><rt>にんじゃ</rt></ruby>, <p><span class="colorL"><ruby>三重県<rt>みえけん</rt></ruby></span>の<span class="colorL"><ruby>伊賀市<rt>いがし</rt></ruby></span>は、<a class="dicWin" href="javascript:void(0)" id="id-0000"><ruby><span class="under">忍者</span><rt>にんじゃ</rt></ruby></a>の<a class="dicWin" href="javascript:void(0)" id="id-0001"><span class="under">ふるさと</span></a>だと<ruby>言<rt>い</rt></ruby>われています。</p>]
Как это:
data = BeautifulSoup(your_html, 'html.parser')
clean_data = (data.find_all('p'),data.find_all('ruby'))
print(clean_data)
Чтобы получить содержание/текст в этих тегах:
p_text = clean_data.find_all('p').get_text()
Дайте мне знать, если это сработает.
find_all(['p', 'ruby'])
.