本指南将教您如何抓取 Craigslist.com。Craig Newmark 于 1995 年创建了该网站,作为分享旧金山湾区活动的电子邮件列表。到 1996 年,该网站发展成为一个网站,并不断发展成为美国最大的分类广告平台。现在,它为来自 70 个国家/地区的人们提供服务,每月访问量超过 20 亿次。

2024 年 Craigslist.com 访问量

图片来源:

每个月,Craigslist 都会收到超过 80 万条分类广告,涉及各种类别,包括就业、住房、待售物品、服务和社区活动。尽管 Craigslist 始于美国和加拿大,但很快就走向了全球。如今,这里已成为搜索各种信息的热门场所,从工作、住房到服务和当地活动。

Craigslist.com 统计数据

图片来源

本文将向您展示如何使用 JavaScript 和 爬虫库 Crawling API 从 Craigslist 中抓取产品列表。您将学习如何抓取重要数据,例如 产品价格、标题、位置和 URL 不会遇到任何阻碍或限制。

目录

  1. 安装必要的库
  2. 设置项目
  3. 从搜索列表中提取 Craigslist.com HTML 数据
  4. 以 JSON 格式抓取 Craigslist.com 产品标题
  5. 抓取 Craigslist.com 产品价格
  6. 抓取 Craigslist.com 产品位置
  7. 抓取 Craigslist.com 产品 URL
  8. 最后,完成代码
  9. 将 Craigslist 数据保存到 CSV 文件

1.安装必要的库

确保您的计算机上安装了 Node.js 以运行 JavaScript 进行网页抓取。学习 JavaScript 的基础知识,例如变量、函数、循环和简单的网页操作,因为它们对于我们的抓取脚本至关重要。初学者可以在 Mozilla Developer Network (MDN) 或 W3Schools 等网站上查看初学者教程来开始使用。

为了有效地从 Craigslist.com 抓取数据,您需要一个来自 Crawlbase 的 API 令牌。通过以下方式创建免费帐户 报名 在他们的网站上,转到您的帐户设置,并找到您的 API 令牌。这些令牌的作用类似于密钥,授予对 Crawling API,使得数据抓取顺畅且高效。

2. 设置项目

第 1 步:创建一个新的项目文件夹:
打开您的终端并输入 mkdir craigslist-scraper 为您的项目创建一个新文件夹。

1
mkdir craigslist-scraper

第 2 步:导航到项目文件夹:
输入 cd craigslist-scraper 移至新创建的文件夹,以便更轻松地管理项目文件。

1
cd craigslist-scraper

第 3 步:生成 JavaScript 文件:
类型 touch index.js 在项目文件夹中创建一个名为index.js 的新文件。如果您愿意,可以选择不同的名称。

1
触摸索引.js

第四步:添加Crawlbase包:
在终端中运行 npm install crawlbase 为你的项目安装 Crawlbase Node 库。此库简化了与 Crawlbase 的连接 Crawling API,方便抓取 Craigslist 数据。

1
npm 安装爬虫库

第5步:安装Fs、JSdom、Json2Csv:
安装 fs 用于文件系统交互,安装 jsdom 用于 HTML 解析,安装 json2csv 用于 JSON 到 CSV 转换。这些模块支持 Craigslist 数据抓取项目中的基本功能,促进文件操作、DOM 操作和数据格式转换。

1
npm 安装 fs jsdom json2csv

完成这些步骤后,您就可以开始构建 Craigslist 数据抓取工具了!

3. 从搜索列表中提取 Craigslist.com HTML 数据

获得 API 凭证并安装用于网页抓取的 Crawlbase Node.js 库后,就可以开始处理“touch.js”文件了。选择要从中抓取数据的 Craigslist 搜索列表页面。在“touch.js”文件中,使用 Crawlbase Crawling API 以及 fs 库来从您选择的 Craigslist 页面抓取信息。确保将代码中的占位符 URL 替换为您要抓取的页面的实际 URL。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
常量 { 抓取API } = 要求('crawlbase'),
FS = 要求('fs'),
抓取基础令牌 = 'YOUR_CRAWLBASE_TOKEN',
接口= 抓取API({ 象征:crawlbaseToken }),
craigslistPageURL = 'https://chicago.craigslist.org/search/rea?hasPic=1#search=1~gallery~0~0';

