
Actor 是托管的数据采集程序。Task 是已保存的输入预设。Actor 采集源数据行。比较由你在本文中完成。
你在比较什么
域名是你选择要计数的网站主机。查询面板是一份精确短语的短列表。固定是指你在看到结果之前写好该列表,之后不再更改。上限是你要求为一条精确查询保留的最多结果数。
自然结果是指该行不是付费广告。对于自然结果行,isSponsored 为 false。出现是指该域名出现在该查询所保留的样本中。
not_seen_within_cap 表示该查询成功,且该域名在上限内没有出现。source_failed 表示该查询的覆盖情况未知。不要把失败的查询存成 0。unresolved_identity 表示你仍不能把该主机对应到该公司。该主机不是已知的未出现。
排名是该精确采集样本中的顺序。它不是对每个人都成立的排名。
设置必应输入
当前公开的 Google Search Scraper 版本是 1.0.15。该版本可以使用 Google、必应、Brave 和 DuckDuckGo。这些步骤只接受必应。已保存的 Task 是起始输入。它不会替你完成这次比较。
当前已保存的输入如下。你将替换整个查询列表和整个引擎列表。
{
"queries": ["competitor brand", "product category", "best product alternatives"],
"engines": ["google", "bing", "brave", "duckduckgo"],
"maxResultsPerExecutedQuery": 20,
"country": "US",
"language": "en",
"safeSearch": true,
"includeSponsoredResults": false
}第一次检查时,只使用 one intended phrase 和必应。把上限设为 2。已检查的验收使用国家 US 和语言 en。safeSearch true 会打开安全搜索筛选。includeSponsoredResults false 表示要求排除付费广告。不存在扩展设置。不要添加 page-limit 字段。已检查的两行试点正好读取了一页。
在运行此输入之前,把词语 one intended phrase 换成你的真实短语。
{
"queries": ["one intended phrase"],
"engines": ["bing"],
"maxResultsPerExecutedQuery": 2,
"country": "US",
"language": "en",
"safeSearch": true,
"includeSponsoredResults": false
}对于之后的面板,为每条精确查询选择同一个上限。保持相同的国家、语言、安全搜索和赞助结果设置。之后的上限由你选择。它不是隐藏字段。国家和语言是所请求的设置。它们不能证明读者住在哪里。它们也不保证地图结果或本地结果包。
阅读一行结果
一行是一个引擎、一条查询、一页和一个位置上的一条结果。Actor 可以在一次运行中保留许多查询。它不会为世界上的每个网站各生成一行。
把这些行字段用作源证据:
- runId 是该次采集运行的 id。
- country 是所请求的国家。
- language 是所请求的语言。
- safeSearch 记录安全搜索筛选是开还是关。
- engine 是该行的搜索引擎。
- executedQuery 是实际运行的精确短语。
- page 是结果页码。
- rankOnPage 是该页上的位置。
- rank 是所采集样本中的位置。
- title 是结果标题。
- canonicalUrl 是 Actor 清理后的地址。保持该字符串不变。它不是从页面 HTML 读取的 canonical 标签。它也不是原始链接的完整副本。
- resultDomain 是该地址中的主机。
- snippet 是搜索结果上的短文本。它不是从页面抓取的文本。它不能证明某项说法。
- 当该行是付费广告时,isSponsored 为 true。
- 当该行是广告时,advertiserDomain 是广告主主机。
- observedAt 是采集时间。
- schemaVersion 是行格式的名称。
如果某一行的 isSponsored 为 true,不要把它计入自然排名。Actor 不会打开目标页面。它不会去除全部额外页面文本。它不会检查引用。它不会给业务成功打分。它不会安排重复运行。与你的决定有关的页面,由你自己打开。
阅读运行摘要
OUTPUT 是运行摘要。它与单条结果行不是同一事物。在把一条查询标为有用之前,先阅读 OUTPUT。
- queriesRequested 是你发送的短语数量。
- searchesCompiled 是已准备的搜索数量。
- executionsPlanned 是已计划的引擎运行数量。
- enginesSuccessful 是成功的引擎数量。
- enginesFailed 是失败的引擎数量。
- pagesAttempted 是已尝试的页面数量。
- pagesParsed 是已读取的页面数量。
- resultsSaved 是已保留的结果行数量。
- engineStatusCounts 按引擎汇总状态。
- engineResultCounts 按引擎汇总已保存的行。
- queryResultCounts 按查询汇总已保存的行。
- stopReason 说明该次运行停止的原因。
一次当前的必应对照使用了短语 Python asyncio documentation,以及 US 和 en。它返回了两个直接的 docs.python.org URL。引擎是 bing。所执行的查询就是该同一短语。两行都在第 1 页。排名是 1 和 2。每一行都有 observedAt。OUTPUT 报告了一个成功的引擎、一个已读取的页面,以及 stopReason result_caps_reached。
该对照显示,必应对 URL、排名和采集时间的支持有限。它不是竞品面板测试。它不验证 Google、Brave 或 DuckDuckGo。它不验证每个运算符、每个国家,也不验证重复的排名测试。一条失败的 Google 路径含有重定向链接,其最终页面不明确。不要把这些链接当作已验收的页面地址。
达到上限的成功查询可以支持 not_seen_within_cap。失败的查询不能。上限或空结果并不表示你看到了整个索引。
进行比较
- 先选择一个目标市场和一种语言。选择你需要作出的网站决定。写下查询列表。写下竞品列表。在看到谁出现之前完成这些工作。看到结果之后,不要增加或删除查询。看到结果之后,不要增加或删除公司。
- 打开每家公司当前的公开网站。在运行之前写下精确的主机规则。说明子域是否计数。名称相似的博客、目录或联盟网站不会自动算作该公司。此身份检查由你完成。Actor 不验证公司。如果主机仍然不明确,标为 unresolved_identity。不要把该单元格当作已知的未出现。
- 先用上面的必应输入运行一个短语。使用 maxResultsPerExecutedQuery 2。使用你所请求的国家和语言。已检查的验收只使用了 US 和 en。把 safeSearch 设为 true。把 includeSponsoredResults 设为 false。没有 page-limit 字段,也没有扩展字段。只有首次必应测试成功完成后,才运行完整的固定列表。对每条精确查询使用同一个上限。保持相同的市场设置。
- 保留每一条有用的行。保存地址、引擎、排名和 observedAt。为每条已计划的查询阅读 OUTPUT。如果查询失败,覆盖情况未知。如果查询成功,且一个已知域名在上限内缺失,标为 not_seen_within_cap。不要用 0 填充失败的查询。
- 制作一张竞品按查询的表。只使用 present、not_seen_within_cap、source_failed 或 unresolved_identity。同一域名在同一查询中的多个已验收页面仍只计为一次出现。保留页面行。这些行显示哪些地址和排名支持该单元格。不要按标题合并行。不要丢弃一条不同的查询字符串。
- 对每个已知域名,用出现的查询数除以有用查询数。有用查询是在相同上限和设置下成功的查询。同时报告你计划了多少条查询。这个分数不是全部搜索的份额。它不是搜索量。它不是广告需求。它不是客户需求。如果许多已计划的查询失败,不要给出该面板比较,或者将其标为部分。不要隐藏失败的查询。
- 对每个域名,在它出现的每条查询上保留最佳自然排名。条件均值只是这些最佳排名的平均值。排除没有看到该域名的查询。不要把缺失的排名记为 0。不要把它记为上限加 1。不要把缺失的排名当作已经看到后再取平均。出现查询数量不同的域名,可能仅因这一原因而看起来更强或更弱。本文比较的是各查询之间的出现情况。它不按天追踪同一个排名。
- 检查这些缺口。然后选择你要阅读的页面。在此样本中没有出现的域名,以后仍可能出现。它可能在另一条查询中出现。它也可能对另一个人出现。该表不说明某个页面为何出现。它不预测流量或销售额。此必应方法得出的结论不能用于说明 Google 或其他国家的搜索结果。
虚构的逐步演算示例
本节中的所有数值都是虚构的。它们不是产品结果。该面板是固定的必应、国家 US、语言 en、仅自然结果,以及前五名上限。公司域名是 A、B 和 C。主机规则只计精确的公司主机。子域只有在同一公司主机上才计数。同名博客不计。此虚构内容中没有主机是 unresolved_identity。
已计划的查询是 Q1、Q2、Q3 和 Q4。Q1、Q2 和 Q3 成功。Q4 在源处失败。以下是页面观察结果。
| 查询 | 域名 | 页面 | 最佳自然排名 | 其他自然排名 | 状态 |
|---|---|---|---|---|---|
| Q1 | A | 1 | 2 | 4 | present |
| Q1 | B | 1 | 1 | 无 | present |
| Q1 | C | 1 | 无 | 无 | not_seen_within_cap |
| Q2 | A | 1 | 无 | 无 | not_seen_within_cap |
| Q2 | B | 1 | 2 | 无 | present |
| Q2 | C | 1 | 3 | 无 | present |
| Q3 | A | 1 | 3 | 无 | present |
| Q3 | B | 1 | 1 | 无 | present |
| Q3 | C | 1 | 无 | 无 | not_seen_within_cap |
| Q4 | A | 无 | 无 | 无 | source_failed |
| Q4 | B | 无 | 无 | 无 | source_failed |
| Q4 | C | 无 | 无 | 无 | source_failed |
A 有两个 Q1 页面,排名分别为 2 和 4。这两个页面仍是一次 Q1 出现。它们不会把 A 从 2/3 改成 3/3。
有三条查询是有用的。已计划的查询有四条。出现表如下。
| 域名 | Q1 | Q2 | Q3 | Q4 | 在有用查询上出现 |
|---|---|---|---|---|---|
| A | present | not_seen_within_cap | present | source_failed | 2/3 |
| B | present | present | present | source_failed | 3/3 |
| C | not_seen_within_cap | present | not_seen_within_cap | source_failed | 1/3 |
最佳自然排名只使用出现的查询。
| 域名 | 最佳排名 | 条件均值 | 平均值中的查询数 |
|---|---|---|---|
| A | 2 和 3 | 2.5 | 2 |
| B | 1、2 和 1 | 4/3,约 1.33 | 3 |
| C | 3 | 3 | 1 |
A 的条件均值是 (2 + 3) / 2 = 2.5。B 的条件均值是 (1 + 2 + 1) / 3 = 4/3,约 1.33。C 的条件均值是 3 / 1 = 3。这些平均值使用的查询数量不相同。它们不能代替出现表。它们并不表示某个域名在每次搜索中都领先。
每个 not_seen_within_cap 单元格的结论仅限于前 5 个自然结果行。在这部分样本中未出现,并不能证明该域名在整个索引中都不存在。
对 A、B 和 C,Q4 都是 source_failed。该单元格是未知的。它不是已知的未出现。不要说 B 在 4 条查询中的 3 条上出现。不要把 3/3 称为全部四条已计划查询的覆盖。两个计数都要保留:四条已计划,三条有用。此处的面板说法只覆盖这三条成功的查询。如果失败的已计划查询太多,不要给出该比较,或者将其标为部分。
来源和延伸阅读
作者 Chronometrica · 更新日期
返回顶部 ↑
