Как получить значение элемента, используя текст в BeautifulSoup - PullRequest
0 голосов
/ 14 февраля 2020

У меня проблема с использованием BeautifulSoup. Мне нужно получить значение элемента, используя только некоторый текст внутри, но я понятия не имею, как это сделать. Есть какой-то HTML код:

<option class="" value="9_72"> 42,5 EUR · 9 US </option>
<option class="" value="9_73"> 43 EUR · 9,5 US </option>
<option class="" value="9_74"> 44 EUR · 10 US </option>

Есть ли возможность его получить?

Я пробовал этот код:

scraper = cfscrape.create_scraper()
content_rdy = scraper.get(link, headers=headers).text
soup = bs4.BeautifulSoup(content_rdy, 'lxml')

input_id = soup.find_all('option', text='44 EUR')
print(input_id)

, но он дает мне пусто []. Если я использую:

input_id = soup.find_all('option')

Я не могу получить точное значение параметра. И проблема в том, что единственное, как я могу получить это значение - это размер внутри этого элемента.

Я хочу получить это -> значение = " 9_72 "

Ответы [ 2 ]

1 голос
/ 14 февраля 2020
from bs4 import BeautifulSoup as bs

html = """
<option class="" value="9_72"> 42,5 EUR · 9 US </option>
<option class="" value="9_73"> 43 EUR · 9,5 US </option>
<option class="" value="9_74"> 44 EUR · 10 US </option>"""

soup = bs(html, 'html.parser')

options = [option for option in soup.find_all('option') if '44 EUR' in option.text]
values = [option.get("value") for option in options] 

возвращает все теги, текст которых содержит строку "44 EUR"

0 голосов
/ 14 февраля 2020

Добавьте это после строки:

input_id = soup.find_all('option')
for options in input_id:
    option_text = options.text 
    if '44 EUR' in options_text:
       final_options_text = options_text

print(final_options_text)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...