You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用requests模块提取指定网页中所有户型图的图片链接?

如何使用requests模块提取指定网页中所有户型图的图片链接?

嘿,我看了你的代码和问题,你之所以用正则没成功,主要是因为目标图片链接所在的数组嵌套在一个大的JSON结构里,页面里的转义字符太多,用简单的正则很难精准匹配到完整的内容,容易断在中间或者匹配不全。

咱们换个思路,直接定位到页面里的初始化状态JSON块,解析后就能轻松拿到所有户型图的图片链接了,具体步骤和代码如下:

解决思路

  1. 页面里的户型图数据其实存在window.__INITIAL_STATE__这个全局变量对应的JSON结构里,我们先把这个JSON字符串提取出来
  2. 将提取到的字符串解析成Python字典,就能方便地遍历里面的户型图数据
  3. 从每个户型图的信息里提取images数组中的图片链接

修改后的完整代码

import re
import json
import requests

link = 'https://www.livabl.com/abbotsford-bc/jem1'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    'Referer': 'https://www.livabl.com/',
}

def get_floor_plan_images(link, headers):
    res = requests.get(link, headers=headers)
    print(f"请求状态码: {res.status_code}")
    
    # 匹配页面中的初始化状态JSON块
    match = re.search(r'window\.__INITIAL_STATE__ = (.*?);', res.text, re.DOTALL)
    if not match:
        print("未找到目标JSON数据")
        return []
    
    # 解析JSON字符串为Python字典
    try:
        initial_state = json.loads(match.group(1))
    except json.JSONDecodeError as e:
        print(f"JSON解析失败: {e}")
        return []
    
    # 提取所有户型图的图片链接
    all_image_links = []
    floor_plans = initial_state.get('floorPlans', {}).get('items', [])
    for plan in floor_plans:
        # 遍历每个户型图的images数组
        for image in plan.get('images', []):
            img_url = image.get('url')
            if img_url:
                all_image_links.append(img_url)
    
    return all_image_links

images = get_floor_plan_images(link, headers)
print(f"共提取到 {len(images)} 张户型图图片链接:")
for idx, url in enumerate(images, 1):
    print(f"{idx}. {url}")

代码说明

  • 用re.DOTALL参数让正则的.匹配换行符,确保能完整捕获整个JSON块
  • 用json.loads解析JSON,避免了手动处理转义字符的麻烦
  • 逐层提取floorPlans -> items -> images -> url,确保不会遗漏任何一张图片
  • 添加了异常处理,避免因为页面结构小变动导致程序直接崩溃

运行这段代码后,你就能拿到全部11张户型图的图片链接啦~

备注:内容来源于stack exchange,提问作者SMTH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:44:30