蜜蜂。得到(craigslistPageURL)。然后(处理CrawlResponse)。捕捉(处理抓取错误);

功能 处理抓取响应(响应){
if (回复。状态码 === 200){
fs。写文件同步('响应.html', 回复。身体);
领事.日志('HTML 已保存到response.html');
}
}

功能 处理抓取错误(错误){
领事.错误(错误);
}

代码说明:

此 JavaScript 代码演示了如何使用 fs 库通过 HTTP GET 请求从特定 URL 获取数据。它的独特之处在于它与 Crawlbase 的集成 Crawling API,它增强并实现了大规模网页抓取。现在,让我们进一步剖析代码。

所需的库:

该脚本需要以下库:

  • 抓取基础: 这个库使用 Crawlbase 来促进网页抓取 Crawling API.
  • FS: 这是用于文件操作的 Node.js 文件系统模块。
1
2
常量 { 抓取API } = 要求('crawlbase'),
FS = 要求('fs');

初始化:

  • CrawlingAPI 和 fs 是从各自的库导入的。
  • 用于访问 Crawlbase API 的令牌作为crawlbaseToken 提供。
  • 使用提供的令牌创建 CrawlingAPI 实例。
  • 要抓取的 Craigslist 搜索列表页面的 URL 存储在 craigslistPageURL 中。
1
2
3
常量 抓取基础令牌 = 'YOUR_CRAWLBASE_TOKEN',
接口= 抓取API({ 象征:crawlbaseToken }),
craigslistPageURL = 'https://chicago.craigslist.org/search/rea?hasPic=1#search=1~gallery~0~0';

爬行过程:

使用 Craigslist 页面 URL 作为参数调用 api.get() 方法来启动抓取过程。

  • 如果请求成功,则调用handleCrawlResponse函数来处理响应。
  • 如果爬取过程中出现错误,则会调用handleCrawlError函数来处理错误。
1
蜜蜂。得到(craigslistPageURL)。然后(处理CrawlResponse)。捕捉(处理抓取错误);

处理响应:

在handleCrawlResponse函数中:

  • 它检查响应状态代码是否为 200(表示请求成功)。
  • 如果成功,它会使用 fs.writeFileSync() 将 HTML 响应正文写入名为“response.html”的文件。
  • 控制台会记录一条成功消息,指示 HTML 已保存。
1
2
3
4
5
6
功能 处理抓取响应(响应){
if (回复。状态码 === 200){
fs。写文件同步('响应.html', 回复。身体);
领事.日志('HTML 已保存到response.html');
}
}

错误处理:

在handleCrawlError函数中:

  • 爬网过程中发生的任何错误都会记录到控制台以供调试之用。
1
2
3
功能 处理抓取错误(错误){
领事.错误(错误);
}

HTML输出:

Craigslist HTML 响应

4. 以 JSON 格式抓取 Craigslist.com 产品标题

在本节中,我们将了解如何从 Craigslist 搜索列表页面中抓取有价值的数据。我们想要抓取的数据包括以下元素 产品标题、价格、位置和 URL。为了完成此任务,我们将使用两个基本库创建一个自定义 JavaScript 抓取工具:jsdom(通常用于解析和操作 HTML 文档)和 fs(简化文件操作)。下面的脚本将解析 Craigslist 搜索结果页面的 HTML 结构(我们在上一个示例中的 response.html 文件中获得了该结构),抓取相关信息,并将其组织成 JSON 数组。

抓取 Craigslist.com 产品标题

要抓取产品标题,请使用浏览器开发人员工具找到每个列表的显示位置。识别网页中包含产品标题的特定部分。之后,使用 JSdom 选择器(如 .querySelector)根据其类精确定位该元素。使用.textContent()方法提取文本内容,并使用.trim()确保它是干净的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
常量 FS = 要求('fs'),
{ JSDOM } = 要求('jsdom'),
html = fs.读取文件同步('响应.html', 'utf8'),
多姆= JSDOM(html),
文件 = 统治。窗口.文件,
产品=[],
父元素 = 文件.查询选择器('ol.cl-静态搜索结果');

