跳转到主要内容
如果您熟悉 JS,但刚接触网页数据爬取,您可能需要了解基本方法以及一两个成功爬取的技巧。 网页爬取的基本概念由两部分组成:导航(Navigation)和解析(Parsing),使用的策略取决于您选择的技术方法——浏览器 Worker(Browser Worker)或代码 Worker(Code Worker)。

浏览器 Worker 与代码 Worker

浏览器 Worker 和代码 Worker 是两种爬取技术方法,您应根据需求、预算以及所爬网站的技术挑战选择合适的方法。 浏览器 Worker 通过无头浏览器模拟用户与网站的交互, 能够处理复杂的爬取任务,如用户输入和动态内容加载。使用浏览器 Worker 运行代码的 CPM 较高,但在某些情况下,这是获取数据的唯一可行方案。 代码 Worker 则在服务器端运行,通过 HTTP 请求执行爬取任务。脚本或程序向目标网站发送请求,从每个响应中提取数据,并保存到文件或数据库中。使用代码 Worker 运行代码成本较低,结果也更快。 您可以随时为每个爬虫切换 Worker 类型,因此无需固定选择某个 Worker,但请注意有一些函数(如 wait)仅为浏览器 Worker 设计和限制。了解更多 Worker 类型

交互与解析

交互(Interaction)和解析(Parsing)是网页爬取的两个关键步骤,涉及访问和操作网站的 HTML 内容。 交互指在网站不同页面或部分之间移动以定位所需数据的过程。通常包括向网站 URL 发送 GET 或 POST 请求,并通过点击链接或提交表单访问不同页面或部分。同时还涉及操作/命令,如 click、type 和 wait。一旦浏览器页面获取到所需数据,调用 parse() 获取数据 —— 这将触发解析器(Parser)代码,然后调用 collect() 将记录添加到最终数据集。 例如:
let data = parse();
collect({
    url: new URL(location.href),
    title: data.title,
    links: data.links,
});
解析指从网站 HTML 内容中提取相关数据的过程。包括识别包含所需数据的 HTML 元素,并使用正则表达式或其他技术从中提取数据。 例如:
return {
  title: $('h1').text().trim(),
  links: $('a').toArray().map(e=>new URL($(e).attr('href'))),
};
例如,假设您想根据搜索词爬取一个电商网站,并返回每个产品的 (title, description, price)。
let search_url = `https`:
navigate(search_url)
let max_page = parse().max_page
for (let i = 1; i <= max_page; i++)
{
    let search_page = new URL(search_url)
     if (i>1)
          search_page.searchParams.set('page', i)
     next_stage({search_page})
}
navigate(input.search_page)
let listings = parse().listings
for (let listing_url of listings)
     next_stage({listing_url})
navigate(input.listing_url)
collect(parse())
  1. 使用 GET 或 POST 请求导航到电商网站的搜索页面
  2. 定位包含页码的 HTML 元素
  3. 解析 HTML 以提取搜索结果页面数量
  4. 导航到每个结果页面并执行以下操作
  5. 定位每条搜索结果数据的 HTML 元素
  6. 解析每条搜索结果的 HTML 内容,收集每个产品页面的 URL
  7. 导航到每个产品页面并执行以下操作
  8. 定位包含所需产品数据的 HTML 元素
  9. 解析 HTML 以提取所需产品数据

大规模爬取的挑战与障碍

在小规模情况下,爬取可以快速且简单,但如果项目需要大量数据,您可能会遇到一些挑战,因为一些网站会实施技术手段(如 CAPTCHA 或 IP 封锁)来防止爬取。有方法可以克服这些挑战,但自行处理可能过于复杂且耗时。为解决这些问题,我们基于专有的 代理基础设施Unlocker API 构建了 IDE 云服务,这样您无需面对这些挑战。