I have trouble scraping information on the next pages. I also have a problem when some tags change like when the website developer changes an “a href” with “h2 class” when I reach the appart_response= requests.get(link)
Please can you check with me the following code:
from bs4 import BeautifulSoup import requests url1 = "https://www.mubawab.ma/fr/ct/marrakech/immobilier-a-vendre-all:sc:apartments-for-sale:p:1" appart_no = 0 while True: response = requests.get(url1) data1 = response.text soup1 = BeautifulSoup(data1,'html.parser') apparts = soup1.find_all('h2',{'class':'listingTit'}) for appart in apparts: appart_name_tag= appart.find('a') appart_name=appart_name_tag.text if appart_name_tag else "N/A" link_tag= appart.find('a') link=link_tag.get('href') if link_tag else "N/A" appart_response= requests.get(link) appart_data= appart_response.text appart_soup= BeautifulSoup(appart_data, 'html.parser') appart_room_tag = appart_soup.find('div',{'class':'catNav'}) appart_room = appart_room_tag.text if appart_room_tag else "N/A" appart_no+=1 print('appartment name:',appart_name,'nappartment link:',link,'nappartment rooms:', appart_room) url_tag1 = soup1.find('a',{'class':'arrowDot'}) if url_tag1.get('href'): url1= 'https://www.mubawab.ma/fr/ct/marrakech/immobilier-a-vendre-all:sc:apartments-for-sale:p:2' + url_tag1.get('href') print(url1) else: break print("Total apparts:", appart_no)
Advertisement
Answer
There is second <a>
with text En savoir plus
.
Sometimes it may have href="#"
but usually when it has #
then <h2><a>
exists and has correct href
. So you can try to search both links and use correct one.
I use 'div', {'class': 'contentBox'}
instead of 'h2',{'class':'listingTit'}
and then find('a')
gives me first <a>
(if exists) or second <a>
and I get correct href
.
To make sure I use if/else
to skip room
when I don’t have href
Page has two 'a',{'class':'arrowDot'}
(left arrow, right arrow) but sometimes left arrow is hidden – but still it need to get second arrow to get correct url to next page
arrow_tags = soup.find_all('a', {'class': 'arrowDot'}) if len(arrow_tags) > 1 and arrow_tags[-1].get('href'): url = arrow_tags[-1].get('href') else: break
Full working code:
from bs4 import BeautifulSoup import requests url = "https://www.mubawab.ma/fr/ct/marrakech/immobilier-a-vendre-all:sc:apartments-for-sale:p:1" appart_no = 0 while True: print('n--- new page ---n') print('url:', url, 'n') response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') apparts = soup.find_all('div', {'class': 'contentBox'}) for appart in apparts: name_tag = appart.find('h2', {'class': 'listingTit'}) name = name_tag.text.strip() link = appart.find('a').get('href', 'NA') if link == 'N/A' or link == '#': print('SKIP:', name, link) else: #print('OK') appart_response = requests.get(link) appart_soup = BeautifulSoup(appart_response.text, 'html.parser') room_tag = appart_soup.find('div', {'class': 'catNav'}) room = room_tag.get_text(strip=True, separator='|') if room_tag else "N/A" appart_no += 1 # clean up the text - split to lines, and remove extra spaces, and join it back to one string parts = room.split('n') parts = (x.strip() for x in parts) room = " ".join(parts) print('name :', name) print('link :', link,) print('rooms:', room) print('---') # there are always two `arrowDot` (left, right) but some can be hidden arrow_tags = soup.find_all('a', {'class': 'arrowDot'}) print(arrow_tags) if len(arrow_tags) > 1 and arrow_tags[-1].get('href'): url = arrow_tags[-1].get('href') else: break print("Total apparts:", appart_no)
Result (for first page):
--- new page --- url: https://www.mubawab.ma/fr/ct/marrakech/immobilier-a-vendre-all:sc:apartments-for-sale:p:1 name : Duplex de charme link : https://www.mubawab.ma/fr/a/7367289/duplex-de-charme rooms: 205 m²|5 Pièces|2 Chambres|2 Salles de bains|Bon état|5-10 ans --- name : Appartement a vendre au cœur de la palmer... link : https://www.mubawab.ma/fr/a/7121614/appartement-a-vendre-au-c%C5%93ur-de-la-palmeraie-de-marrakech rooms: 205 m²|4 Pièces|3 Chambres|2 Salles de bains|Nouveau|5-10 ans --- name : Appartement de 61m² en vente Al Boughaz G... link : https://www.mubawab.ma/fr/pa/7347251/appartement-de-61m%C2%B2-en-vente-al-boughaz-gu%C3%A9liz rooms: 61 m²|3 Pièces|2 Chambres|1 Salle de bain|Nouveau --- name : Appartement en vente à Ennakhil Palmeraie... link : https://www.mubawab.ma/fr/a/7360138/appartement-en-vente-%C3%A0-ennakhil-palmeraie-surface-totale-102-m%C2%B2-piscine-climatisation rooms: 102 m²|3 Pièces|2 Chambres|2 Salles de bains|Bon état|10-20 ans --- name : Top affaire Appt T2 Victor Hugo grande te... link : https://www.mubawab.ma/fr/a/7275268/top-affaire-appt-t2-victor-hugo-grande-terrasse rooms: 90 m²|2 Pièces|1 Chambre|1 Salle de bain|Bon état|1-5 ans|1er étage --- name : Appartement de 82m² JNANE EL ALI link : https://www.mubawab.ma/fr/pa/6657050/appartement-de-82m%C2%B2-jnane-el-ali rooms: 82 m²|3 Pièces|2 Chambres|2 Salles de bains|Nouveau|2ème étage --- name : FABULEUX. Appt T4 jardin privé res Piscin... link : https://www.mubawab.ma/fr/a/7013145/fabuleux-appt-t4-jardin-priv%C3%A9-res-piscine-agdal rooms: 330 m²|4 Pièces|3 Chambres|2 Salles de bains|Nouveau|1-5 ans --- name : Appartement de 82m² JNANE EL ALI link : https://www.mubawab.ma/fr/pa/6657046/appartement-de-82m%C2%B2-jnane-el-ali rooms: 82 m²|3 Pièces|2 Chambres|2 Salles de bains|Nouveau --- name : Lots de Terrains - Mysk Marrakech link : https://www.mubawab.ma/fr/p/3171/lots-de-terrains-mysk-marrakech rooms: Haut standing|Finalisé|Livraison: 01/21 --- name : Appartement luxueux en vente a marrakech... link : https://www.mubawab.ma/fr/a/7307003/appartement-luxueux-en-vente-a-marrakech-hivernage rooms: 135 m²|4 Pièces|2 Chambres|2 Salles de bains|Bon état|5-10 ans|6ème étage --- name : Appartement à vendre link : https://www.mubawab.ma/fr/a/7361252/appartement-%C3%A0-vendre rooms: 227 m²|5 Pièces|4 Chambres|3 Salles de bains|Nouveau|1-5 ans --- name : Stop. Très bonne affaire link : https://www.mubawab.ma/fr/a/7353960/stop-tr%C3%A8s-bonne-affaire rooms: 47 m²|2 Pièces|1 Chambre|1 Salle de bain|Nouveau|Moins d'un an --- name : Projet sur l'agdal avec des appartements... link : https://www.mubawab.ma/fr/a/7243656/projet-sur-l-agdal-avec-des-appartements-a-la-vent rooms: 60 m²|3 Pièces|1 Chambre|2 Salles de bains|Nouveau|Moins d'un an|1er étage --- name : Bel appartement à vendre à Guéliz avec as... link : https://www.mubawab.ma/fr/a/7270379/bel-appartement-%C3%A0-vendre-%C3%A0-gu%C3%A9liz-avec-ascenseur-et-terrasse rooms: 74 m²|3 Pièces|2 Chambres|1 Salle de bain|Bon état|1-5 ans|5ème étage --- name : Bel appartement à Marrakech avec un prix... link : https://www.mubawab.ma/fr/a/7279598/bel-appartement-%C3%A0-marrakech-avec-un-prix-tr%C3%A8s-raisonnable rooms: 97 m²|4 Pièces|2 Chambres|2 Salles de bains|Nouveau|Moins d'un an --- name : Appartement en vente à Agdal. 2 chambres... link : https://www.mubawab.ma/fr/a/7341280/appartement-en-vente-%C3%A0-agdal-2-chambres-agr%C3%A9ables rooms: 103 m²|3 Pièces|2 Chambres|2 Salles de bains|Bon état|1-5 ans|2ème étage --- name : A vendre rez de jardin prestigia marrakec... link : https://www.mubawab.ma/fr/a/7379956/a-vendre-rez-de-jardin-prestigia-marrakech rooms: 176 m²|4 Pièces|2 Chambres|2 Salles de bains|Bon état|5-10 ans --- name : Sublime duplex dans un quartier résidenti... link : https://www.mubawab.ma/fr/a/7313841/sublime-duplex-dans-un-quartier-r%C3%A9sidentiel rooms: 300 m²|5 Pièces|3 Chambres|3 Salles de bains|Bon état|5-10 ans|4ème étage --- name : Appartement en vente à Marrakech. 1 chamb... link : https://www.mubawab.ma/fr/a/6922706/appartement-en-vente-%C3%A0-marrakech-1-chambre-avec-ascenseur-et-espace-vert rooms: 65 m²|2 Pièces|1 Chambre|1 Salle de bain|Bon état|5-10 ans --- name : Appartement de 103m² en vente, Caprice Hi... link : https://www.mubawab.ma/fr/pa/7152699/appartement-de-103m%C2%B2-en-vente-caprice-hivernage rooms: 103 m²|4 Pièces|3 Chambres|2 Salles de bains --- name : Duplex de 78m² et 43m² de mezzanine en ve... link : https://www.mubawab.ma/fr/pa/7347254/duplex-de-78m%C2%B2-et-43m%C2%B2-de-mezzanine-en-vente-al-boughaz-gu%C3%A9liz rooms: 121 m²|5 Pièces|4 Chambres|3 Salles de bains|Nouveau --- name : Appartement de 90m² en vente, Big Sakane link : https://www.mubawab.ma/fr/pa/7095955/appartement-de-90m%C2%B2-en-vente-big-sakane rooms: 90 m²|3 Chambres|2 Salles de bains --- name : Appartement de 116 m² en vente, Orée de l... link : https://www.mubawab.ma/fr/pa/6373247/appartement-de-116-m%C2%B2-en-vente-or%C3%A9e-de-la-palmeraie rooms: 116 m²|4 Pièces|3 Chambres|2 Salles de bains|Nouveau|Moins d'un an|1er étage --- name : Appartement de 82m² JNANE EL ALI link : https://www.mubawab.ma/fr/pa/6649563/appartement-de-82m%C2%B2-jnane-el-ali rooms: 82 m²|3 Pièces|2 Chambres|2 Salles de bains|Nouveau|1er étage --- name : Superbe appartement à vendre à Guéliz. 2... link : https://www.mubawab.ma/fr/a/7380120/superbe-appartement-%C3%A0-vendre-%C3%A0-gu%C3%A9liz-2-chambres-bien-meubl%C3%A9 rooms: 60 m²|3 Pièces|2 Chambres|1 Salle de bain|Nouveau|1-5 ans|2ème étage --- name : Vend appartement à Bab Ighli. 2 belles ch... link : https://www.mubawab.ma/fr/a/7366360/vend-appartement-%C3%A0-bab-ighli-2-belles-chambres rooms: 78 m²|3 Pièces|2 Chambres|2 Salles de bains|Bon état|1-5 ans|1er étage --- name : Joli Appart. F2 au centre Guéliz place Pa... link : https://www.mubawab.ma/fr/a/7081631/joli-appart-f2-au-centre-gu%C3%A9liz-place-parking rooms: 54 m²|2 Pièces|1 Chambre|1 Salle de bain|Bon état|5-10 ans|2ème étage --- name : Appartement F3, Résidence avec Piscine et... link : https://www.mubawab.ma/fr/a/6884701/appartement-f3-r%C3%A9sidence-avec-piscine-et-jardin rooms: 103 m²|3 Pièces|2 Chambres|2 Salles de bains|Nouveau|1-5 ans|3ème étage --- name : Duplex de 3 chambres, 2 SDB à Hay CHARAF link : https://www.mubawab.ma/fr/a/7145358/duplex-de-3-chambres-2-sdb-%C3%A0-hay-charaf rooms: 114 m²|4 Pièces|3 Chambres|2 Salles de bains|Nouveau|Moins d'un an --- name : Superbe Appartement avec Terrasse a la Ve... link : https://www.mubawab.ma/fr/a/7204313/superbe-appartement-avec-terrasse-a-la-vente rooms: 100 m²|3 Pièces|2 Chambres|1 Salle de bain|Nouveau|1-5 ans|1er étage --- name : Appart. Neuf, 2 chambres 2 SDB, parking... link : https://www.mubawab.ma/fr/a/7317298/appart-neuf-2-chambres-2-sdb-parking-piscine- rooms: 65 m²|3 Pièces|2 Chambres|2 Salles de bains|Nouveau|Moins d'un an|1er étage --- name : Idéal Appartement a Gueliz link : https://www.mubawab.ma/fr/a/7380001/id%C3%A9al-appartement-a-gueliz rooms: 50 m²|2 Pièces|1 Chambre|2 Salles de bains|Nouveau|1-5 ans|1er étage --- name : Marrakech golf City Prestigia appartement... link : https://www.mubawab.ma/fr/a/7212624/marrakech-golf-city-prestigia-appartement-1-chambre-%C3%A0-vendre rooms: 48 m²|2 Pièces|1 Chambre|1 Salle de bain|Bon état|1-5 ans|1er étage --- name : Appartement à vendre à Agdal. 3 chambres... link : https://www.mubawab.ma/fr/a/6827038/appartement-%C3%A0-vendre-%C3%A0-agdal-3-chambres-agr%C3%A9ables-vue-piscine rooms: 97 m²|4 Pièces|3 Chambres|2 Salles de bains|Nouveau|Moins d'un an|1er étage --- --- new page --- url: https://www.mubawab.ma/fr/ct/marrakech/immobilier-a-vendre-all:sc:apartments-for-sale:p:2