Попробуйте это:
{
"query": {
"range" : {
"price" : {
"gte" : 1000,
"lte" : 2000
}
}
}
}
Запрос диапазона
Совпадает с документами с полями, которые имеют термины в определенном диапазоне. Тип запроса Lucene зависит от типа поля, для строковых полей, TermRangeQuery, а для полей число / дата - запрос NumericRangeQuery.
gte
- больше, чем или равно
lte
- меньше или равноhttps://www.elastic.co/guide/en/elasticsearch/reference/current/ запрос-DSL-диапазона query.html
Сделайте следующее:
product_sizes = view_product.find('dl', id='dl_1')
c = 0
for product_size in product_sizes.find_all('li'):
if c == 1:
print(product_size.span.text)
c = c + 1
Это даст вам желаемый результат, который вы ищете:
36
product_size = product_size.span.text[0]
выведет символ в 1-й позиции строки, следовательно, вы получаете 3, 3, 3, 3, 3, 4
вместо 35, 36, 37, 38, 39, 40
Нет необходимости выполнять цикл for. Если вам нужен 2-й элемент из product_sizes.find_all('li')
, вам просто нужно вызвать эту позицию с помощью product_sizes.find_all('li')[1]
. Вы можете сделать это в меньшем количестве строк кода, как показано ниже, но просто для демонстрации логики. .
#Get all elements in view_product dl, id='dl_1'
product_sizes = view_product.find('dl', id='dl_1')
# From product_sizes, find all the 'li' tags and choose the 2nd element
product_size = product_sizes.find_all('li')[1]
# Get the text
product_size = product_size.span.text
# print the text
print(product_size)
Вам, вероятно, не нужен цикл для достижения того, что вы ищете.
findall() #It returns a list
Вы можете просто сделать, как
product_sizes.find_all('li')
, который возвращает список в качестве вывода, а затем вы можете нарезать в соответствии с вашими требованиями. Например, произнесите 2nd Element затем
print(product_sizes.find_all('li')[1].text)
Наконец, ваш код будет выглядеть следующим образом
product_sizes = view_product.find('dl', id='dl_1')
print(product_sizes.find_all('li')[1].text) #Prints second element.
Вывод:
36
Спасибо всем за ваш вклад. Я перепробовал все и получил хороший ответ. Кажется, достаточно просто. Причина, по которой я хочу это, потому что я хочу напечатать его в формате csv в одну строку, и всякий раз, когда он получил ошибку, я хочу, чтобы он оставлялся пустым, чтобы он оставлял место для других данных, как в электронной таблице. Но это другая проблема для другого дня. Хочешь учиться 1-му, а потом, если я все еще застрял, спросит в новой теме (?).
Кстати, ниже приведен код, который я пишу на основе знаний, которые я получаю от каждого ответа, который вы, ребята, даете здесь.
product_sizes = view_product.find('dl', id='dl_1')
product_size01 = product_sizes.find_all('li')[0].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size02 = product_sizes.find_all('li')[1].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size03 = product_sizes.find_all('li')[2].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size04 = product_sizes.find_all('li')[3].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size05 = product_sizes.find_all('li')[4].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size06 = product_sizes.find_all('li')[5].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size07 = product_sizes.find_all('li')[6].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size08 = product_sizes.find_all('li')[7].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size09 = product_sizes.find_all('li')[8].text.replace('\r', '').replace('\n', '').replace(" ","")
product_size10 = product_sizes.find_all('li')[9].text.replace('\r', '').replace('\n', '').replace(" ","")
Спасибо вам, ребята, за быстрый ответ и отличное сообщество.