想要发展业务?SuperPages 是获取有价值的潜在客户信息的好地方。SuperPages 是最大的在线目录之一,列出了美国各地的企业。这里有数百万家按行业、位置等分类的企业,是查找潜在客户或客户详细信息的好地方。

在本指南中,我们将向您展示如何抓取 SuperPages 以获取业务信息。使用 Python 和一些简单的库,您可以获取企业名称、电话号码、地址等。这将为您提供一份潜在客户列表,以扩大您的营销或建立合作伙伴关系。

一旦我们设置了核心抓取工具,我们还将研究使用以下方法优化结果 爬虫库 Smart Proxy 以确保处理更大数据集时的数据准确性和效率。

以下是我们将介绍的帮助您入门的所有内容:

目录

  1. 为什么要从 SuperPages 抓取线索?
  2. 从 SuperPages 中提取的关键数据
  3. 设置 Python 环境
  4. 抓取 SuperPages 列表
  • 检查 HTML 中的选择器
  • 编写列表抓取工具
  • 处理分页
  • 将数据保存在 JSON 文件中
  • 完整的代码
  1. 抓取 SuperPages 业务详情
  • 检查 HTML 中的选择器
  • 编写业务详细信息抓取工具
  • 将数据保存在 JSON 文件中
  • 完整的代码
  1. 使用 Crawlbase 优化 SuperPages Scraper Smart Proxy
  2. 总结
  3. 常见问题

为什么要从 SuperPages 抓取线索?

SuperPages 是美国顶级商业目录,拥有数百万个跨行业列表。无论您从事销售、营销还是研究,SuperPages 都拥有您创建有针对性的潜在客户列表所需的信息。从小型本地企业到全国性公司,SuperPages 拥有数百万个条目,每个条目都包含企业名称、地址、电话号码和业务类别。

该图显示了从 SuperPages 抓取潜在客户的原因

通过抓取 SuperPages,您可以将所有这些信息集中到一个地方,节省手动搜索的时间,并专注于接触潜在客户。您无需逐页浏览,而是拥有一个可供分析和跟进的结构化数据集。

让我们深入了解一下可以从 SuperPages 中提取什么信息。

从 SuperPages 中提取的关键数据

在抓取 SuperPages 时,您需要知道要提取哪些数据来生成潜在客户。SuperPages 为每个企业提供了多条数据,通过定位特定字段,您可以创建一个干净的数据集,用于推广和营销目的。

以下是一些主要数据字段:

  • 生意名称:每个企业的主要标识符,以便您可以对潜在客户进行分组。
  • 分类:SuperPages 按行业对企业进行分类,例如“餐馆”或“法律服务”。这将帮助您按行业细分潜在客户。
  • 地址和地点:完整的地址详情,包括城市、州和邮政编码,以便您可以针对本地营销活动。
  • 电话号码:对于直接联系很重要,特别是当您正在建立基于电话的外展活动时。
  • 网址:许多列表都有网站链接,因此您可以通过另一种方式参与并获取有关每个企业的更多信息。
  • 评分和评论:如果可用,这些数据可以让您深入了解客户情绪和声誉,以便您可以根据企业的质量和客户反馈来定位企业。

清楚知道要提取的内容后,我们就可以准备在下一节中设置 Python 环境了。

设置 Python 环境

在开始抓取 SuperPages 数据之前,我们需要设置正确的 Python 环境。这包括安装 Python、必要的库和集成开发环境 (IDE) 以编写和运行我们的代码。

安装 Python 和所需的库

首先,确保你的电脑上安装了 Python。你可以从以下网址下载最新版本: 蟒蛇网。安装后,您可以通过在终端或命令提示符中运行以下命令来测试 Python 是否正常运行:

1
python --version

接下来,您需要安装所需的库。在本教程中,我们将使用 Requests 发出 HTTP 请求,使用 BeautifulSoup 解析 HTML。您可以通过运行以下命令来安装这些库:

1
pip 安装请求 beautifulsoup4

这些库将帮助您与 SuperPages 进行交互并从 HTML 中抓取数据。

选择 IDE

要编写和运行 Python 脚本,您需要一个 IDE。以下是一些选项:

  • VS代码:一个轻量级的代码编辑器,具有良好的 Python 支持和许多扩展。
  • PyCharm:功能更齐全的 Python IDE,具有代码完成和调试工具。
  • Jupyter笔记本:用于实验和可视化的交互式环境。

选择您喜欢的 IDE。设置好环境后,您就可以开始编写代码来抓取 SuperPages 列表了。

抓取 SuperPages 列表

在本节中,我们将介绍如何抓取 SuperPages 列表。其中包括检查 HTML 以查找选择器、编写抓取程序、处理分页以从多个页面获取数据,以及将数据保存在 JSON 文件中以便于访问。

检查 HTML 中的选择器

在开始编写抓取工具之前,我们需要检查 SuperPages 列表页面,找到包含所需数据的 HTML 结构和 CSS 选择器。操作方法如下:

  1. 打开列表页面:转到 SuperPages 搜索结果页面(例如,在您感兴趣的位置搜索“家庭服务”)。
  2. 检查页面:右键单击页面并选择“检查”或按 Ctrl + Shift + I 打开开发人员工具。
SuperPages Listings HTML 检查的屏幕截图
  1. 找到相关元素:
  • 生意名称:企业名称是 <a> 带有类的标签 .business-name,并且在此范围内 <a>,名字本身是 <span> 标签。
  • 邮寄地址:该地址位于 <span> 带有类的标签 .street-address.
  • 电话号码:电话号码是 <a> 用类别标记 .phone.primary.
  • 网站链接:如果可用,则企业网站链接位于 <a> 带有类的标签 .weblink-button.
  • 详情页面链接:业务详情页面的链接位于 <a> 带有类的标签 .business-name.

查找您想要提取的任何其他数据,例如评级或营业时间。现在,您已准备好在下一节中编写抓取工具。

编写列表抓取工具

现在我们有了选择器,我们可以编写抓取工具了。我们将使用 requests 获取页面并 BeautifulSoup 解析 HTML 并提取数据。以下是抓取列表的基本代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
进口 要求
bs4 进口 美丽汤
进口 JSON

# 从单个页面获取列表的函数
DEF 获取列表(页码):
网址= f“https://www.superpages.com/search?search_terms=Home%20Services&geo_location_terms=Los%20Angeles%2C%20CA&page={页码}"
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:131.0)Gecko/20100101 Firefox/131.0”
}
响应 = requests.get(url, headers=headers)
if 响应.status_code == 200:
汤 = BeautifulSoup(response.content, “html.解析器”)
列表 = []

business in 汤.选择(“div.搜索结果>div.结果”):
名称 = business.select_one(“a.business-name 跨度”).text.strip() if 业务.select_one(“a.business-name 跨度”) 其他 ""
地址 = business.select_one(“span.街道地址”).text.strip() if 业务.select_one(“span.街道地址”) 其他 ""
电话=business.select_one(“a.phone.primary”).text.strip() if 业务.select_one(“a.phone.primary”) 其他 ""
网站 = business.select_one(“a.weblink 按钮”)[“参考”] if 业务.select_one(“a.weblink 按钮”) 其他 ""
详细信息页面链接 = 'https://www.superpages.com' + 业务.select_one(“a.公司名称”)[“参考”] if 业务.select_one(“a.公司名称”) 其他 ""

列表.附加({
“名称”: 姓名,
“地址”: 地址,
“电话”: 电话,
“网站”: 网站,
“详细页面链接”:详细信息页面链接
})

回报 上市
其他:
打印(“无法检索页面。”)
回报 []

此代码从给定的结果页面获取数据。它提取每个企业的名称、地址、电话号码和网站,并将它们存储在字典列表中。

