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

如何用requests_html获取网页嵌入地图中的邮政编码?

解决requests_html无法提取嵌入地图动态内容的问题

问题分析

你遇到的核心问题是:嵌入的地图内容(比如Google Maps)通常是以iframe形式加载的,response.html.render()只会渲染主页面内容,不会自动加载iframe内部的页面。另外,浏览器复制的冗长XPATH依赖动态生成的节点结构,很容易失效。

解决方案步骤

1. 确认地图的iframe结构

打开目标页面,通过开发者工具查看mapDiv内部,会发现地图嵌入在iframe标签中,其src属性指向独立的地图页面(比如Google Maps)。

2. 单独请求并渲染iframe页面

主页面渲染完成后,先提取iframe的链接,再对该链接发起请求并渲染,即可获取内部的地址信息。

3. 使用稳定的选择器定位内容

避免使用浏览器生成的长XPATH,改用基于类名、语义化标签的选择器,或结合正则表达式提取目标信息。

修正后的代码示例

from requests_html import HTMLSession
import re

store_urls = 'https://www.miyazaki-recycle.com/recycling-station/14821/'

session = HTMLSession()

# 1. 请求并渲染主页面
response = session.get(store_urls, timeout=60)
response.html.render(sleep=2)

# 2. 提取地图iframe的链接
iframe = response.html.find('#mapDiv iframe', first=True)
if iframe:
    map_url = iframe.attrs['src']
    # 3. 请求并渲染地图页面
    map_response = session.get(map_url, timeout=60)
    map_response.html.render(sleep=3)
    
    # 4. 提取并解析地址中的邮编
    address_block = map_response.html.find('.widget-pane-link', first=True)
    if address_block:
        full_address = address_block.text
        # 匹配日本邮编格式(XXX-XXXX)
        zip_match = re.search(r'\d{3}-\d{4}', full_address)
        if zip_match:
            print(f"提取到邮编: {zip_match.group()}")
        else:
            print("未识别到符合格式的邮编")
    else:
        print("未找到地址元素")
else:
    print("未找到地图iframe节点")

额外注意事项

  • 无需设置过长的sleep时间,2-3秒足够,过长可能导致会话超时。
  • 若遇到反爬限制,可给请求添加headers(比如模拟真实浏览器的User-Agent)。
  • 正则表达式可根据目标地区的邮编格式调整,比如其他国家的邮编需修改匹配规则。

内容的提问来源于stack exchange,提问作者100PrcntSwag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:42:44