BS4: Как мне удалить ненужные HTML-теги и оставить только теги <p> и <ruby>?

1

Я, скорее всего, выполнил это, используя регулярное выражение, но я чувствую, что должен быть более простой способ выполнить это. У меня есть тенденция сделать все сложнее, чем это должно быть печально.

<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>
Теги:
python-3.x
web-scraping
beautifulsoup

2 ответа

1
Лучший ответ

Вы можете использовать селектор 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>]
1

Как это:

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()

Дайте мне знать, если это сработает.

  • 1
    Вы можете просто использовать find_all(['p', 'ruby']) .
  • 0
    Хорошо, просто я все еще относительно новичок в веб-поиске.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню