first - why you get, what you get:
on line 24
line.strip().replace('Site web', "").replace('Exclusivité', "").replace('Voir toutes les photos', "").replace('20', "").replace('', "").split('\n')
will produce list with one element of type str. Then you convert it to str and try to replace
\\xa0'
on line 25.
However, what you do is wrong. You need to use bs4 to parse the html source. Also note that hard-coded values (e.g. 29 (the number of photo) will not work.
replace lines 22-27 with
for pa in soup.find_all('div', {'class':'c-pa-list c-pa-sl c-pa-gold cartouche'}):
pa_info = pa.find('div', {'class':'c-pa-info'})
pa_type = pa_info.find('a', {'class':'c-pa-link'}).text.strip()
pa_criterion = pa.find('div', {'class':'c-pa-criterion'})
pa_p, pa_ch, pa_sq = [em.text for em in pa_criterion.find_all('em')]
print(f'property: {pa_type}, people: {pa_p}, ch: {pa_ch}, sq.m: {pa_sq}')
and what you will get is
Output:
property: Appartement, people: 4 p, ch: 3 ch, sq.m: 85 m²
property: Appartement, people: 2 p, ch: 1 ch, sq.m: 33 m²
property: Appartement, people: 2 p, ch: 1 ch, sq.m: 30 m²
property: Appartement, people: 4 p, ch: 2 ch, sq.m: 72 m²
property: Appartement, people: 6 p, ch: 4 ch, sq.m: 150 m²
property: Appartement, people: 1 p, ch: 33 m², sq.m: 1 asc
property: Appartement, people: 5 p, ch: 3 ch, sq.m: 122 m²
property: Appartement, people: 3 p, ch: 2 ch, sq.m: 106 m²
property: Appartement, people: 4 p, ch: 3 ch, sq.m: 145 m²
property: Appartement, people: 3 p, ch: 2 ch, sq.m: 51 m²
property: Appartement, people: 3 p, ch: 2 ch, sq.m: 67 m²
property: Appartement, people: 3 p, ch: 2 ch, sq.m: 79 m²
property: Appartement, people: 3 p, ch: 2 ch, sq.m: 92 m²
property: Appartement, people: 1 p, ch: 41 m², sq.m: 1 asc
note that there are 2 apartments for 1 p, that has slightly different output. You will need to process the result more carefully to make sure output is consistent
@
metulburr was faster than me