问题描述
这里是HTML和BeautifulSoup的新功能,因此是appologies。 。 。 我用BS4阅读了一个房地产网站,并设法在特定的Div类中获取了我想要的信息
list_1_divs = soup.find_all('div',class_="ListingCell-AllInfo ListingUnit")
BS4找到了29个父Div,每个Div包含许多子Div,但是我想要的所有信息似乎都在父中,因此我删除了所有他们的子Div。当我打印它时,变量“ s_row ”中生成的父Div看起来像一个字符串,但是调试模式将“ s_row ”描述为 {Tag:3} attrs = {dict:13} ,然后在“调试”窗口的漂亮结构化列表中列出我想要的元素。
如何在{Tag}对象内部打印(或传递给Pandas)基础词典?我最终的目标是将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)
解决方法
如果我没看错,您想将每个属性提取为数据框中的列:
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]