I am using beautifulsoup to scrape data from a real estate website.
This is the link to the page: https://www.imoti.net/bg/obiavi/r/prodava/bulgaria/?page=1&sid=iXMpXe
I have the following code that runs well.
from requests_html import HTMLSession
from bs4 import BeautifulSoup
import pandas as pd
import re
s = HTMLSession()
url = 'https://www.imoti.net/bg/obiavi/r/prodava/bulgaria/?page=1&sid=iXMpXe'
r = s.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
def get_prices(urls):
prices = []
type_of_property = []
for price in soup.find('ul', {'class': 'list-view real-estates'}).find_all('strong', {'class': 'price'}):
price_text = price.get_text()
price_arr = re.findall('[0-9] ', price_text)
final_price = ''
for each_sub_price in price_arr:
final_price = each_sub_price
prices.append(final_price)
for property_type in soup.find('ul', {'class': 'list-view real-estates'}).find_all('div', {'class': 'inline-group'}):
property_type_value = property_type.get_text()
type_of_property.append(property_type_value)
return prices, type_of_property
print(get_prices(url))
The output I get is:
(['1000', '1341', '1381', '1400', '2659', '11990', '14000', '18900', '23000', '25000', '28500', '29923', '31714', '34034', '35000', '35806', '36615', '37900', '39386', '40523', '42000', '42174', '44000',
'44300', '44400', '45000', '45899', '46000', '47550', '47999'], ['\nпродава Земеделски имот, 2833 м2\nВелико Търново област, с.Въглевци\n', '\nпродава Земеделски имот, 7186 м2\nВелико Търново област, с.Въглевци\n', '\nпродава Офис, 36 м2\nПловдив област, гр.Първомай\n', '\nпродава Парцел, 543 м2\nСофия, Сердика\n', '\nпродава Търговски обект, 125 м2\nПловдив област, с.Караджалово\n', '\nпродава Гараж, паркомясто, 17 м2\nСофия, Център, бул. Т. Александров\n', '\nпродава Къща, 120 м2\nПазарджик област, с.Поибрене\n', '\nпродава Парцел, 728 м2\nСмолян, Устово\n', '\nпродава Магазин, 31 м2\nСофия, Люлин 9\n', '\nпродава Парцел, 382 м2\nСофия област, с.Мала Църква\n', '\nпродава Двустаен апартамент, 32 м2\nБургас, Сарафово\n', '\nпродава Къща, 124 м2\nСофия област, с.Осиковица\n', '\nпродава Къща, 64 м2\nСофия област, гр. Етрополе\n', '\nпродава Къща, 100 м2\nМонтана област, гр.Берковица\n', '\nпродава Заведение, 185 м2\nСофия, Младост 4\n', '\nпродава Къща, 184 м2\nПловдив област, с.Новаково\n', '\nпродава Едностаен апартамент, 52 м2\nПловдив, Христо Смирненски\n', '\nпродава Къща, 105 м2\nПловдив област, с.Брестник\n', '\nпродава Земеделски имот, 7000 м2\nБлагоевград област, гр.Банско\n', '\nпродава Двустаен апартамент, 59 м2\nПловдив, Кючук Париж\n', '\nпродава Двустаен апартамент, 75 м2\nПловдив, Южен\n', '\nпродава Двустаен апартамент, 60 м2\nПловдив, Христо Смирненски\n', '\nпродава Двустаен апартамент,
67 м2\nВарна, Трошево\n', '\nпродава Двустаен апартамент, 68 м2\nБургас област, гр.Черноморец\n', '\nпродава Двустаен апартамент, 95 м2\nБлагоевград област, гр.Банско\n', '\nпродава Парцел, 521 м2\nСофия, Требич\n', '\nпродава Двустаен апартамент, 65 м2\nПловдив, Христо Смирненски\n', '\nпродава Парцел, 635 м2\nСофия, Казичене (с.)\n', '\nпродава Земеделски имот, 6640 м2\nБургас област, гр.Каблешково\n',
'\nпродава Двустаен апартамент, 40 м2\nПловдив, Кършияка\n'])
The first array is correct. I get the prices.
In the second one however, I should get only the type of property.
For example: from this ['\nпродава Земеделски имот, 2833 м2\nВелико Търново област, с.Въглевци\n',
I should only get the text in bold.
This text is currently nested in a with a children with another children . Actually is in between two which is strange to me.
Any ideas how I can extract this bit of information?
CodePudding user response:
You can do that using split() method as follows:
from requests_html import HTMLSession
from bs4 import BeautifulSoup
import pandas as pd
import re
s = HTMLSession()
url = 'https://www.imoti.net/bg/obiavi/r/prodava/bulgaria/?page=1&sid=iXMpXe'
r = s.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
def get_prices(urls):
prices = []
type_of_property = []
for price in soup.find('ul', {'class': 'list-view real-estates'}).find_all('strong', {'class': 'price'}):
price_text = price.get_text()
price_arr = re.findall('[0-9] ', price_text)
final_price = ''
for each_sub_price in price_arr:
final_price = each_sub_price
prices.append(final_price)
for property_type in soup.find('ul', {'class': 'list-view real-estates'}).find_all('div', {'class': 'inline-group'}):
property_type_value = ' '.join(property_type.get_text().split(',')[0].split()[1:3])
type_of_property.append(property_type_value)
return prices, type_of_property
print(get_prices(url))
Output:
['Земеделски имот',
'Земеделски имот', 'Офис', 'Парцел', 'Търговски обект', 'Гараж', 'Къща', 'Парцел', 'Магазин', 'Парцел', 'Двустаен апартамент', 'Къща', 'Къща', 'Къща', 'Заведение', 'Къща', 'Едностаен апартамент', 'Къща', 'Земеделски имот', 'Двустаен апартамент', 'Двустаен апартамент', 'Двустаен апартамент', 'Двустаен апартамент', 'Двустаен апартамент', 'Двустаен апартамент', 'Парцел', 'Двустаен апа