处理分页

为了获取更多数据,我们需要处理分页,以便抓取工具可以遍历多个页面。SuperPages 会更改 URL 中的页码,因此通过循环遍历页码可以轻松添加分页。我们可以创建一个如下所示的函数来抓取多个页面:

1
2
3
4
5
6
7
8
# 从多个页面获取列表的函数
DEF 获取所有列表(总页数):
所有列表 = []
in 范围(1, 总页数 + 1):
打印(f"抓取页面 {页}...“)
列表 = 获取列表(页面)
all_listings.extend(列表)
回报 all_listings

现在, fetch_all_listings() 将通过调用以下方法从指定数量的页面收集数据 fetch_listings() 反复。

将数据保存在 JSON 文件中

收集完所有数据后,重要的是将其保存为 JSON 文件以便于访问。以下是如何以 JSON 格式保存数据:

1
2
3
4
5
# 将列表数据保存到 JSON 文件的函数
DEF 保存到json(数据,文件名=“超级页面列表.json”):
- open(文件名, “w”) as 文件:
json.dump(数据,文件,缩进=4)
打印(f”数据保存至 {文档名称}")

此代码将数据保存在名为 superpages_listings.json。每个条目都会有企业名称、地址、电话号码和网站。

完整代码示例

以下是包含所有步骤的完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
进口 要求
bs4 进口 美丽汤
进口 JSON

# 从单个页面获取列表的函数
DEF 获取列表(页码):
网址= f“https://www.superpages.com/search?search_terms=Home%20Services&geo_location_terms=Los%20Angeles%2C%20CA&page={页码}"
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:131.0)Gecko/20100101 Firefox/131.0”
}
响应 = requests.get(url, headers=headers)
if 响应.status_code == 200:
汤 = BeautifulSoup(response.content, “html.解析器”)
列表 = []

business in 汤.选择(“div.搜索结果>div.结果”):
名称 = business.select_one(“a.business-name 跨度”).text.strip() if 业务.select_one(“a.business-name 跨度”) 其他 ""
地址 = business.select_one(“span.街道地址”).text.strip() if 业务.select_one(“span.街道地址”) 其他 ""
电话=business.select_one(“a.phone.primary”).text.strip() if 业务.select_one(“a.phone.primary”) 其他 ""
网站 = business.select_one(“a.weblink 按钮”)[“参考”] if 业务.select_one(“a.weblink 按钮”) 其他 ""
详细信息页面链接 = 'https://www.superpages.com' + 业务.select_one(“a.公司名称”)[“参考”] if 业务.select_one(“a.公司名称”) 其他 ""

列表.附加({
“名称”: 姓名,
“地址”: 地址,
“电话”: 电话,
“网站”: 网站,
“详细页面链接”:详细信息页面链接
})

回报 上市
其他:
打印(“无法检索页面。”)
回报 []