if (父元素){
常量 第一个元素 = 父元素。查询选择器('li.cl-静态搜索结果');

if (第一个元素){
当前元素=第一个元素;
(当前元素){
常量 产品={};
的产品。标题 = 当前元素。查询选择器('。标题').文本内容.修剪();
的产品。(产品);
当前元素 = 当前元素.下一个元素同级;
}
}
}

5. 抓取 Craigslist.com 产品价格:

抓取 Craigslist 产品价格

在本节中,我们将了解如何从 Craigslist 列表页面的爬网 HTML 中抓取产品价格。

1
的产品。车资 = 当前元素。查询选择器('。价格').文本内容.修剪();

6. 抓取 Craigslist.com 产品位置:

抓取 Craigslist 产品位置

产品位置提供有关产品位置的有用详细信息,这对于各种研究和商业目标都很重要。抓取产品位置时,我们将使用 JSdom 包来解析 HTML 文本并查找所需的信息。

1
的产品。地址 = 当前元素。查询选择器('。地点').文本内容.修剪();

7. 抓取 Craigslist.com 产品 URL:

抓取 Craigslist 产品 url

与前面的步骤类似,我们将使用 JSdom 包来解析 HTML 内容并查找所需的信息。

1
的产品。网址 = 当前元素。查询选择器('一种').获取属性('href');

8.最后,完成代码

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
常量 FS = 要求('fs'),
{ JSDOM } = 要求('jsdom'),
html = fs.读取文件同步('响应.html', 'utf8'),
多姆= JSDOM(html),
文件 = 统治。窗口.文件,
产品=[],
父元素 = 文件.查询选择器('ol.cl-静态搜索结果');

if (父元素){
常量 第一个元素 = 父元素。查询选择器('li.cl-静态搜索结果');

if (第一个元素){
当前元素=第一个元素;
(当前元素){
常量 产品={};
的产品。标题 = 当前元素。查询选择器('。标题').文本内容.修剪();
的产品。车资 = 当前元素。查询选择器('。价格').文本内容.修剪();
的产品。地址 = 当前元素。查询选择器('。地点').文本内容.修剪();
的产品。网址 = 当前元素。查询选择器('一种').获取属性('href');
的产品。(产品);
当前元素 = 当前元素.下一个元素同级;
}
}
}

