Очистка данных с несколькими именами классов с помощью BeautifulSoup - PullRequest
0 голосов
/ 04 марта 2020

Я практикую чистку с помощью веб-сайта недвижимости, и я хочу отбросить все адреса для последних продаж. Например, часть сайта HTML выглядит так: url = https://www.compass.com/agents/irene-vuong/

<div class="profile-active-listings" role="tabpanel" id="active-listings-sales">
    <div class="card-content">
      <a class="card-title" href="/listing" data-tn="label-address"> 111 East 35th </a>
                                            ........
<div class="textIntent-headline1"> Recent Sales</div>
    <div class="card-content">
      <a class="card-title" href="/morelisting" data-tn="label-address"> East 4th </a>

И я пытаюсь получить доступ ко всем адресам, используя приведенный ниже код :

for i in range(0, 30):
    h = soup.findAll('a', {'class':'card-title'})[i]
    print(h)

Однако я получаю сообщение об ошибке:

IndexError: list index out of range

Я получаю первые несколько адресов, но только перед «Недавними продажами». Это только получение адресов в первой части, но не весь сайт. Как мне получить все адреса?

1 Ответ

0 голосов
/ 04 марта 2020

Метод findAll возвращает список всех элементов, соответствующих вашим критериям поиска.

В вашем случае он возвращает список длиной 2.

, после чего вы перебираете 0-29 и ищем эти индексы в вашем списке длины 2.

Отсюда ваша ошибка.

Ваш код должен читать что-то вроде:

for x in soup.findAll('a', {'class':'card-title'}):
  print(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...