Удалить (разложить) элемент <a>из результата выбора BeautifulSoup - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть HTML-код, над которым я работаю с BeautifulSoup:

<h1>
    <img src="CHN.jpg" alt="image">
        Zhuzhou Wide-Ocean Motor
    <a class="button" href="/en/top300">
        See more information
    </a>                    
</h1>

С помощью простого выбора и get_text

soup.select('h1:nth-child(1)')[0].get_text().strip()

Я получаю (\ n = новые строки)

Zhuzhou Wide-Ocean Motor \n\n\n See more information

Но я бы хотел избавиться от «Посмотреть дополнительную информацию», которая есть в тегах <a>.Я пытался использовать decompose(), но он не работает с выбранным результатом.Как я могу заставить декомпозировать () на работу?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Другой ответ уже охватил все необходимые приемы, чтобы получить нужный текст.Однако, если вы все еще хотите использовать .decompose() или .extract(), то должно работать следующее:

from bs4 import BeautifulSoup

htmlelem= """
<h1>
    <img src="CHN.jpg" alt="image">
        Zhuzhou Wide-Ocean Motor
    <a class="button" href="/en/top300">
        See more information
    </a>                    
</h1>
"""

soup = BeautifulSoup(htmlelem, 'lxml')
[elem.extract() for elem in soup.select("a.button")]
item = soup.select_one("h1").get_text(strip=True)
print(item)

Вывод:

Zhuzhou Wide-Ocean Motor
0 голосов
/ 02 февраля 2019

Есть несколько вариантов для вас.

Вариант 1:

В одну сторону, которая разделена на '\ n', без пробелов,тогда у вас будет список каждого текстового элемента.Тогда в этом случае вам нужен только первый элемент.

import bs4

html = '''<h1>
    <img src="CHN.jpg" alt="image">
        Zhuzhou Wide-Ocean Motor
    <a class="button" href="/en/top300">
        See more information
    </a>                    
</h1>'''


soup = bs4.BeautifulSoup(html, 'html.parser')

text = [ item.strip() for item in soup.text.split('\n') if item.strip() != ''][0]

print (text)

Вывод:

print (text)
Zhuzhou Wide-Ocean Motor

Опция 2:

Найдите этот тег <a> и получите предыдущего брата:

html = '''<h1>
    <img src="CHN.jpg" alt="image">
        Zhuzhou Wide-Ocean Motor
    <a class="button" href="/en/top300">
        See more information
    </a>                    
</h1>'''


soup = bs4.BeautifulSoup(html, 'html.parser')

text = soup.find('a').previousSibling.strip()
print (text)

Вывод:

print (text)
Zhuzhou Wide-Ocean Motor

Опция 3:

Вероятно, так я и поступлю.Найдите тег <img> и получите следующего брата:

html = '''<h1>
    <img src="CHN.jpg" alt="image">
        Zhuzhou Wide-Ocean Motor
    <a class="button" href="/en/top300">
        See more information
    </a>                    
</h1>'''


soup = bs4.BeautifulSoup(html, 'html.parser')

text = soup.find('img').nextSibling.strip()
print (text)

Вывод:

print (text)
Zhuzhou Wide-Ocean Motor
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...