# 从多个页面获取列表的函数
DEF 获取所有列表(总页数):
所有列表 = []
in 范围(1, 总页数 + 1):
打印(f"抓取页面 {页}...“)
列表 = 获取列表(页面)
all_listings.extend(列表)
回报 all_listings

# 将列表数据保存到 JSON 文件的函数
DEF 保存到json(数据,文件名=“超级页面列表.json”):
- open(文件名, “w”) as 文件:
json.dump(数据,文件,缩进=4)
打印(f”数据保存至 {文档名称}")

# 运行完整抓取工具的主要函数
DEF ():
总页数= 5 # 定义要抓取的页面数
all_listings_data = 获取所有列表(总页数)
保存到json(所有列表数据)

# 运行主函数
if __名字__ == “__主要的__”:
主()

示例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

{
“名称”: “长青清洁系统”,
“地址”: “3325 Wilshire Blvd Ste 622,洛杉矶,加利福尼亚州 90010”,
“电话”: “213-375-1597立即致电”,
“网站”: “https://www.evergreencleaningsystems.com”,
“详细页面链接”: “https://www.superpages.com/los-angeles-ca/bpp/evergreen-cleaning-systems-540709574?lid=1002188497939”
},
{
“名称”: “快乐女仆”,
“地址”: “14741 Kittridge Street,范奈斯,加利福尼亚州 91405”,
“电话”: “818-465-8982立即致电”,
“网站”: “http://www.merrymaids.com”,
“详细页面链接”: “https://www.superpages.com/van-nuys-ca/bpp/merry-maids-542022905?lid=1002108319143”
},
{
“名称”: “任何时间任何时间的清洁服务”,
“地址”: “27612 Cherry Creek Dr,圣克拉丽塔,CA 91354”,
“电话”: “661-297-2702立即致电”,
“网站”: "",
“详细页面链接”: “https://www.superpages.com/santa-clarita-ca/bpp/any-day-anytime-cleaning-service-513720439?lid=1002021283815”
},
{
“名称”: “超声波盲人服务”,
“地址”: “2049 Pacific Coast Hwy,Ste 217,洛米塔,CA 90717”,
“电话”: “424-257-6603立即致电”,
“网站”: “http://www.ultrasonicblindservices.com”,
“详细页面链接”: “https://www.superpages.com/lomita-ca/bpp/ultrasonic-blind-services-514581803?lid=1002166431055”
},
.... 更多的
]

抓取 SuperPages 业务详情

从列表中获取基本信息后,就该访问每个列表的专用页面,深入了解各个业务的详细信息。此步骤将帮助您收集更深入的信息,例如营业时间、客户评论和其他联系方式。

检查 HTML 中的选择器

首先,我们将检查 SuperPages 业务详情页面的 HTML 结构,以确定每条信息的位置。方法如下:

  1. 打开企业详情页面:点击搜索结果中的任意企业名称,即可打开其详细信息页面。
  2. 检查页面:右键单击并选择“检查”或按 Ctrl + Shift + I 打开开发人员工具。
SuperPages 业务详情 HTML 检查的屏幕截图
  1. 找到关键元素:
  • 生意名称:发现于 <h1> 带有类的标签 .business-name.
  • 营业时间:按行显示 .biz-hours 表格中每天的小时数以 <tr> - th.day-labeltd.day-hours.
  • 联系信息:位于键值对内 .details-contact 部分,每个键 <dt> 标签和相应的每个值 <dd> 标签。

确定这些选择器后,您就可以进入下一步了。

编写业务详细信息抓取工具

现在,让我们在 Python 脚本中使用这些选择器从每个业务页面抓取具体的详细信息。首先,我们将向每个业务详细信息页面 URL 发出请求。然后,我们将使用 BeautifulSoup 解析并提取具体信息。

以下是从每个页面抓取业务详细信息的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
进口 要求
bs4 进口 美丽汤
进口 JSON

DEF 获取业务详情(网址):
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:131.0)Gecko/20100101 Firefox/131.0”
}
响应 = requests.get(url, headers=headers)
汤 = BeautifulSoup(response.content, 'html.parser')

# 提取企业名称
名称 = 汤.find('h1', 类_='企业名称').text.strip() if 汤.找到('h1', 类_='企业名称') 其他 ""

# 以键值对的形式提取营业时间
小时 = {
行.查找(‘日’, 类_='日标签').text.strip(): row.find(‘TD’, 类_=‘日间’).text.strip()
in 汤.选择('.biz-hours tr')
}

# 提取联系信息作为键值对
联系信息 = {
dt.文本.strip().replace(':', ''): dd.文本.strip()
日期、日数 in 拉链(汤.选择(‘.details-联系方式’), 汤.选择(‘.details-联系方式’))
}

# 将详细信息存储在字典中
详细信息 = {
“名称”: 姓名,
‘小时’:小时,
‘联系信息’:联系方式
}
回报 详情

