蚊章汇 - Jr Oakes
type: channel
link: https://linuxcn.bwsl.wang/author/1457/
description: Jr Oakes
items: 利用 Python 探究 Google 的自然语言 API
items: 使用这个 Python 工具对网站 SEO 问题进行自动化测试

利用 Python 探究 Google 的自然语言 API
type: item
date: 2021-03-25T07:21:00+08:00
description: Google API 可以凸显出有关 Google 如何对网站进行分类的线索，以及如何调整内容以改进搜索结果的方法。作为一名技术性的搜索引擎优化人员，我一直在寻找以新颖的方式使用数据的方法，以更好地了解 Google 如何对网站进行排名。我最近研究了 Google 的 自然语言 API 能否更好地揭示 Google 是如何分类网站内容的。尽管有 开源 NLP 工具，但我想探索谷歌的工具，前提是它可能在其他产品中使用同样的技术，比如搜索。本文介绍了 Google 的自然语言 API，并探究了常见的自然语言处理（NLP）任务，以及如何使用它们来为网站内容创建提供信息。了解数据类型首先，了解 Google 自然语言 API 返回的数据类型非常重要。实体 实体 Entities 是可以与物理世界中的某些事物联系在一起的文本短语。 命名实体识别 Named Entity Recognition （NER）是 NLP 的难点，因为工具通常需要查看关键字的完整上下文才能理解其用法。例如， 同形异义字 homographs 拼写相同，但是具有多种含义。句子中的 “lead” 是指一种金属：“铅”（名词），使某人移动：“牵领”（动词），还可能是剧本中的主要角色（也是名词）？Google 有 12 种不同类型的实体，还有第 13 个名为 “UNKNOWN”（未知）的统称类别。一些实体与维基百科的文章相关，这表明 知识图谱 对数据的影响。每个实体都会返回一个显著性分数，即其与所提供文本的整体相关性。情感 情感 Sentiment ，即对某事的看法或态度，是在文件和句子层面以及文件中发现的单个实体上进行衡量。情感的 得分 score 范围从 -1.0（消极）到 1.0（积极）。 幅度 magnitude 代表情感的 非归一化 non-normalized 强度；它的范围是 0.0 到无穷大。语法 语法 Syntax 解析包含了大多数在较好的库中常见的 NLP 活动，例如 词形演变 lemmatization 、 词性标记 part-of-speech tagging 和 依赖树解析 dependency-tree parsing 。NLP 主要处理帮助机器理解文本和关键字之间的关系。语法解析是大多数语言处理或理解任务的基础部分。分类 分类 Categories 是将整个给定内容分配给特定行业或主题类别，其 置信度 confidence 得分从 0.0 到 1.0。这些分类似乎与其他 Google 工具使用的受众群体和网站类别相同，如 AdWords。提取数据现在，我将提取一些示例数据进行处理。我使用 Google 的 搜索控制台 API 收集了一些搜索查询及其相应的网址。Google 搜索控制台是一个报告人们使用 Google Search 查找网站页面的术语的工具。这个 开源的 Jupyter 笔记本 可以让你提取有关网站的类似数据。在此示例中，我在 2019 年 1 月 1 日至 6 月 1 日期间生成的一个网站（我没有提及名字）上提取了 Google 搜索控制台数据，并将其限制为至少获得一次点击（而不只是 曝光 impressions ）的查询。该数据集包含 2969 个页面和在 Google Search 的结果中显示了该网站网页的 7144 条查询的信息。下表显示，绝大多数页面获得的点击很少，因为该网站侧重于所谓的长尾（越特殊通常就更长尾）而不是短尾（非常笼统，搜索量更大）搜索查询。为了减少数据集的大小并仅获得效果最好的页面，我将数据集限制为在此期间至少获得 20 次曝光的页面。这是精炼数据集的按页点击的柱状图，其中包括 723 个页面：在 Python 中使用 Google 自然语言 API 库要测试 API，在 Python 中创建一个利用 google-cloud-language 库的小脚本。以下代码基于 Python 3.5+。首先，激活一个新的虚拟环境并安装库。用环境的唯一名称替换 <your-env> 。virtualenv <your-env> source <your-env>/bin/activate pip install --upgrade google-cloud-language pip install --upgrade requests 该脚本从 URL 提取 HTML，并将 HTML 提供给自然语言 API。返回一个包含 sentiment、 entities 和 categories 的字典，其中这些键的值都是列表。我使用 Jupyter 笔记本运行此代码，因为使用同一内核注释和重试代码更加容易。# Import needed libraries import requests import json f…

