标有 ⭐ 的函数仅在 Browser worker 中有效,从 Code worker 调用时会抛出错误。完整列表见 仅限浏览器的函数。
Scraper Studio 代码是如何组织的?
Bright Data Scraper Studio 抓取器使用两种代码类型:
你可以通过
parse()(运行解析器)和 collect()(将一条记录追加到最终数据集)在两者之间传递数据。
交互函数
交互函数在抓取器的主 JavaScript 上下文中运行,并驱动浏览器或 HTTP 客户端。使用它们来导航、等待元素、与页面交互、捕获网络流量以及将数据移交给解析器。全局对象
导航
navigate,在浏览器中加载 URL
将浏览器导航到某个 URL。默认情况下,404 状态会抛出 dead_page 错误;使用 allow_status 可覆盖此行为。
参数
request,发起直接 HTTP 请求
不使用浏览器发送 HTTP 请求。可在 Code worker 上使用,或在 Browser worker 上使用(当你想绕过浏览器时)。
参数
next_stage,为下一阶段排队输入
在新的浏览器会话中使用给定输入运行抓取器的下一个阶段。
参数
run_stage,运行指定阶段
在新的浏览器会话中运行抓取器的某个命名阶段。
参数
rerun_stage,用新输入重新运行当前阶段
使用新输入再次运行本阶段。用它来分散工作(例如,为分页中的每一页重新运行一次)。
load_sitemap,从 XML 站点地图读取 URL
加载站点地图 XML 文件并返回 URL 列表。支持站点地图索引和 gzip 压缩的站点地图。
参数
resolve_url,通过重定向追踪 URL
返回给定 URL 参数最终指向的 URL。
参数
redirect_history,获取重定向链
返回自上次 navigate() 调用以来的 URL 重定向历史。
response_headers,读取最近一次响应的请求头
返回最近一次页面加载的响应头。
status_code,读取最近一次响应的状态
返回最近一次页面加载的 HTTP 状态码。
在页面上等待 ⭐
所有等待函数仅限 Browser worker。⭐ wait,等待元素出现
参数
⭐ wait_any,等待多个条件中的任意一个
等待任意一个匹配条件成功。当第一个选择器解析成功时返回。
⭐ wait_visible,等待元素可见
参数
⭐ wait_hidden,等待元素消失
参数
⭐ wait_for_text,等待文本内容
等待页面上的某个元素包含给定文本。
参数
wait_for_parser_value,等待解析器字段被填充
在 tag_response() 或 tag_script() 之后使用,以等待捕获的数据可用。
参数
⭐ wait_network_idle,等待浏览器网络稳定
等待浏览器网络在给定时段内保持空闲。
参数
⭐ wait_page_idle,等待 DOM 变更停止
等待 DOM 树在给定时段内不发生任何变化。
参数
元素交互 ⭐
所有交互函数都需要 Browser worker。⭐ click,点击元素
点击元素,会先等待其出现。
参数
⭐ right_click,右键点击元素
与 click 相同,但使用鼠标右键。
⭐ hover,悬停在元素上
将光标移动到元素上,会先等待其出现。
⭐ mouse_to,将光标移动到某个坐标
参数
⭐ type,向输入框输入文本
等待输入框出现,然后输入给定文本。
参数
⭐ press_key,按下特殊键
在当前聚焦的输入框中输入 Enter 或 Backspace 等特殊键。
⭐ select,从 select 元素中选取一个值
参数
⭐ scroll_to,将元素滚动到视图中
滚动页面,使目标元素可见。默认使用自然滚动;传入 immediate: true 可直接跳转。
⭐ scroll_to_all,滚动经过每个匹配元素
⭐ load_more,触发懒加载内容
滚动到列表底部以触发无限滚动加载。
参数
⭐ close_popup,在后台自动关闭弹窗
注册一个后台监视器,每当弹窗出现时将其关闭。推荐的模式见 最佳实践。
参数
⭐ solve_captcha,解决页面上的验证码
⭐ bounding_box,获取元素的页面坐标
返回第一个匹配元素相对于页面的边界框。
参数
el_exists,检查元素是否在页面上
参数
el_is_visible,检查元素是否可见
参数
⭐ track_event_listeners,开始跟踪浏览器事件监听器
必须在 disable_event_listeners() 之前调用。
⭐ disable_event_listeners,禁用事件监听器
阻止页面上所有事件监听器运行。
参数
⭐ freeze_page,停止后续的页面变更
强制页面停止变化,使 HTML 快照准确反映抓取器所看到的内容。实验性功能。
网络与响应标记 ⭐
标记会捕获后台网络流量并将其暴露给解析器。所有tag_* 函数仅限 Browser worker。
⭐ tag_response,保存一个匹配的响应
保存来自某个匹配浏览器请求的响应数据。
参数
⭐ tag_all_responses,保存每个匹配的响应
将每个匹配请求的响应数据保存为一个数组。
⭐ tag_script,提取嵌入在 <script> 标签中的 JSON
参数
⭐ tag_window_field,标记浏览器 window 上的一个值
参数
⭐ tag_image,从 DOM 元素捕获图片 URL
⭐ tag_video,从 DOM 元素捕获视频 URL
参数
⭐ tag_screenshot,保存页面截图
参数
⭐ tag_download,捕获浏览器下载的文件
参数
⭐ tag_serp,将页面解析为搜索引擎结果页
参数
⭐ capture_graphql,捕获并重放 GraphQL 查询
捕获一个 GraphQL 请求,以便你可以用不同的变量重放它。
参数
数据采集
parse,运行解析器代码
运行解析器代码并返回结构化结果。
collect,向数据集追加一条记录
向抓取器的输出添加一条记录。
参数
set_lines,设置输出行,覆盖先前的调用
每次调用 set_lines() 都会覆盖前一次调用。当抓取器采集部分数据,并且你希望在后续步骤抛出错误时交付最后已知状态时,此函数很有用。
参数
load_html,将 HTML 字符串加载到 Cheerio
参数
将一次抓取标记为失败
bad_input,将输入标记为无效
阻止任何重试并报告 error_code=bad_input。
blocked,将页面标记为已被阻止
报告站点拒绝访问。error_code=blocked。
dead_page,将 URL 标记为失效链接
标记页面,以便在未来的采集中将其过滤掉。error_code=dead_page。
⭐ detect_block,检测页面上的阻止情况
参数
会话与路由
country,通过特定国家/地区路由
参数
⭐ proxy_location,细粒度代理位置
除非你需要精确的地理控制,否则优先使用 country()。
参数
preserve_proxy_session,在子阶段之间复用代理会话
set_session_cookie,为当前会话设置 cookie
参数
set_session_headers,设置额外的 HTTP 请求头
参数
浏览器配置 ⭐
仅限 Browser worker。⭐ browser_size,获取当前浏览器窗口大小
以像素返回 {width, height}。
⭐ emulate_device,模拟移动设备
切换用户代理、屏幕分辨率和设备像素比,以匹配某个命名设备。
参数
支持的设备名称完整列表
支持的设备名称完整列表
- Blackberry PlayBook / landscape
- BlackBerry Z30 / landscape
- Galaxy Note 3 / landscape
- Galaxy Note II / landscape
- Galaxy S III / S5 / S8 / S9+(各含 landscape)
- Galaxy Tab S4 / landscape
- iPad / iPad Mini / iPad Pro / iPad Pro 11 / iPad (gen 6) / iPad (gen 7)(各含 landscape)
- iPhone 4, 5, 6, 6 Plus, 7, 7 Plus, 8, 8 Plus, SE, X, XR, 11, 11 Pro, 11 Pro Max, 12 / 12 Mini / 12 Pro / 12 Pro Max, 13 / 13 Mini / 13 Pro / 13 Pro Max(各含 landscape)
- JioPhone 2 / landscape
- Kindle Fire HDX / landscape
- LG Optimus L70 / landscape
- Microsoft Lumia 550, 950(950 含 landscape)
- Nexus 4, 5, 5X, 6, 6P, 7, 10(各含 landscape)
- Nokia Lumia 520 / landscape,Nokia N9 / landscape
- Pixel 2, 2 XL, 3, 4, 4a (5G), 5(各含 landscape)
- Moto G4 / landscape
⭐ font_exists,检查浏览器字体支持
断言浏览器可以渲染给定的字体系列。
⭐ html_capture_options,配置 HTML 捕获
控制 HTML 快照的捕获方式。
参数
embed_html_comment,向页面 HTML 注入注释
在 HTML 快照中嵌入元数据。
调试与可观测性
console,从交互代码记录日志
⭐ verify_requests,监控失败的浏览器请求
在每个失败的浏览器请求上触发回调。
参数
值构造函数
Bright Data Scraper Studio 为结构化输出字段提供了带类型的构造函数。Image、Video、Pdf、Doc、Money
支持下载的文件类型
Scraper Studio 支持通过媒体和文档字段构造函数下载文件。 使用方式:new Image()用于图片文件new Video()用于视频文件new Pdf()用于 PDF 文件new Doc()用于受支持的文档、文本、音频、视频和结构化文件类型
new Doc() 支持的内容类型
new Doc() 支持以下内容类型:
URL
标准 Node.js URL 类。
解析函数
解析代码在交互代码调用parse() 之后运行。它接收捕获的 HTML 和任何已标记的数据,并向交互代码返回单条记录(或记录数组)。解析代码使用 Cheerio,一个与 jQuery 兼容的 HTML 解析器。
解析代码中可用的全局对象
Cheerio 辅助函数
Bright Data Scraper Studio 在标准 API 之上添加了自定义 Cheerio 方法。$(selector).text_sane(),规范化空白字符
返回 text(),其中所有连续的空白字符被折叠为单个空格并去除首尾空白。
$(selector).filter_includes(text),按文本内容筛选元素
将选择集筛选为文本包含给定子串的元素。可与 Cheerio API 的其余部分链式调用。
解析器值构造函数
Image、Video、PDF 和 Money 在解析代码中同样可用,且工作方式相同。
验证已下载媒体的类型
使用validate_type 检查已下载文件的内容是否与预期的媒体类型匹配。此选项由 new Pdf()、new Image() 和 new Video() 支持。
启用 validate_type 后,Scraper Studio 会在获取文件后对其进行验证。如果文件内容与预期类型不匹配,该字段将返回错误,而不是有效的已下载文件。
示例:
Shadow DOM 支持
接受选择器的交互命令也接受选择器数组,让你能够深入 Shadow DOM 树。可将其与click、wait、type 及其他交互函数一起使用。
当你传入数组时:
- 其中一个选择器必须指向 shadow host 元素
- 它之后的每个选择器都在该 shadow root 内解析
my-shadow-host 是附加了 shadow root 的元素,而 button.submit 在该 shadow root 内解析。
仅限浏览器的函数
以下函数需要 Browser worker,从 Code worker 调用时会抛出not_supported_in_code_worker。使用此列表来决定你的抓取器需要哪种 worker。
请参阅 Worker 类型 以在 Browser worker 和 Code worker 之间做出选择。
相关内容
最佳实践
编写快速、可靠抓取器的推荐模式
Worker 类型
何时使用 Browser worker 与 Code worker
网页抓取基础
核心概念:交互、解析、阶段和规模
开发抓取器
在 IDE 中构建抓取器的逐步演示