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)
CodePudding user response:
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', 'N\A')
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œur-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²-en-vente-al-boughaz-guéliz
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-à-ennakhil-palmeraie-surface-totale-102-m²-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²-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é-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²-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-à-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ès-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-à-vendre-à-guéliz-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-à-marrakech-avec-un-prix-très-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-à-agdal-2-chambres-agréables
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ésidentiel
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-à-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²-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²-et-43m²-de-mezzanine-en-vente-al-boughaz-guéliz
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²-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²-en-vente-orée-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²-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-à-vendre-à-guéliz-2-chambres-bien-meublé
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-à-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éliz-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ésidence-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-à-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éal-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-à-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-à-vendre-à-agdal-3-chambres-agréables-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