У меня есть следующий html:
<td>
<input maxlen = "1" name = "db" size = "1" type = "text" value = "25"/>
<div style = "display:inline-block;position:relative;top:6px;left:0px;width:20px;">
<input class = "p_b" name = "ta" style = "height:1em; width:1.5em;line-height:1em;padding:0px;margin:0px;border:0px;background-color:#f3f3f3" type = "submit" value = "▴"/>
<input class = "p_b" name = "ta" style = "height:1em; width:1.5em;line-height:1em;padding:0px;margin:0px;border:0px;background-color:#f3f3f3" type = "submit" value = "▾"/>
</div>
<span style = "position:relative;top:8px">
</span>
<input maxlen = "1" name = "dc" size = "1" type = "text" value = "0"/>
<div style = "display:inline-block;position:relative;top:6px;left:0px;width:20px;">
<input class = "p_b" name = "tb" style = "height:1em; width:1.5em;line-height:1em;padding:0px;margin:0px;border:0px;background-color:#f3f3f3" type = "submit" value = "▴"/>
<input class = "p_b" name = "tb" style = "height:1em; width:1.5em;line-height:1em;padding:0px;margin:0px;border:0px;background-color:#f3f3f3" type = "submit" value = "▾"/>
</div>
</td>
Мне нужно извлечь оба числа из value="25" и value="0". Я сделал обходной путь, например:
y = soup.findAll('input', {'type':'text'})
a = re.findall('(?<=value = ")(\d*)',str(y))
Но я думаю, что должен быть более прямой способ сделать это через парсер, может ли кто-нибудь помочь с этим?
Более или менее дубликат этого поста.
Отвечает ли это на ваш вопрос? Python BeautifulSoup — получение входного значения
@MetallimaX BeautifulSoup не поддерживает XPath
@Parolla Я знаю, и тебе тоже не нужно этого придерживаться. XPath был сделан для таких запросов.
Попробуйте ниже строку кода извлечь @value
из каждого входного узла
values = [element['value'] for element in soup.findAll('input', {'type':'text'})]
P.S. Обратите внимание, что использование регулярных выражений для парсинга веб-страниц — очень плохая практика — существует достаточно инструментов для парсинга веб-страниц, которые могут легко сделать это за вас (например, BeautifulSoup и lxml можно использовать в Python)
Я бы использовал подход XPath.