如何使用BeautifulSoup提取网页搜索结果中的物品ID?
提取immoweb搜索结果中的房源唯一ID
你的问题核心在于immoweb的搜索结果数据并非直接嵌入HTML的DOM元素中,而是通过JavaScript动态渲染的,所以静态爬取到的search-app标签内看不到存储ID的节点,房源ID实际藏在页面的初始化JSON数据里。
解决步骤及代码实现如下:
- 补全依赖导入:你的代码遗漏了
requests库的导入,先补充完整; - 定位存储数据的script标签:页面中存在包含
__INITIAL_STATE__的script标签,里面存储了所有搜索结果的结构化数据; - 提取并解析JSON数据:从script标签文本中截取出JSON内容,解析后即可直接获取每个房源的唯一ID。
from bs4 import BeautifulSoup import pandas as pd import requests import json import re URL = "https://www.immoweb.be/en/search/apartment/for-sale/Antwerp/2000?countries=BE&page=1&orderBy=relevance&card=10286959" page = requests.get(URL) soup = BeautifulSoup(page.content, "html.parser") # 找到包含初始化数据的script标签 script_tag = soup.find("script", string=re.compile(r"__INITIAL_STATE__")) # 截取JSON内容:提取等号后的部分,去掉末尾分号 json_text = re.search(r"__INITIAL_STATE__ = (.*?);", script_tag.string).group(1) data = json.loads(json_text) # 遍历结果提取房源ID property_ids = [] # 数据路径可根据页面实际结构调整,以下为常见路径 for item in data["search"]["results"]["items"]: property_ids.append(item["id"]) print("提取到的房源ID:", property_ids)
补充说明:
__INITIAL_STATE__里不仅包含房源ID,还存储了房源的基础信息,可按需提取;- 如果后续页面数据结构变动,可通过打印
data的键值对,重新定位房源列表的具体路径。
内容的提问来源于stack exchange,提问作者Farid Mammadaliyev
相关产品推荐
相关产品推荐

