Как читать объект тега BeautifulSoup Div Tag в качестве словаря

Aug 18 2020

Здесь вы новичок в HTML и BeautifulSoup, приношу свои извинения. . . Я прочитал веб-сайт по недвижимости с BS4 и мне удалось получить информацию, которую я хочу, в конкретном классе Div.

list_1_divs = soup.find_all('div', class_="ListingCell-AllInfo ListingUnit")

BS4 находит 29 родительских Div, каждый из которых содержит множество дочерних Div, но вся необходимая информация, похоже, находится в родительском Div, поэтому я удалил все их дочерние Div. Результирующий родительский элемент Div в переменной « s_row » выглядит как строка, когда я его распечатываю, но в режиме отладки « s_row » описывается как {Tag: 3}, содержащим attrs = {dict: 13}, а затем перечисляет элементы, которые я хочу, в красивом структурированный список в окне отладки.

Как мне распечатать (или передать в Pandas) базовый словарь внутри объекта {Tag}? Моя конечная цель - получить таблицу из 13 элементов словаря в виде столбцов с 29 строками, содержащими значения из каждой « s_row ». Заранее спасибо.

Код:

import urllib.request
from bs4 import BeautifulSoup
wiki = "https://www.lamudi.com.ph/metro-manila/makati/rockwell-1/buy/"
page = urllib.request.urlopen(wiki)
soup = BeautifulSoup(page, features='html.parser')
list_divs = soup.find_all('div', class_="ListingCell-AllInfo ListingUnit")
for s_row in list_divs:
    for child in s_row.find_all("div"):
        child.decompose()
    print(s_row)

Ответы

1 AndrejKesely Aug 18 2020 at 20:03

Если я вас правильно понял, вы хотите извлечь каждый атрибут как столбец в фреймворке данных:

import pandas as pd
import urllib.request
from bs4 import BeautifulSoup


wiki = "https://www.lamudi.com.ph/metro-manila/makati/rockwell-1/buy/"
page = urllib.request.urlopen(wiki)
soup = BeautifulSoup(page, features='html.parser')
list_divs = soup.find_all('div', class_="ListingCell-AllInfo ListingUnit")
all_data = []
for s_row in list_divs:
    all_data.append({})
    for a in s_row.attrs:
        if a == 'class':
            continue
        all_data[-1][a] = s_row[a]

df = pd.DataFrame(all_data)
print(df)

Печать:

   data-price data-category                data-subcategories data-car_spaces data-bedrooms  ... data-price_range data-sqm_range data-rooms_total data-land_size data-subdivisionname
0    82000000   condominium       ["condominium","3-bedroom"]               2             3  ...              NaN            NaN              NaN            NaN                  NaN
1     9800000   condominium          ["condominium","studio"]             NaN             1  ...              NaN            NaN              NaN            NaN                  NaN
2    48990000   condominium  ["condominium","double-bedroom"]             NaN             2  ...      37.8M-48.9M     93-121 sqm              NaN            NaN                  NaN
3    73730000   condominium       ["condominium","3-bedroom"]             NaN             3  ...      45.3M-73.7M    126-202 sqm              NaN            NaN                  NaN
4    26600000   condominium  ["condominium","single-bedroom"]             NaN             1  ...            26.6M         62 sqm              NaN            NaN                  NaN
5    27500000   condominium  ["condominium","double-bedroom"]               1             2  ...              NaN            NaN              NaN            NaN                  NaN
6   130000000   condominium     ["condominium","penthouse-1"]             NaN             4  ...              NaN            NaN              NaN            NaN                  NaN
7    78000000   condominium       ["condominium","3-bedroom"]               2             3  ...              NaN            NaN              NaN            NaN                  NaN
8    55000000   condominium       ["condominium","3-bedroom"]               2             3  ...              NaN            165                3            NaN                  NaN
9    19000000   condominium  ["condominium","single-bedroom"]               1             1  ...              NaN             64                1            NaN                  NaN
10   30000000   condominium  ["condominium","double-bedroom"]             NaN             2  ...              NaN            NaN              NaN            NaN                  NaN
11   14000000   condominium  ["condominium","single-bedroom"]             NaN             1  ...              NaN            NaN              NaN            NaN                  NaN
12   50000000   condominium       ["condominium","3-bedroom"]             NaN             3  ...              NaN            NaN              NaN            NaN                  NaN
13   48000000   condominium       ["condominium","3-bedroom"]             NaN             3  ...              NaN            NaN              NaN            NaN                  NaN
14   27000000   condominium  ["condominium","double-bedroom"]             NaN             2  ...              NaN            NaN              NaN            NaN                  NaN
15   36000000   condominium       ["condominium","3-bedroom"]             NaN             3  ...              NaN            NaN              NaN            NaN                  NaN
16   52000000         house   ["house","single-family-house"]               4             3  ...              NaN            NaN              NaN            110         Palm Village
17   48000000   condominium       ["condominium","3-bedroom"]               2             3  ...              NaN            NaN                4            NaN                  NaN
18   37500000   condominium  ["condominium","double-bedroom"]               2             2  ...              NaN            NaN              NaN            NaN                  NaN
19   19000000   condominium  ["condominium","double-bedroom"]               1             2  ...              NaN            NaN              NaN            NaN                  NaN
20   66700000   condominium       ["condominium","3-bedroom"]               2             3  ...              NaN            NaN              NaN            NaN                  NaN
21   16500000   condominium  ["condominium","double-bedroom"]               1             2  ...              NaN            NaN              NaN            NaN                  NaN
22   12900000   condominium  ["condominium","single-bedroom"]               1             1  ...              NaN            NaN              NaN            NaN                  NaN
23   20000000   condominium  ["condominium","double-bedroom"]               1             2  ...              NaN            NaN              NaN            NaN                  NaN
24   17300000   condominium  ["condominium","single-bedroom"]             NaN             1  ...              NaN            NaN              NaN            NaN                  NaN
25   25000000   condominium  ["condominium","double-bedroom"]             NaN             2  ...              NaN            NaN              NaN            NaN                  NaN
26   14000000   condominium  ["condominium","single-bedroom"]             NaN             1  ...              NaN            NaN              NaN            NaN                  NaN
27   32000000   condominium  ["condominium","double-bedroom"]             NaN             2  ...              NaN            NaN              NaN            NaN                  NaN
28   38000000   condominium  ["condominium","double-bedroom"]               1             2  ...              NaN            NaN              NaN            NaN                  NaN

[29 rows x 17 columns]