BeautifulSoup, сопоставляющий неправильный класс - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю с HTML, который выглядит следующим образом:

<td class="hidden-xs BuildingUnit-price" data-sort-value="625000">
<span class="price">$625,000  </span>
</td>
<td class="hidden-xs BuildingUnit-bedrooms" data-sort-value="4.0">
        4 rooms, 2 beds
      </td>
<td class="hidden-xs BuildingUnit-bathrooms">
        5 baths
      </td>
<td class="hidden-xs" data-sort-value="1">
    1 bath
  </td>

Я написал скрипт ниже, чтобы определить теги td, которые имеют класс "hidden-xs", чтобы получить числованные комнаты для объявлений о недвижимости, но они соответствуют классу "hidden-xs BuildingUnit-price".Как я могу это исправить?

#Extract the number of baths
import re
lst_baths=list()
baths=soup.find_all("td", class_=["hidden-xs"])  
bath_lines=[td.get_text().strip() for td in baths]
pattern=re.compile(r'(\d{1})\D*(bath|baths)$')
for bath in bath_lines:
    match=pattern.match(bath)
    if match:
        lst_baths.append(bath.split()[0])

Например, как написано в настоящее время, мой код перехватывает строку «5 ванных комнат», но я хочу, чтобы он только перехватил строку «1 ванна».

1 Ответ

0 голосов
/ 10 декабря 2018

Найден способ проверить класс каждого матча:

#Extract the baths
lst_baths=list()
temp_lst=list()
baths=soup.find_all("td", class_=["hidden-xs"])
for item in baths:
    if item['class']==['hidden-xs']:
        temp_lst.append(item)
    else:
        pass
bath_lines=[td.get_text().strip() for td in temp_lst]
pattern=re.compile(r'(\d{1})\D*(bath|baths)$')
for bath in bath_lines:
    match=pattern.match(bath)
    if match:
        lst_baths.append(bath.split()[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...