Python: как напечатать только n-ую строку в результате print () - PullRequest
0 голосов
/ 19 января 2019

только недавно изучил веб-скребинг с использованием Python 3 и Beautifulsoup.У меня есть проблема, чтобы напечатать единственную строку, которую я хочу.

Ниже я предоставляю код, который я использую.

product_sizes = view_product.find('dl', id='dl_1')
for product_size in product_sizes.find_all('li'):
    product_size = product_size.span.text
    print(product_size)

Предположим, что при печати я получил такой результат

35
36
37
38
39
40

Хочу, скажем, напечатать 2-й ряд.«36».Как я могу это сделать?Я пробовал [] на

    product_size = product_size.span.text[0]

, но я получил

3
3
3
3
3
4

Я ожидаю, когда я напечатаю, у меня что-то вроде этого

36

Спасибо.У меня такое чувство, что это новый вопрос, но я безуспешно гуглю.

Ответы [ 4 ]

0 голосов
/ 20 января 2019

Спасибо всем за ваш вклад. Я перепробовал все и получил хороший ответ. Кажется, достаточно просто. Причина, по которой я хочу это, потому что я хочу напечатать его в формате 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(" ","")

Спасибо вам, ребята, за быстрый ответ и потрясающее сообщество.

0 голосов
/ 19 января 2019

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)
0 голосов
/ 19 января 2019

Вам, вероятно, не нужен цикл для достижения того, что вы ищете.

findall() #It returns a list

Вы можете просто сделать как

product_sizes.find_all('li')

, который возвращает список как вывод, а затем вы можете нарезать в соответствии с вашими требованиями. Например, скажите 2-й элемент, а затем

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
0 голосов
/ 19 января 2019

Сделайте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...