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

使用cheerio提取网页数据 如何提取指定站点的邮箱与姓名

问题原因分析
  • 同源策略限制:浏览器出于安全考虑,禁止当前页面的JS读取跨域资源的DOM内容,你通过<object>加载的第三方站点页面不属于同域资源,除非目标网站主动配置了允许你当前域名访问的CORS规则,否则你永远无法通过前端JS直接读取<object>内部的元素内容,你现有代码只能查询到当前页面本身的strong标签,自然拿不到目标站的内容。
  • 加载时机逻辑缺陷:即使不存在跨域限制,你监听的window.load事件仅能保证当前页面自身的资源加载完成,无法保证<object>内嵌入的外部页面加载完毕,执行查询逻辑时目标元素还没渲染,也会返回空结果。
可行实现方案

方案1:本地脚本爬取(推荐,无跨域限制)

直接用后端/本地脚本发起请求获取页面内容,避免浏览器跨域限制,以Python为例:
首先安装依赖:
pip install requests beautifulsoup4
示例代码:

import requests
from bs4 import BeautifulSoup
import re

# 请求目标页面
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}
response = requests.get("https://aleenarais.com/buddy/", headers=headers)
response.encoding = response.apparent_encoding
page_content = response.text

# 方法1:用DOM解析提取姓名和邮箱
soup = BeautifulSoup(page_content, "html.parser")
# 这里根据目标页面实际的元素结构写选择器即可,比如姓名在某个class的标签下,邮箱在mailto链接里
names = [item.get_text(strip=True) for item in soup.select("你要匹配的姓名元素选择器")]
emails = [item.get("href").replace("mailto:", "").strip() for item in soup.select('a[href^="mailto:"]')]

# 方法2:正则提取邮箱(不需要解析DOM,直接从页面字符串匹配)
email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
emails_reg = re.findall(email_pattern, page_content)

print("提取到的邮箱:", emails if emails else emails_reg)
print("提取到的姓名:", names)

方案2:浏览器端搭配代理服务

如果必须在浏览器端实现,你需要自己搭建一个代理中转服务,由代理服务请求目标页面内容后返回给前端,前端直接处理返回的文本即可,示例逻辑:

// 假设你的代理服务接口为 /proxy?url=xxx,会返回目标页面的文本内容
fetch("/proxy?url=https://aleenarais.com/buddy/")
.then(res => res.text())
.then(pageText => {
    // 可以直接正则提取邮箱
    const emailReg = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g
    const emails = pageText.match(emailReg) || []
    console.log("提取到的邮箱:", emails)

    // 也可以把文本转为DOM再查询元素
    const parser = new DOMParser()
    const doc = parser.parseFromString(pageText, "text/html")
    const names = Array.from(doc.querySelectorAll("你要匹配的姓名元素选择器")).map(item => item.textContent.trim())
    console.log("提取到的姓名:", names)
})

内容的提问来源于stack exchange,提问作者Sujith S Manjavana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:18:03