Home > Back-end >  scrape next page by changing the number of page in URL
scrape next page by changing the number of page in URL

Time:03-05

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

  • Related