Мне нужно получить значения из элемента «ul», но в нем нет элементов «li». Вместо этого у него есть тег со значениями массива. Как показано ниже.

<div class ="family">
<ul class ="age">
<ll-per-person count ="[4, 36, 60]" extracount="[]"></ll-per-person>
</ul>
</div>

Я хочу получить значения счетчика. Это код, который я пробовал на Python

r = requests.get(**url**)
soup = BeautifulSoup(r.content, 'html5lib')
table = soup.find('div', attrs={'class': 'family'})
for ul in table.findAll('ul', attrs={'class': 'age'}):
    print(ul)
    for li in ul.findAll('ll-per-person'):
        print(li)
        for numbers in li.findAll(attrs = {"ll-per-person" : "count"}):
            print(numbers)

Я получаю вывод для «print (ul)» и «print (li)». Но не «печать (числа)». Ошибка тоже не возникает. Мне нужно получить значения счетчика, который представляет собой массив. Как это сделать?

0
ArdsonW 8 Июл 2021 в 09:46

3 ответа

Лучший ответ

Вы можете просто сделать это, потому что count является атрибутом ll-per-person, и вы можете получить атрибут такого элемента.

for li in ul.findAll('ll-per-person'):
    print(li["count"])

Если это поможет в решении вашей проблемы, не забудьте отметить это как ответ.

1
Kshitiz 8 Июл 2021 в 06:54

Чтобы извлечь числа из тега <ll-per-person>, вы можете использовать модуль json, например:

import json
from bs4 import BeautifulSoup

html_doc = """
<div class ="family">
<ul class ="age">
<ll-per-person count="[4, 36, 60]" extracount="[]"></ll-per-person>
</ul>
</div>
"""

soup = BeautifulSoup(html_doc, "html.parser")

for item in soup.select("ll-per-person"):
    lst = json.loads(item["count"])
    print("Numbers are:")
    for number in lst:
        print(number)

Печать:

Numbers are:
4
36
60
0
Andrej Kesely 8 Июл 2021 в 08:18

Поскольку тег "u" имеет <ll-per-person count="[4, 36, 60]" extracount="[]"></ll-per-person> в качестве второго дочернего элемента (используйте soup.u.contents для просмотра дочерних элементов) , мы можем получить к нему доступ и получить значение атрибута count. .

from bs4 import BeautifulSoup as bs
html_doc = """
<div class ="family">
<ul class ="age">
<ll-per-person count ="[4, 36, 60]" extracount="[]"></ll-per-person>
</ul>
</div>"""
soup = bs(html_doc,'html.parser')
tag_ll =  soup.ul.contents[1]

print(tag_ll['count'])
0
Tanish Sarmah 8 Июл 2021 в 09:08