PRO100CHOK/website-email-phone-extractor-python
GitHub: PRO100CHOK/website-email-phone-extractor-python
一个基于Python的网站联系信息提取工具,用于解决B2B外联中批量获取电子邮件和电话号码的需求。
Stars: 0 | Forks: 0
# 网站邮件和电话提取器 — Python 示例
[](https://apify.com/pro100chok/extract-emails?utm_source=github_pro100&utm_medium=readme&utm_campaign=website-email-phone-extractor-python)
[](https://python.org)
[](LICENSE)
此 Python 项目驱动 [Website Contact Scraper Apify Actor](https://apify.com/pro100chok/extract-emails?utm_source=github_pro100&utm_medium=readme&utm_campaign=website-email-phone-extractor-python)——一个专用爬虫,用于访问网站的主页及其联系/关于我们/团队/新闻/招聘页面(可配置深度和广度),然后提取网站公开的所有电子邮件、电话和社交链接。每次运行最多支持 100 个起始域名,每 1000 个结果收费 1 美元,您这边没有速率限制。
## 功能介绍
构建 SDR / 外联流程时总会遇到同一个障碍:你有一份潜在客户域名列表,但他们的联系页面将电子邮件隐藏在图片、JavaScript 或 `info[at]example.com` 之类的混淆处理之后。通用正则表达式抓取器会错过这些被混淆的邮箱;商业数据充实 API(如 Apollo、Hunter、Lusha)每月每席位起步价超过 99 美元,并将数据限制在积分系统内。而这个 Actor 只需完成枯燥的爬取工作——访问每个域名的几个关键页面,针对去混淆化的 HTML 运行健壮的提取正则表达式,并返回每个域名的清晰列表。
## 使用场景
- **B2B 外呼拓展** — 将公司域名列表转换为 SDR 外联所需的电子邮件 + 电话号码。
- **招聘与猎头** — 从目标招聘公司的职业页面提取联系信息。
- **新闻与公关** — 为你希望投稿的媒体机构查找 press@ / media@ 联系方式。
- **技术 SEO 外联** — 失效链接建设或客座文章投稿需要真实的联系方式,而非联系表单。
- **网红外联** — 从社交媒体个人简介中链接的创作者网站提取电子邮件。
- **销售区域充实** — 为 CRM 填充电话号码,以便进行电话推销跟进。
- **合规与尽职调查** — 在签署合作协议前,验证域名是否有有效的联系信息。
## 环境要求
- Python **3.10+**
- 一个免费的 [Apify 账户](https://console.apify.com/sign-up)
- 无需第三方数据充实账户
## 快速开始
```
git clone https://github.com/pro100chok/website-email-phone-extractor-python.git
cd website-email-phone-extractor-python
pip install -r requirements.txt
cp .env.example .env
# 粘贴你的 APIFY_API_TOKEN
python main.py
```
`main.py` 为十个开发者工具网站(Linear, Airtable, Retool, Hex, Mintlify, Vercel, Fly.io, Supabase, PlanetScale, Dagster)进行数据充实,为每个域名挑选最佳的通用电子邮件(优先 `hello@`/`contact@`/`sales@`),并保存为 JSON + CSV 格式。
## 工作原理
对于每个 `startUrls` 条目,爬虫将:
1. 访问 URL 并解析匹配联系/关于我们/团队/新闻/招聘/支持路由(多种语言变体)的链接。
2. 对这些页面进行深度优先爬取,每个域名最多爬取 `maxDepth` 级深度和 `maxPagesPerDomain` 个页面。
3. 从 `mailto:` 链接、纯文本(对 `[at]`、`(at)`、`at`、`@` 进行去混淆化)和结构化数据(`Person`/`Organization` JSON-LD 块)中提取电子邮件。
4. 使用区域感知的正则表达式(美国、欧盟、国际格式)从 `tel:` 链接和自由文本中提取电话号码。
5. 检测 LinkedIn、X / Twitter、Facebook、Instagram、YouTube、TikTok、Telegram 的社交账号。
输出为每个起始域名一条数据集记录。多个电子邮件/电话/社交账号以数组形式返回,以便您选择符合您外联风格的那个。
## 示例:潜在客户列表充实
```
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_API_TOKEN"])
run = client.actor("pro100chok/extract-emails").call(run_input={
"startUrls": [
{"url": "https://www.linear.app"},
{"url": "https://www.airtable.com"},
],
"maxDepth": 2,
"maxPagesPerDomain": 15,
})
for it in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{it['domain']}: {it['emails'][:3]} {it.get('phones', [])[:1]}")
```
## 示例输出
```
{
"url": "https://www.linear.app",
"domain": "linear.app",
"emails": ["hello@linear.app", "press@linear.app", "careers@linear.app"],
"phones": [],
"socials": {
"twitter": "https://twitter.com/linear",
"linkedin": "https://www.linkedin.com/company/linear-app/",
"youtube": "https://www.youtube.com/@linear"
},
"pagesCrawled": 12
}
```
## 输入参数
| 参数名 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `startUrls` | object[] | 是 | 最多 100 个起始 URL。接受完整 URL、裸域名,可带或不带 `www`/协议。 |
| `maxDepth` | integer | 否 | 从每个起始页面开始的爬取深度。`0` = 仅起始页面。默认为 `2`。 |
| `maxPagesPerDomain` | integer | 否 | 每个域名爬取的最大页面数。默认为 `10`。 |
| `concurrency` | integer | 否 | 并行处理的域名数量。默认为 `10`。 |
| `useProxy` | boolean | 否 | 启用代理。默认关闭——大多数公开网站不需要它。 |
| `proxyConfiguration` | object | 否 | 仅在 `useProxy=true` 时使用。支持 Apify 代理或自定义 URL。 |
## 更多示例
| 文件 | 演示内容 |
|------|-------------|
| `examples/01_basic_usage.py` | 单网站爬取。 |
| `examples/02_from_search_results.py` | 多域名批量爬取。 |
| `examples/03_role_email_filter.py` | 按角色收件箱过滤(`sales@`、`support@` 等)。 |
| `examples/04_export_to_csv.py` | Pandas 导出 + 每个域名最佳联系人逻辑。 |
| `examples/05_export_to_google_sheets.py` | 将新的充实结果追加到共享工作表。 |
## 常见问题
**费用是多少?**
每爬取 1000 个域名收费 1 美元(每个域名 = 一个结果项)。Apify 的免费每月 5 美元额度可覆盖约 5000 次数据充实,之后才需要付费。
**它能找到网站上的所有电子邮件吗?**
它可以找到 HTML 中所有公开的电子邮件,包括去混淆形式(`[at]`、`(at)`、HTML 实体)、`mailto:` 链接以及 JSON-LD 模式中的邮箱。这些邮箱存在于主页和少量高价值子页面中。隐藏在图片、PDF 或第三方表单小部件中的电子邮件无法被提取——这些通常需要 OCR 或昂贵的无头浏览器遍历。
**`maxPagesPerDomain` 的作用是什么?**
大多数网站的有用联系信息都可以从主页和一次点击(联系/关于我们/团队/新闻)到达。设置 `maxPagesPerDomain: 15` 可以让你访问这些路由,而不会浪费积分去爬取每篇博客文章。
**它符合 GDPR 吗?**
该 Actor 从公开网站提取公开发布的联系信息。是否可以合法地使用这些联系方式进行冷外联取决于您所在的司法管辖区(在 GDPR 的合法利益基础下,B2B 通常是可以的,前提是您提供退订选项;针对消费者/个人的电子邮件规定更严格)。在欧盟市场进行大规模外联前,请咨询您的法律团队。
**我可以使用代理运行吗?**
可以。设置 `useProxy: true` 并传递 `proxyConfiguration`。大多数公开营销网站不需要代理,但受 Cloudflare 保护的网站偶尔需要。
**我可以只从单个页面提取电子邮件吗?**
可以。设置 `maxDepth: 0`——该 Actor 将只爬取您给出的 URL,不进行链接发现。
**它支持子域名吗?**
支持。传递 `https://subdomain.example.com`,爬虫将爬取该子域名(而不是父域名),最多爬取 `maxPagesPerDomain` 个页面。
**它能检测哪些社交平台?**
LinkedIn、X / Twitter、Facebook、Instagram、YouTube、TikTok、Telegram、GitHub、Discord、Crunchbase、AngelList——只要页面上出现可识别的规范 URL 即可。
**我可以验证获得的电子邮件吗?**
可以。将输出通过 [Email Verifier Actor](https://apify.com/pro100chok/email-verifier?utm_source=github_pro100&utm_medium=readme&utm_campaign=website-email-phone-extractor-python) 传递,以检查可送达性和风险评分,然后再发送您的外联邮件。
## 相关 Actor
- [Email Verifier — 批量邮件验证](https://apify.com/pro100chok/email-verifier?utm_source=github_pro100&utm_medium=readme&utm_campaign=website-email-phone-extractor-python) — 验证此 Actor 产生的电子邮件。
- [Google Maps Scraper — 邮件、评论和图片](https://apify.com/pro100chok/google-maps-scraper?utm_source=github_pro100&utm_medium=readme&utm_campaign=website-email-phone-extractor-python) — 本地商家联系信息提取。
- [Clutch.co Scraper](https://apify.com/pro100chok/clutch-scraper?utm_source=github_pro100&utm_medium=readme&utm_campaign=website-email-phone-extractor-python) — 机构联系人目录,已用电子邮件充实。
在 [apify.com/pro100chok](https://apify.com/pro100chok?utm_source=github_pro100&utm_medium=readme&utm_campaign=website-email-phone-extractor-python) 查看我的所有 Actor。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
基于 [Website Contact Scraper](https://apify.com/pro100chok/extract-emails?utm_source=github_pro100&utm_medium=readme&utm_campaign=website-email-phone-extractor-python) Apify Actor 构建。
标签:Apify, B2B营销, Python, SEO外展, URL抓取, 媒体联系, 批量处理, 招聘工具, 数字取证, 数据抓取, 数据提取, 无后门, 潜在客户生成, 电子邮件提取, 电话号码提取, 社交账号提取, 网站抓取, 联系方式收集, 自动化脚本, 逆向工具, 销售支持