使用这个 Python 工具对网站 SEO 问题进行自动化测试
type: item
date: 2020-10-10T03:49:00+08:00
description: SEODeploy 可以帮助我们在网站部署之前识别出 SEO 问题。作为一个技术性搜索引擎优化开发者，我经常被请来协助做网站迁移、新网站发布、分析实施和其他一些影响网站在线可见性和测量等领域，以控制风险。许多公司每月经常性收入的很大一部分来自用户通过搜索引擎找到他们的产品和服务。虽然搜索引擎已经能妥善地处理没有被良好格式化的代码，但在开发过程中还是会出问题，对搜索引擎如何索引和为用户显示页面产生不利影响。我曾经也尝试通过评审各阶段会破坏 SEO（ 搜索引擎优化 search engine optimization ）的问题来手动降低这种风险。我的团队最终审查到的结果，决定了该项目是否可以上线。但这个过程通常很低效，只能用于有限的页面，而且很有可能出现人为错误。长期以来，这个行业一直在寻找可用且值得信赖的方式来自动化这一过程，同时还能让开发人员和搜索引擎优化人员在必须测试的内容上获得有意义的发言权。这是非常重要的，因为这些团队在开发冲刺中优先级通常会发生冲突，搜索引擎优化者需要推动变化，而开发人员需要控制退化和预期之外的情况。常见的破坏 SEO 的问题我合作过的很多网站有成千上万的页面，甚至上百万。实在令人费解，为什么一个开发过程中的改动能影响这么多页面。在 SEO 的世界中，Google 或其他搜索引擎展示你的页面时，一个非常微小和看起来无关紧要的修改也可能导致全网站范围的变化。在部署到生产环境之前，必须要处理这类错误。下面是我去年见过的几个例子。偶发的 noindex在部署到生产环境之后，我们用的一个专用的第三方 SEO 监控工具 ContentKing 马上发现了这个问题。这个错误很隐蔽，因为它在 HTML 中是不可见的，确切地说，它隐藏在服务器响应头里，但它能很快导致搜索不可见。HTTP/1.1 200 OK Date: Tue May 25 2010 21:12:42 GMT [...] X-Robots-Tag: noindex [...] canonical 小写上线时错误地把整个网站的 canonical 链接元素全改成小写了。这个改动影响了接近 30000 个 URL。在修改之前，所有的 URL 大小写都正常（例如 URL-Path 这样）。这之所以是个问题是因为 canonical 链接元素是用来给 Google 提示一个网页真实的规范 URL 版本的。这个改动导致很多 URL 被从 Google 的索引中移除并用小写的版本（/url-path）重新建立索引。影响范围是流量损失了 10% 到 15%，也污染了未来几个星期的网页监控数据。源站退化有个网站的 React 实现复杂而奇特，它有个神奇的问题，origin.domain.com URL 退化显示为 CDN 服务器的源站。它会在网站元数据（如 canonical 链接元素、URL 和 Open Graph 链接）中间歇性地显示原始的主机而不是 CDN 边缘主机。这个问题在原始的 HTML 和渲染后的 HTML 中都存在。这个问题影响搜索的可见性和在社交媒体上的分享质量。SEODeploy 介绍SEO 通常使用差异测试工具来检测渲染后和原始的 HTML 的差异。差异测试是很理想的，因为它避免了肉眼测试的不确定性。你希望检查 Google 对你的页面的渲染过程的差异，而不是检查用户对你页面的渲染。你希望查看下原始的 HTML 是什么样的，而不是渲染后的 HTML，因为 Google 的渲染过程是有独立的两个阶段的。这促使我和我的同事创造了 SEODeploy 这个“在部署流水线中用于自动化 SEO 测试的 Python 库。”我们的使命是：开发一个工具，让开发者能提供若干 URL 路径，并允许这些 URL 在生产环境和预演环境的主机上进行差异测试，尤其是对 SEO 相关数据的非预期的退化。SEODeploy 的机制很简单：提供一个每行内容都是 URL 路径的文本文件，SEODeploy 对那些路径运行一系列模块，对比 生产环境 production 和 预演环境 staging 的 URL，把检测到的所有的错误和改动信息报告出来。这个工具及其模块可以用一个 YAML 文件来配置，可以根据预期的变化进行定制。最初的发布版本包含下面的的核心功能和概念：开源：我们坚信分享代码可以被大家批评、改进、扩展、分享和复用。模块化：Web 开发中有许多不同的堆栈和边缘案例。SEODeploy 工具在概念上很简单，因此采用模块化用来控制复杂性。我们提供了两个建好的模块和一个实例模块来简述基本结构。URL 抽样：由于它不是对所有 URL 都是可行和有效的，因此我们引入了一种随机抽取 XML 网站地图 URL 或被 ContentKing 监控的 URL 作为样本的方法。灵活的差…