使用 BeautifulSoup 抓取的数据与源代码不匹配

问题描述

我是网络抓取的新手。我看过一些关于如何使用 beautifulsoup 抓取网站的教程。 作为练习,我想从房地产网站中提取数据。 我想抓取的具体页面是这个:https://www.immoweb.be/fr/recherche/maison-et-appartement/a-vendre?countries=BE&page=1

我的目标是提取每个房地产销售的所有链接列表。 之后,我想遍历该链接列表以提取每次销售的所有数据(价格、位置、nb 卧室等)

我遇到的第一个问题是使用经典beautifulsoup代码抓取的数据与网页源代码不匹配。

这是我的代码

URL = "https://www.immoweb.be/fr/recherche/maison-et-appartement/a-vendre?countries=BE&page=1"
page = requests.get(URL)
html = page.content
soup = BeautifulSoup(html,'html.parser')
print(soup)

因此,在查找位于

下的每个房地产销售的链接
soup.find_all("a",class_="card__title-link")

输出一个空列表。事实上,这些标签实际上没有从我上面的代码中正确提取。 这是为什么?我应该怎么做才能确保提取的 html 与网站源代码中可见的内容正确对应?

谢谢:-)

解决方法

您看到的数据以 Json 格式嵌入页面。你可以使用这个例子来加载它:

import json
import requests
from bs4 import BeautifulSoup

url = "https://www.immoweb.be/fr/recherche/maison-et-appartement/a-vendre?countries=BE&page=1"
soup = BeautifulSoup(requests.get(url).content,"html.parser")
data = json.loads(soup.find("iw-search")[":results"])

# uncomment this to print all data:
# print(json.dumps(data,indent=4))

# print some data:
for ad in data:
    print(
        "{:<63} {:<8} {}".format(
            ad["property"]["title"],ad["transaction"]["sale"]["price"] or "-","https://www.immoweb.be/fr/annonce/{}".format(ad["id"]),)
    )

打印:

Triplex appartement met 3 slaapkamers en garage.                239000   https://www.immoweb.be/fr/annonce/9309298
Appartement                                                     285000   https://www.immoweb.be/fr/annonce/9309895
Heel ruime,moderne,lichtrijke Duplex te koop,bij centrum     269000   https://www.immoweb.be/fr/annonce/9303797
À VENDRE PAR LANDBERGH : appartement de deux chambres à Gand    359000   https://www.immoweb.be/fr/annonce/9310300
Prachtige nieuwbouw appartementen                               -        https://www.immoweb.be/fr/annonce/9309278
Prachtige nieuwbouw appartementen                               -        https://www.immoweb.be/fr/annonce/9309251
Prachtige nieuwbouw appartementen                               -        https://www.immoweb.be/fr/annonce/9309264
Appartement intéressant avec agréable vue panoramique verdoy    219000   https://www.immoweb.be/fr/annonce/9309366
Projet Utopia by Godin                                          -        https://www.immoweb.be/fr/annonce/9309458
Appartement 2-ch avec vue unique!                               270000   https://www.immoweb.be/fr/annonce/9309183
Residentieel wonen in Hélécine,dichtbij de natuur en de sne    -        https://www.immoweb.be/fr/annonce/9309241
Appartement                                                     375000   https://www.immoweb.be/fr/annonce/9309187
DUPLEX LUMIEUX ET SPACIEUX                                      380000   https://www.immoweb.be/fr/annonce/9298271
SINT-PIETERS-LEEUW / Magnifique maison de ±130m² avec jardin    430000   https://www.immoweb.be/fr/annonce/9310259
PARC PARMENTIER // APP MODERNE 3CH                              490000   https://www.immoweb.be/fr/annonce/9262193
BOIS DE LA CAMBRE – AV DE FRE – CLINIQUES DE L’EUROPE           575000   https://www.immoweb.be/fr/annonce/9309664
Entre Stockel et le Stade Fallon                                675000   https://www.immoweb.be/fr/annonce/9310094
Maisons neuves dans un cadre verdoyant                          -        https://www.immoweb.be/fr/annonce/6792221
Nieuwbouwproject Dockside Gardens - Gent                        -        https://www.immoweb.be/fr/annonce/9008956
Appartement                                                     139000   https://www.immoweb.be/fr/annonce/9187904
A VENDRE CHEZ LANDBERGH: appartements à Merelbeke Flora         -        https://www.immoweb.be/fr/annonce/9306877
Très beau studio avec une belle vue sur la plage et la mer!     319000   https://www.immoweb.be/fr/annonce/9306787
BEL APPARTEMENT LUMINEUX DIAMANT / PLASKY                       320000   https://www.immoweb.be/fr/annonce/9264748
Un projet d'appartements neufs à proximité de Woluwé-St-Lamb    -        https://www.immoweb.be/fr/annonce/9308037
PLACE JOURDAN - 2 CHAMBRES                                      345000   https://www.immoweb.be/fr/annonce/9306953
Magnifiek appartement in de Brugse Rand - Assebroek             399000   https://www.immoweb.be/fr/annonce/9306613
Bien d'exception                                                415000   https://www.immoweb.be/fr/annonce/9308022
Appartement                                                     435000   https://www.immoweb.be/fr/annonce/9307802
Magnifique maison 5CH - 3SDB - bureau - dressing - garage       465000   https://www.immoweb.be/fr/annonce/9307178
Magnifique maison 5CH - 3SDB - bureau - dressing - garage       465000   https://www.immoweb.be/fr/annonce/9307177

编辑:添加了 URL 列。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...