将数据保存在 JSON 文件中

为了方便以后处理抓取的数据,我们将业务详细信息保存在 JSON 文件中。这样您就可以以有组织的方式存储和访问信息。

1
2
3
DEF 保存到json(数据,文件名='业务详情.json'):
- open(文件名, 'w') as 文件:
json.dump(数据,文件,缩进=4)

完整代码示例

这是完整的代码,包括从获取业务详细信息到将其保存在 JSON 文件中的所有内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
进口 要求
bs4 进口 美丽汤
进口 JSON

DEF 获取业务详情(网址):
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:131.0)Gecko/20100101 Firefox/131.0”
}
响应 = requests.get(url, headers=headers)
汤 = BeautifulSoup(response.content, 'html.parser')

# 提取企业名称
名称 = 汤.find('h1', 类_='企业名称').text.strip() if 汤.找到('h1', 类_='企业名称') 其他 ""

# 以键值对的形式提取营业时间
小时 = {
行.查找(‘日’, 类_='日标签').text.strip(): row.find(‘TD’, 类_=‘日间’).text.strip()
in 汤.选择('.biz-hours tr')
}

# 提取联系信息作为键值对
联系信息 = {
dt.文本.strip().replace(':', ''): dd.文本.strip()
日期、日数 in 拉链(汤.选择(‘.details-联系方式’), 汤.选择(‘.details-联系方式’))
}

# 将详细信息存储在字典中
详细信息 = {
“名称”: 姓名,
‘小时’:小时,
‘联系信息’:联系方式
}
回报 详情

DEF 保存到json(数据,文件名='业务详情.json'):
- open(文件名, 'w') as 文件:
json.dump(数据,文件,缩进=4)

DEF ():
网址 = [
'https://www.superpages.com/los-angeles-ca/bpp/evergreen-cleaning-systems-540709574?lid=1002188497939',
'https://www.superpages.com/van-nuys-ca/bpp/merry-maids-542022905?lid=1002108319143',
# 在此处添加更多产品 URL
]

所有业务详情 = []
网址 in 网址:
业务详情 = 获取业务详情 (网址)
all_business_details.append(业务详情)

# 将所有详细信息保存到 JSON 文件中
保存到json(所有业务详情)

if __名字__ == '__主要__':
主()

示例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[
{
“名称”: “长青清洁系统”,
“小时”: {
“周一至周五”: “上午 7:00 - 晚上 8:00”,
“星期六”: “上午 7:00 - 晚上 6:00”,
“太阳”: “关闭”
},
“联系方式”: {
“电话”: “总机 - 213-375-1597”,
“地址”: “3325 Wilshire Blvd Ste 622 洛杉矶,加利福尼亚州 90010”,
“电子邮件”: “联系我们”,
“关联”: “https://www.evergreencleaningsystems.com”
}
},
{
“名称”: “快乐女仆”,
“小时”: {
“周一至周五”: “上午 7:30 - 晚上 5:30”,
“星期六”: “上午 7:00 - 晚上 3:00”
},
“联系方式”: {
“电话”: “总机 - 818-465-8982”,
“地址”: “14741 Kittridge Street Van Nuys,加利福尼亚州 91405”,
“电子邮件”: “联系我们”,
“关联”: “http://www.merrymaids.com”
}
}
]

使用 Crawlbase 优化 SuperPages Scraper Smart Proxy

为了使我们的 SuperPages 爬虫更加强大和快速,我们可以使用 爬虫库 Smart Proxy. Smart Proxy 具有 IP 轮换和反机器人保护,这对于在长时间数据收集期间不达到速率限制或被阻止至关重要。

添加 Crawlbase Smart Proxy 我们的设置很简单。 立即注册 在 Crawlbase 上获取 API 令牌。我们将使用 Smart Proxy URL 以及我们的令牌使请求看起来好像来自不同位置。这将帮助我们避免检测并确保不间断地抓取数据。

