使用 Google 自定义搜索 JSON API 的搜索结果不一致



我们使用谷歌的自定义搜索JSON API进行高等教育研究,我们主要通过大量URL进行解析,以查找各种组织应对新冠肺炎的信息。我们正在使用谷歌的API来查找热门搜索结果。然而,我们发现在API查询中使用不同的搜索参数时会出现不一致的结果。不一致是一个问题,因为我们正试图将查询提高到一定的错误率(错误率是有多少URL提供了有效的研究信息)。我们正在寻找一个人来帮助解释谷歌的API是如何工作的,因为文档非常少。我们的基本查询示例:'https://www.googleapis.com/customsearch/v1?key=KEY&cx=搜索引擎&q=";学校名称";intext:(term1|term2|term3)-inurl:(unnted1|unnted2|unnted3)inurl:(wanted1|wanted2|wanted3)&start=1'

其中";学校名称";是高等教育机构的名称。Term1、term2等是我们希望在搜索结果的正文中找到的特定变量。intext参数有助于避免某些文档中出现不可见的文本。例如,insidehighered.com在不可见的文本中包含了许多高等教育机构,而实际的文章却不适用。不需要的1等,。是我们不希望包含在URL标题中的单词或短语。例如,我们希望避免使用PDF文档,因此可以使用";。pdf";。通缉犯等,。是我们在URL中确实想要的单词,比如";新闻";。我们使用"|"表示";或";,这使我们能够将一个查询用于多种类型的搜索,从而帮助最大限度地降低API的使用成本。

到目前为止,我们发现了以下问题/不一致:

  1. &quot-"以及";NOT";否定项返回不同的结果
  2. 参数的顺序很重要。例如;inurl:(一些想要的搜索词)-inurl:(一些不想要的搜索项)"返回不同于"0"的结果-inurl:(一些不需要的搜索项)inurl:
  3. 术语嵌套也不一致。例如;inurl:((想要的术语|想要的术语)NOT(不需要的术语|不需要的条款))";返回不同于"0"的结果;inurl:(需要术语|需要术语|不是不需要术语不是不需要的术语)">
  4. 此外,API会在两次不同的时间使用同一个查询对某些查询返回不同的结果。查询似乎会返回10个结果,但会自发地混合在下一页或其他地方的最后1或2个结果中。例如,这个查询:";https://www.googleapis.com/customsearch/v1?key=KEY&cx=搜索引擎&q=";迈阿密大学汉密尔顿分校;intext:(减少学费|冻结学费|减少学费|降低学费)(注册商|招生|学费|时间表|州|办公室|就业机会|关于我们|关于linkedin|events|.uk|irs|.gov|信息技术|wikipedia|wiki|员工手册|学生手册|商店|年度|youtube|pinterest|store|openings |确实|amazon|contact|jobboard |jobboard |政策|常见问题问题|faq|forms|hours|academy calendar|calendar|目录|glassdoor|facebook|百科全书)&start=31〃;(然后对于下一页开始=41)将返回"0";http://www.harbison.one/archive/z_1985_national_cc_directory.pdf"作为第4页的最后一项和第5页的第一项。当我们运行GET请求时,它有时会为第4页上的最后一个项目返回不同的结果,但随后会为两个页面返回相同的重复URL

我们用于从每页中提取项目的代码是:

response = requests.get(query)
content = response.json()
hrefs = []
try:
for i in content['items'][0:num]:
hrefs.append(i['link'].lower())

except Exception as e:
print(str(e))
hrefs.append('a')

谢谢!

恐怕你不太可能找到满足你想要的标准的答案。

谷歌为了保护其商业秘密(以及其他),对其搜索引擎算法的内部结构极为保密。我们从官方渠道了解到的情况如下:

  • 谷歌广泛使用自然语言处理(NLP),并将不遗余力地梳理出您查询的意图,即使这意味着忽略您实际搜索的内容
  • 它喜欢包含你正在搜索的关键词的页面,但它也有复杂的保护措施来防止";关键字填充;有人在自己的页面中加入大量可能的搜索条件,试图为自己带来额外的流量
  • 它维护一个其信任的页面的内部列表,如果这些页面正在链接到内容(或者如果这些页面链接到链接到内容的页面,等等),它会将该内容排名更高
  • 它根据一组可用性标准对页面进行评分,不喜欢慢速页面和未针对不同设备进行优化的页面
  • 最后,它使用您的位置和过去的搜索历史来确定为您提供什么样的结果

这些要点中的第一点可能是最重要的。使用API进行搜索可能不会对您的搜索给予任何特殊处理,这对于API行为来说是不寻常的,但对于谷歌来说是意料之中的。谷歌会很乐意为了用户体验而改变自己的规则,我强烈怀疑你的搜索最终会成为这种行为的受害者。此外,考虑到当时的情况和他们将涉及新冠肺炎搜索的特殊内容直接硬编码到引擎的行为中,这可能会使事情进一步复杂化。

我希望我能给你更好的消息,但你可能只需要让搜索引擎向你吐出的任何奇怪和不一致的东西发挥作用。结果几乎肯定是不可复制的,因为上面列出的第五点,他们可能以后自己也无法复制。对不起。

最新更新