очистка B в <span><span> поток текста </span> B </span> с использованием BeautifulSoup - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть следующий тег элемента bs4:

<span><span>some content</span> B</span>

Длина строки B неизвестна (я назвал ее B для упрощения)

Как я могу использовать beautifulSoup для извлечения "b "? Или у меня просто есть решение, чтобы извлечь текст, а затем использовать некоторые методы регулярных выражений

Спасибо

Редактировать: Полный код

def get_doc_yakarouler(license_plate,url = 'https://www.yakarouler.com/car_search/immat?immat='):
    response = requests.get(url+license_plate)
    content = response.content 
    doc = BeautifulSoup(content,'html.parser')
    result = doc.span.text
    if 'identifié' in result :
        return doc
    else : 
        return f"La plaque {license_plate} n'est pas recensé sur yakarouler"

doc = get_doc_yakarouler('AA300AA')
span = doc.find_all('span')
motorisation_tag = span[1]

Я хочу извлечь "1.6 TDI"

Я нашел решение, используя: motorisation_tag.text.replace (u '\ xa0', '') .split ('') [1], но я хотел бы, если бы это было напрямую возможно с использованием bs4

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Предполагая, что у вас есть переменная span, представляющая внешний тег <span>, вы можете сделать следующее для извлечения 'B': span.contents[1]. Это работает, потому что .contents вернет список содержимого тега, в данном случае [<span>some content</span>, ' B']. И тогда вы можете получить доступ к тексту «B» как второй элемент массива. Имейте в виду, что если перед B есть пробел, как вы показали в примере HTML, пробел будет включен в строку

1 голос
/ 08 апреля 2020
from bs4 import BeautifulSoup as bs , NavigableString
html = '<span><span>some content</span> B</span>'
soup = bs(html, 'html.parser')
span = soup.find("span")
# First approach Using Regular Expressions
outer_text_1 = span.find(text=True, recursive=False)
# Second approach is looping through the contents of the tag and check if it's the outer text and not a tag
outer_text_2 = ' '.join([t for t in span.contents if type(t)== NavigableString])

print(outer_text_1) # output B
print(outer_text_2) # output B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...