常量 json数据 = JSON.串化(产品, , 2);
fs。写文件同步('产品.json', jsonData);
领事.日志('JSON 数据保存到 products.json 文件');

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
[
{
“标题”: “梅尔罗斯公园商业地产出售”,
“价钱”: “ $ 0”,
“地点”: “先租后买”,
“网址”: “https://chicago.craigslist.org/nch/reo/d/melrose-park-melrose-park-commercial/7732627311.html”
},
{
“标题”: “出租两居室拖车”,
“价钱”: “ $ 675”,
“地点”: “第 165 号与肯尼迪号”,
“网址”: “https://chicago.craigslist.org/nwi/reo/d/hammond-bedroom-trailer-for-rent/7732856568.html”
},
{
“标题”: 《巴灵顿村之家》,
“价钱”: “ $ 439,000”,
“地点”: 「西北郊」,
“网址”: “https://chicago.craigslist.org/nwc/reo/d/barrington-barrington-village-home/7734168844.html”
},
{
“标题”: “负担得起的檀香山,低利率,低利息可承担贷款”,
“价钱”: “ $ 0”,
“地点”: “嗨——檀香山”,
“网址”: “https://chicago.craigslist.org/nwi/reo/d/honolulu-affordable-honolulu-low-down/7730954791.html”
},
{
“标题”: “2间卧室、1间浴室的牧场别墅”,
“价钱”: “ $ 239,900”,
“地点”: “本森维尔/埃尔姆赫斯特”,
“网址”: “https://chicago.craigslist.org/wcl/reo/d/bedroom-bath-ranch-house/7731012362.html”
},
{
“标题”: “2645 W Winnemac Ave | 两套公寓出售”,
“价钱”: “ $ 780,000”,
“地点”: 《林肯广场》,
“网址”: “https://chicago.craigslist.org/chc/reb/d/chicago-2645-winnemac-ave-two-flat-for/7734138150.html”
},
{
“标题”: “威斯康星州北部卢塞恩湖附近的 6 英亩土地”,
“价钱”: “ $ 44,900”,
“地点”: “威斯康星州克兰登”,
“网址”: “https://chicago.craigslist.org/chc/reb/d/crandon-acres-near-lake-lucerne-in/7734135193.html”
},
{
“标题”: “5 英亩土地// 140 万美元// 乔纳森·诺尔斯// 伊利诺伊州沃兹沃思”,
“价钱”: “ $ 140,000”,
“地点”: 《沃兹沃斯》,
“网址”: “https://chicago.craigslist.org/nch/reo/d/zion-acres-of-land-140k-jonathan-knolls/7734135008.html”
},
{
“标题”: “4 床 - 2 浴室,税费仅 2500 美元。大型私人地段 - 僻静”,
“价钱”: “ $ 229,000”,
“地点”: “克雷斯特伍德”,
“网址”: “https://chicago.craigslist.org/sox/reo/d/robbins-bed-bathtaxes-only-2500-yrlarge/7732451653.html”
},
{
“标题”: “仓库商业/住宅,大型围栏庭院,3 湾加热,299 万美元”,
“价钱”: “ $ 299,000”,
“地点”: 《橡树草坪》,
“网址”: “https://chicago.craigslist.org/sox/reo/d/hometown-warehouse-commercial/7731255443.html”
},
{
“标题”: “私人门控分区。4床、3浴室+2000平方英尺车库,必看”,
“价钱”: “ $ 649,000”,
“地点”: “莫尼 - 60449”,
“网址”: “https://chicago.craigslist.org/sox/reo/d/private-gate-subdivision4bed/7725442192.html”
},
{
“标题”: “9 英亩,商业/工业,多种用途,300/400 卡车存储,柴油维修,销售”,
“价钱”: “ $ 1,500,000”,
“地点”: “莫尼大学公园”,
“网址”: “https://chicago.craigslist.org/sox/reo/d/park-forest-acrescomm-indmany-uses/7725442644.html”
},
{
“标题”: “建筑,仓库高高的天花板,全部重做,必看,储藏仓库”,
“价钱”: “ $ 299,000”,
“地点”: “中洛锡安”,
“网址”: “https://chicago.craigslist.org/sox/reo/d/midlothian-building-warehouse-high/7725443018.html”
}
]

9. 将 Craigslist.com 数据保存为 CSV 文件

在运行以下代码之前,请确保您已通过运行 npm install json2csv 安装了 json2csv 包。此脚本读取您在上一步中抓取的 products.json 文件,指定要包含在 CSV 中的字段,将 JSON 数据转换为 CSV 格式,然后将 CSV 数据写入名为 products.csv 的文件。

1
2
3
4
5
6
7
8
9
10
常量 FS = 要求('fs'),
json2csv = 要求('json2csv').解析,
产品= 要求('./products.json'),
字段 = ['标题', '价格', '地点', '网址'],
.csv = json2csv(产品,{字段});

fs。写文件(“产品.csv”、csv、 功能 (犯错){
if (呃) 呃;
领事.日志(“CSV 文件已保存!”);
});

输出 CSV 文件的片段:

将 Craigslist 数据保存到 CSV 文件中

抓取 Craigslist 数据对于研究市场、识别潜在线索、分析竞争对手和收集数据集非常有用。但是,Craigslist 使用严格的安全措施,例如 IP 禁令和 CAPTCHA 屏幕,这使得抓取变得困难。Crawlbase Crawling API 解决了这个问题,它允许您大规模抓取 Craigslist 的公开列表,而不会遇到 IP 禁令或 CAPTCHA 问题。本指南演示了如何从 Craigslist 抓取房产列表数据并将其存储为 JSON 和 CSV 文件。

