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

Python爬虫如何从href跳转页面抓取受保护的邮箱地址

受保护邮箱爬取方案

抓不到邮箱就两个核心原因:

  • 进入详情页后没有执行JS渲染:这个站点的邮箱做了动态加载保护,普通GET请求拿到的静态HTML里全是占位符,真实邮箱是等页面JS运行完成、检测完访问环境后,才解密插入到DOM节点里的
  • 选择器匹配错误:你用的li.lmb-calltoaction a对应的是拨打电话的按钮,和邮箱节点完全无关

修改要点

  • 详情页请求发起后必须调用render()方法执行页面JS,sleep参数不要设太短,建议给2秒等待JS解密完成,设1秒经常因为加载不完整拿到空值
  • 替换选择器为匹配邮箱节点的li.lmb-email a
  • 取到a标签后从href属性提取内容,删掉开头的mailto:前缀就是真实邮箱地址
  • 先修复原有代码的缩进错误,for循环内的代码全顶格写的话Python根本跑不起来

修正后可直接运行的代码

from requests_html import HTMLSession    

list_url = 'https://thenationalweddingdirectory.com.au/explore/?category=wedding-venues&region=melbourne&sort=top-rated'

s = HTMLSession()
r = s.get(list_url)
r.html.render(sleep=2)
products = r.html.xpath('//*[@id="finderListings"]/div[2]', first=True)

for item in products.absolute_links:
    # 过滤翻页、广告类非场地详情页的无效链接
    if '/suppliers/' not in item:
        continue
    detail_r = s.get(item)
    # 核心步骤:必须渲染执行JS,否则拿不到解密后的真实邮箱
    detail_r.html.render(sleep=2)
    email_tag = detail_r.html.find('li.lmb-email a', first=True)
    if email_tag:
        email = email_tag.attrs.get('href', '').replace('mailto:', '')
        print(f"详情页:{item} | 联系邮箱:{email}")
    else:
        print(f"详情页:{item} | 未公开联系邮箱")

踩坑提醒

  • 如果按上述代码还是拿不到邮箱,可以给render方法加keep_page=True参数,手动等待1秒再解析,部分反爬严格的页面会检测JS执行速度,执行太快会返回占位内容
  • 控制请求频率,短时间内批量刷页会被站点封IP,到时候怎么渲染都拿不到有效内容
  • 不用浪费时间在静态源码里用正则匹配邮箱,源码里的邮箱全是混淆后的乱码,没有页面自带的JS解密逻辑根本算不出真实值

内容的提问来源于stack exchange,提问作者Arif Fadhillah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:27:18