Как я могу выделить текстовые элементы из этой HTML String? Python - PullRequest
1 голос
/ 04 августа 2020

Доброе утро,

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

HTML String:

<span><strong>13:30</strong><br/>SecondWord</span></a>

My Мы надеемся, что вывод будет:

text1 = 13:30
text2 = "SecondWord"

Сейчас я использую al oop для всех строк в таблице, где я беру текст и разделяю его на новую строку. Я заметил, что у HTML есть символ разрыва строки между ними, поэтому он отображается отдельно в Интернете, я пытался заменить его новой строкой и запустить на нем свой разбиение - однако мои string.replace () и re.sub () подходы, похоже, не работают. Мне бы хотелось знать, что я делаю не так.

Последний подход:

resub_pat = r'<br/>'
rows=list()
for row in table.findAll("tr"):
    a = re.sub(resub_pat,"\n",row.text).split("\n")

Это немного хешируется вместе, но я надеюсь, что уловил свою проблему! Мне не удалось найти подобных проблем.

Ответы [ 3 ]

2 голосов
/ 04 августа 2020

Вы можете попробовать:

from bs4 import BeautifulSoup
import re

# the soup
soup = BeautifulSoup("<span><strong>13:30</strong><br/>SecondWord</span></a>", 'lxml')

# the regex object
rx = re.compile(r'(\d+:\d+)(.+)')

# time, text
text = soup.find('span').get_text()
x,y  = rx.findall(text)[0]
print(x)
print(y)
1 голос
/ 04 августа 2020
from bs4 import BeautifulSoup


txt = '''<span><strong>13:30</strong><br/>SecondWord</span></a>'''
soup = BeautifulSoup(txt, 'html.parser')

text1, text2 = soup.span.get_text(strip=True, separator='|').split('|')

print(text1)
print(text2)

Печать:

13:30
SecondWord
1 голос
/ 04 августа 2020

Использование recursive=False для получения только прямого текста и strong.text для получения другого.

Пример:

from bs4 import BeautifulSoup

soup = BeautifulSoup("<span><strong>13:30</strong><br/>SecondWord</span></a>", 'lxml')

# text1
print(soup.find("span").strong.text)     # --> 13:30
# text2          
print(soup.find("span").find(text=True, recursive=False))  # --> SecondWord
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...