Python Как я могу извлечь данные с тем же именем класса в BeautifulSoup - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь извлечь данные с помощью библиотеки BeautifulSoup в python. Я использовал почтовый индекс и суп для извлечения.

Мои html данные выглядят так:

<li>

    <ul class="features">

        <li>Year: <strong>2016</strong></li>

        <li>Kilometers: <strong>81,000</strong></li>

    </ul>
    <ul class="features">

        <li>Doors: <strong>2 door</strong></li>

        <li>Color: <strong>White</strong></li>

    </ul>
    <ul class="features">

    </ul>

</li>

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

Мой код:


for title, price, date, features  in zip(soup.select('.listing-item .title'),
                            soup.select('.listing-item .price'),
                            soup.select('.listing-item .date'),
                            soup.select('.listing-item .features')):


    title = title.get_text().strip()
    price = price.get_text().strip()
    date = date.get_text().strip()
    features = features.get_text().strip()

    print(features)


Вывод:

Year: 2016
Kilometers: 81,000
Doors: 2 door
Color: White

Как сохранить год, километры, двери, цвета в отдельных переменных?

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Вы можете попробовать:

from bs4 import BeautifulSoup as bs
from io import StringIO

data = """<li>
    <ul class="features">
        <li>Year: <strong>2016</strong></li>
        <li>Kilometers: <strong>81,000</strong></li>
    </ul>
    <ul class="features">
        <li>Doors: <strong>2 door</strong></li>
        <li>Color: <strong>White</strong></li>
    </ul>
    <ul class="features">
    </ul>
</li>"""

soup = bs(StringIO(data))
Year, Km, Doors, Color = list(map(lambda x: x.text.split(':')[1].strip(), soup.select('.features > li')))
print(Year, Km, Doors, Color)
0 голосов
/ 04 февраля 2020

найти элемент li, который содержит текст, а затем найти следующий сильный тег. Объявите пустой список и добавьте.

Код .

from bs4 import BeautifulSoup

html='''<li>

    <ul class="features">

        <li>Year: <strong>2016</strong></li>

        <li>Kilometers: <strong>81,000</strong></li>

    </ul>
    <ul class="features">

        <li>Doors: <strong>2 door</strong></li>

        <li>Color: <strong>White</strong></li>

    </ul>
    <ul class="features">

    </ul>

</li>
'''
soup=BeautifulSoup(html,'html.parser')
Year=[]
KiloMeter=[]
Doors=[]
Color=[]
for year,km,dor,colr in zip(soup.select('ul.features li:contains("Year:")'),soup.select('ul.features li:contains("Kilometers:")'),soup.select('ul.features li:contains("Doors:")'),soup.select('ul.features li:contains("Color:")')):
    Year.append(year.find_next('strong').text)
    KiloMeter.append(km.find_next('strong').text)
    Doors.append(dor.find_next('strong').text)
    Color.append(colr.find_next('strong').text)

print(Year,KiloMeter,Doors,Color)

Вывод : список

['2016'] ['81,000'] ['2 door'] ['White']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...