以下是我们如何修改代码以使用 Crawlbase Smart Proxy:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
进口 要求
bs4 进口 美丽汤

# 代替 _USER_TOKEN_ 使用您的 Crawlbase 令牌
代理网址 = 'http://_USER_TOKEN_:@smartproxy.crawlbase.com:8012'

DEF 获取业务详情(网址):
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:131.0)Gecko/20100101 Firefox/131.0”
}
代理={“http”:代理网址, “https”: 代理网址}
响应 = 请求.get(url = url,headers = headers,proxies = proxies,verify =)
汤 = BeautifulSoup(response.content, 'html.parser')

# 提取企业名称
名称 = 汤.find('h1', 类_='企业名称').text.strip() if 汤.找到('h1', 类_='企业名称') 其他 ""

# 以键值对的形式提取营业时间
小时 = {
行.查找(‘日’, 类_='日标签').text.strip(): row.find(‘TD’, 类_=‘日间’).text.strip()
in 汤.选择('.biz-hours tr')
}

# 提取联系信息作为键值对
联系信息 = {
dt.文本.strip().replace(':', ''): dd.文本.strip()
日期、日数 in 拉链(汤.选择(‘.details-联系方式’), 汤.选择(‘.details-联系方式’))
}

# 将详细信息存储在字典中
详细信息 = {
“名称”: 姓名,
‘小时’:小时,
‘联系信息’:联系方式
}
回报 详情

通过 Crawlbase 路由我们的请求,我们添加了必要的 IP 轮换和反机器人措施,从而提高了抓取工具的可靠性和可扩展性。此设置非常适合从 SuperPages 收集大量数据,不会出现中断或阻塞,从而保持抓取工具的高效性和有效性。

总结

在这篇博客中,我们介绍了如何抓取 SuperPages 以获取潜在客户。我们学习了如何提取姓名、地址和电话号码等业务数据。我们使用 Requests 和 BeautifulSoup 创建了一个简单的抓取工具来获取这些数据。

我们还介绍了如何处理分页以获取网站上的所有列表。通过使用 爬虫库 Smart Proxy,我们使我们的抓取工具更加可靠和高效,这样我们在数据收集过程中就不会受到阻碍。

按照本指南中概述的步骤,您可以构建抓取工具并开始提取重要数据。如果您想进行更多网页抓取,请查看我们关于抓取其他主要网站的指南。

📜 轻松抓取 Costco 产品数据
📜 如何抓取 Houzz 数据
📜 如何抓取 Tokopedia
📜 使用 Python 抓取 OpenSea 数据
📜 如何通过简单的步骤抓取 Gumtree 数据

如果您有任何问题或反馈,我们的 支持团队 随时为您提供帮助。祝您抓取愉快!

常见问题

问:如何避免在抓取 SuperPages 时被阻止?

为了避免被阻止,请在请求之间添加延迟,限制请求频率并轮换 IP 地址。类似 爬虫库 Smart Proxy 可以通过轮换 IP 地址来简化此过程,以便您的抓取工具顺利运行。避免过于频繁地发出请求,并遵循良好的抓取做法。

问:为什么我尝试抓取 SuperPages 时没有得到任何结果?

如果您的抓取工具没有返回结果,请检查您的 HTML 选择器是否与 SuperPages 的结构相匹配。有时,网站 HTML 结构的细微变化需要您更新选择器。此外,如果您尝试获取多页结果,请确保正确处理分页。

问:如何以 JSON 以外的格式保存抓取的数据?

如果您需要以其他格式(如 CSV 或 Excel)抓取数据,则可以轻松修改脚本。对于 CSV,请使用 Python 的 csv 模块以行形式保存数据。对于 Excel, pandas 图书馆有一个 .to_excel() 功能运行良好。这种灵活性可以帮助您以适合您需求的方式分析或共享数据。