我们都曾遇到过在某个时候不得不从网站中提取数据的情况。例如,在新建购物广告系列时,您可能没有可用于快速创建广告的产品 Feed (产品信息集)。
理想情况下,我们会以易于导入的文件格式(比如 Excel 或 Google 表格)提供我们需要的内容比如着陆页,产品名等。但对于大多数人不知道如何进行数据抓取的广告投放者可能不得不手动复制和粘贴数百或数千条产品信息。
在最近的一份工作中,我被要求到客户网站的15个页面下载约150多个新产品数据,并对每个产品的名称和着陆页 URL 复制并粘贴到电子表格中。
如果要手动完成这项工作,会花多少时间?这不仅耗时,手动浏览那么多内容,并逐个复制和粘贴,犯错机率也非常高。无疑会增加更多的时间来审查文档。
这里SEJ的人员分享了利用ImportXML 结合 Google Sheet 来轻松完成此项工作。
文章目录
什么是 ImportXML?
根据谷歌的解释, ImportXML ,可以从以下各种结构化数据类型中的任何一种导入数据:包括 XML、HTML、CSV、TSV、RSS 和 ATOM XML 提要。
本质上,IMPORTXML 是一种功能,可让您从网页中抓取结构化数据,比如段落文字,TDK信息等,过程简单并无需编码基础。
ImportXML 如何帮助抓取网页元素?
该函数本身非常简单,只需要两个值:
- URL: 我们想要从中抓取信息的网页 URL。
- Xpath: XML 路径语言,并可用于浏览 XML 文档中的元素和属性,我们利用此参数查找目标页面元素中的数据。
例如,要从 https://en.wikipedia.org/wiki/Moon_landing 提取页面标题,我们只需要把以下内容复制粘贴到 Google Sheet 单元格:
==IMPORTXML(“https://en.wikipedia.org/wiki/Moon_landing”, “//title”, “en_US”)
然后单元格会显示:Moon landing – Wikipedia
或者,如果我们正在寻找某一网页的描述,可尝试以下操作:
=IMPORTXML(“https://tomhello.com/”,“//meta[@name=’description’]/@content”)
以下是一些比较常见的 XPath 查询参考:
- 页面标题://title
- 页面 Meta Description://meta[@name=’description’]/@content
- H1://h1
- 页面中的链接://@href
Google Sheet + ImportXML 案例演示
自从 IMPORTXML 加入到 Google 表格后,它已我们完成许多日常工作的秘密武器。
此外,该函数与其他公式相结合,可完成一些更高级的数据分析任务。如果没有 Google 表格的 ImportXML 的话,有可能不得不用到 Python 等进行编程抓取。
下面的案例,我们会演示一下 IMPORTXML 最基本的用法:从网页中抓取数据。
想象一下,我们被要求创建一个内容广告系列。他们希望我们针对文章分类下最新的30篇文章投放动态搜索广告。您可能会说,这是一项非常简单的任务。但不幸的是,网站编辑无法向我们发送页面数据,然后想让我们参考网站页面内容来制作广告。
正如我们文章开头提到的,一种方法是手动打开页面去获取然后填写到广告平台中,另一种是把信息手动收集然后放到谷歌表格和 Excel中。都需要逐条打开网页并复制和粘贴信息。但利用 Google Sheets 中使用 IMPORTXML,我们可以在很短的时间内实现相同操作,并且不会出错。
第 1 步:新建 Google 表格
首先,我们打开一个空白的 Google Sheets 文档:
第 2 步:添加您需要抓取内容的页面地址
添加我们要从中抓取信息的页面(或多个页面)的 URL。在我们的例子中,我们需要抓取 https://www.searchenginejournal.com/category/pay-per-click/ 下的内容。
第 3 步:找到 XPath
找到想要抓取的元素,并把其将 XPath 路径复制下来用到 ImportXML 函数的第二参数中。在我们的示例中,我们需要找最近更新的 30 篇文章的标题。我们只需要将鼠标悬停在其中一篇文章的标题上后,右键单击并点击检查元素(inspect)。
这将打开谷歌 Chrome 浏览器的开发工具窗口:
确保文章标题仍处于选中状态并突出显示,然后再次右键单击并选择复制 > 复制 XPath.
第 4 步:将数据提取到 Google 表格中
回到您的 Google Sheets 文档,按如下方式输入 IMPORTXML 函数:
=IMPORTXML(B1,”///*[starts-with(@id, ‘title’)]”)
有几点需要注意:
第一的,在我们的公式中,第1个参数我们引用了单元格 B1, 而 B1 我们是输入了我们想要提取数据的网页地址。
第二, 我们从 Chrome 开发者面板中复制的 XPath,放入到第2个参数时,会用双引号括起来。但复制过来的 XPath 中也有双引号,如下:
(///*[@id=”title_1″])
为了确保双引号的前后匹配不混乱,我们需要把Xpath中的将双引号更改为单引号,再放入到 ImportXML 函数中。
(///*[@id=’title_1′])
请注意,在本例中,由于每篇文章的页面 ID 标题都会发生变化(title_1、title_2 等),我们必须稍微修改 XPath,然后需要使用到 starts-with 函数来获取页面上 ID 名包含’title’ 的所有元素。
以下是 Google Sheets 文档中的内容:
输入后,很快就会返回出所有文章的标题:
您也可以利用这种方式抓取其他网页上的元素信息。比如抓取文章名,文章URL,摘要,作者姓名等。
如果要抓取URL的话,我们需要调整查询, 抓取元素属性的话用 /@。然后完整的 Xpath 查询如下:
=IMPORTXML(B1,”//*[starts-with(@id, ‘title’)]/@href”)
输入后:
添加了摘要和作者姓名后:
结论
无论您需要抓取文章,或者是其他页面元素,包括产品价格或者运输成本等数据,您都可以利用 Xpath 自动化的来获取,并且出错的可能很小。
此工具不仅适合 PPC 建广告系列时有用,另外也适用于其他需要进行批量的网页数据分析和收集的工作,比如 SEO 等。
当然相对于 Python 的数据抓取的话, Google Sheet 抓取数据会有一些局限性,Google 会给每个 Sheet 一定的抓取比例,会有一定抓取量的限制。Google 这样做主要是避免服务器被恶意使用。另外这种功能是免费的,Google 也会考虑运维成本。