Algolia 爬虫未获取 google-codelabs-step 标签
Algolia crawler not fetching google-codelabs-step label
问题
我正在使用 Algolia Crawler 从使用 Codelabs 制作的网络应用程序中获取内容。我不明白为什么它会忽略我的请求,想知道如何获取 元素。
我做了什么:
爬虫无法识别 元素,我需要获取层次结构 lvl1.
我需要获取的是其中一个元素:
google-codelab-step label=""
h2 is-upgraded="" class="step-title"
但是我做不到。
这是 html:
<google-codelab-step label="" duration="" step="">
<div class="">
<div class="inner">
<h2 is-upgraded="" class="step-title"> </h2>
</google-codelab-step>
我的抓取工具是这样的:
{
indexName: "crawler_name",
pathsToMatch: ["https://website.com/**"],
recordExtractor: ({ helpers, $ }) => {
const trainingLabel = $("#step-title").attr("h2");
let returnLabel = trainingLabel ? trainingLabel : "";
return helpers.docsearch({
recordProps: {
lvl1: returnLabel,
content: "p, td, li",
lvl0: {
selectors: ["#codelab-title > h1", "h1.title", "title"],
defaultValue: "default",
},
lvl2: "google-codelab-step h2",
lvl3: "google-codelab-step h3",
lvl4: "google-codelab-step h4",
lvl5: "google-codelab-step h5, google-codelab-step td:first-child",
lvl6: "google-codelab-step h6",
},
});
},
},
我目前能够获取:内容、lvl0、lvl2 和 lvl3。我尝试使用以下可能性获得 lvl1,但没有成功:
const trainingLabel = $("#step-title").attr("h2");
const trainingLabel = $("google-codelab-step").attr("label");
const trainingLabel = $("google-codelab-step > #step-title").attr("h2");
const trainingLabel = $("#step-title").attr("h2");
const trainingLabel = $("step-title").attr("h2");
const trainingLabel = $("step-title, h2").text();
lvl1: "google-codelab-step > label",
lvl1: "google-codelab-step > #step-title h2";
我非常感谢它对如何获取 lvl1 项目的任何帮助。
我通过使用基本模板而不是使用 Docusaurus 模板解决了我的问题,它附带了一些我不理解的信息。
这就是我现在的动作:
{
indexName: "crawler_name",
pathsToMatch: ["https://url.com/**"],
recordExtractor: ({ $, url }) => {
const trainingLabel = $("google-codelab").attr("id");
const trainingSubModules = $("google-codelab-step").attr("label");
const titleHome = $("h1")
.map((i, e) => $(e).text())
.get();
const moduleDescription = $("div.description")
.map((i, e) => $(e).text())
.get();
const subtitle = $("h2")
.map((i, e) => $(e).text())
.get();
const items = $("h3")
.map((i, e) => $(e).text())
.get();
return [
{
titleHome: titleHome,
trainingLabel: trainingLabel,
trainingSubModules: trainingSubModules,
moduleDescription: moduleDescription,
subtitle: subtitle,
items: items,
objectID: url.href,
},
];
},
},
通过创建自己的标签,而不是使用预设的层次结构和助手,我有了更多的控制权。
问题
我正在使用 Algolia Crawler 从使用 Codelabs 制作的网络应用程序中获取内容。我不明白为什么它会忽略我的请求,想知道如何获取 元素。
我做了什么:
爬虫无法识别 元素,我需要获取层次结构 lvl1.
我需要获取的是其中一个元素:
google-codelab-step label=""
h2 is-upgraded="" class="step-title"
但是我做不到。 这是 html:
<google-codelab-step label="" duration="" step="">
<div class="">
<div class="inner">
<h2 is-upgraded="" class="step-title"> </h2>
</google-codelab-step>
我的抓取工具是这样的:
{
indexName: "crawler_name",
pathsToMatch: ["https://website.com/**"],
recordExtractor: ({ helpers, $ }) => {
const trainingLabel = $("#step-title").attr("h2");
let returnLabel = trainingLabel ? trainingLabel : "";
return helpers.docsearch({
recordProps: {
lvl1: returnLabel,
content: "p, td, li",
lvl0: {
selectors: ["#codelab-title > h1", "h1.title", "title"],
defaultValue: "default",
},
lvl2: "google-codelab-step h2",
lvl3: "google-codelab-step h3",
lvl4: "google-codelab-step h4",
lvl5: "google-codelab-step h5, google-codelab-step td:first-child",
lvl6: "google-codelab-step h6",
},
});
},
},
我目前能够获取:内容、lvl0、lvl2 和 lvl3。我尝试使用以下可能性获得 lvl1,但没有成功:
const trainingLabel = $("#step-title").attr("h2");
const trainingLabel = $("google-codelab-step").attr("label");
const trainingLabel = $("google-codelab-step > #step-title").attr("h2");
const trainingLabel = $("#step-title").attr("h2");
const trainingLabel = $("step-title").attr("h2");
const trainingLabel = $("step-title, h2").text();
lvl1: "google-codelab-step > label",
lvl1: "google-codelab-step > #step-title h2";
我非常感谢它对如何获取 lvl1 项目的任何帮助。
我通过使用基本模板而不是使用 Docusaurus 模板解决了我的问题,它附带了一些我不理解的信息。
这就是我现在的动作:
{
indexName: "crawler_name",
pathsToMatch: ["https://url.com/**"],
recordExtractor: ({ $, url }) => {
const trainingLabel = $("google-codelab").attr("id");
const trainingSubModules = $("google-codelab-step").attr("label");
const titleHome = $("h1")
.map((i, e) => $(e).text())
.get();
const moduleDescription = $("div.description")
.map((i, e) => $(e).text())
.get();
const subtitle = $("h2")
.map((i, e) => $(e).text())
.get();
const items = $("h3")
.map((i, e) => $(e).text())
.get();
return [
{
titleHome: titleHome,
trainingLabel: trainingLabel,
trainingSubModules: trainingSubModules,
moduleDescription: moduleDescription,
subtitle: subtitle,
items: items,
objectID: url.href,
},
];
},
},
通过创建自己的标签,而不是使用预设的层次结构和助手,我有了更多的控制权。