查看我们的附加指南,了解类似方法 Trulia的, Realtor.com, Zillow的Target.com。这些资源对于提高跨不同平台的数据抓取能力非常有价值。

额外指南:

如何使用 ChatGPT 抓取网站

如何抓取 TikTok

如何构建 Wayfair 价格跟踪器

如何使用 Smart Proxy

如何抓取 Instagram 数据

10 常见问题解答

作为本指南的总结,我们来解决有关抓取 Craigslist 数据的常见常见问题解答。

Craigslist.com 的历史是什么?

克雷格·纽马克 (Craig Newmark) 于 1995 年创立了 Craigslist。它最初是一个共享旧金山当地活动和分类广告的电子邮件列表。到 1996 年,它已发展成为一个迅速发展成为全球顶级分类广告目的地的网站。即使在开始赚钱之后,它仍然专注于帮助个人,对工作和公寓列表收取少量费用。它扩展到其他国家,包括加拿大和英国。尽管存在一些问题,Craigslist 通过保持简单明了的方式和支持当地社区(尤其是通过 Craig Newmark 的慈善捐款)保持了其受欢迎程度。

克雷格列表历史

Craigslist 允许抓取吗?

抓取公开信息是合法的,但法律可能会有所不同,因此建议在开始任何 Craigslist 抓取项目之前咨询专业法律顾问。 Craigslist 禁止自动抓取,但允许个人使用的手动访问。未经授权的抓取可能会导致访问阻止或法律后果。版权和隐私是需要考虑的两个道德和法律因素,因为它们的合法性因司法管辖区而异。要了解有关抓取的更多信息,请阅读 “网络抓取合法吗?” 的文章。

Craigslist 有官方 API 吗?

Craigslist.com 不提供用于访问其数据的官方 API。虽然某些部分提供 RSS 源以进行有限的数据访问,但没有可用的全面 API。因此,开发人员经常求助于网络抓取技术来从 Craigslist 抓取数据。

如何避免 Craigslist 验证码?

为了避免 Craigslist CAPTCHA,请考虑使用 Crawlbase 等可靠的 API Crawling API。此 API 可保护网络爬虫免受请求被阻止、代理失败、IP 泄漏、浏览器崩溃和 CAPTCHA 的影响。Crawlbase 的人工智能算法和工程团队一直在优化技术以提供最佳的爬取体验。用户可以使用这些强大的程序来击败 CAPTCHA 并从 Craigslist 和其他网站收集数据,而不会出现延迟或访问限制。

为什么要抓取 Craigslist?

Craigslist 是一个有用的资源,提供多种类别的信息,包括就业、房地产、服务和待售产品。Craigslist 有很多信息,但 IP 过滤和 CAPTCHA 问题等安全功能使其难以抓取。使用 Crawlbase Crawling API,这些挑战是可以克服的,这使得企业和研究人员能够获取用于各种目的的有价值的数据。

以下是使用 Crawlbase 抓取 Craigslist 的好处:

  1. 市场研究和竞争分析: 公司可以通过抓取 Craigslist 列表来了解定价趋势、消费者需求和竞争对手策略。通过分析这些数据,了解市场趋势、发现差距以及做出明智的决策以保持竞争优势都变得更加容易。
  2. 领先一代: Craigslist 抓取通过收集潜在消费者或客户的联系方式来促进潜在客户的开发。这包括可用于有针对性的营销活动和销售外展活动的电话号码和电子邮件地址。
  3. 房地产洞察: Craigslist 抓取为房地产专家和房地产投资者提供了有关房地产市场的优质信息。跟踪租金价格、房产列表和区域趋势可以让您做出更明智的投资决策,并根据市场状况修改定价策略。
  4. 就业市场分析: 求职者和雇主可以利用 Craigslist 抓取来访问职位发布的实时数据。分析工作趋势、技能要求和薪资期望使求职者能够定制简历,并帮助雇主优化招聘策略。
  5. 电子商务优化: Craigslist 抓取是电子商务公司跟踪竞争对手价格、发现产品趋势和改进自己的列表的有用工具。通过使用数据驱动的策略以有竞争力的价格提供相关产品,企业可以在在线市场上保持竞争力。