網站不再單單迎合人類讀者。許多站點現在支持一些 API,這些 API 使計算機程序能夠獲取信息。屏幕抓取 —— 將 HTML 頁面解析為更容易理解的表單的省時技術 — 仍然很方便。但使用 API 簡化 Web 數據提取的機會在快速增多。根據 ProgrammableWeb 的信息,在本文發表時,已存在 10,000 多個網站 API — 在過去的 15 個月中增加了 3,000 個。(ProgrammableWeb 本身提供了一個 API,可從其目錄中搜索和檢索 API、mashup、成員概要文件和其他數據。)
本文首先介紹現代的 Web 抓取并將它與 API 方法進行比較。然后通過 Ruby 示例,展示如何使用 API 從一些流行的 Web 屬性中提取結構化信息。您需要基本理解 Ruby 語言、具象狀態傳輸 (REST),以及 JavaScript 對象表示法 (JSON) 和 XML 概念。
抓取與 API
現在已有多種抓取解決方案。其中一些將 HTML 轉換為其他格式,比如 JSON,這樣提取想要的內容會更加簡單。其他解決方案讀取 HTML,您可將內容定義為 HTML 分層結構的一個函數,其中的數據已加了標記。一種此類解決方案是 Nokogiri,它支持使用 Ruby 語言解析 HTML 和 XML 文檔。其他開源抓取工具包括用于 JavaScript 的 pjscrape 和用于 Python 的 Beautiful Soup。pjscrape 實現一個命令行工具來抓取完全呈現的頁面,包括 JavaScript 內容。Beautiful Soup 完全集成到 Python 2 和 3 環境中。
假設您希望使用抓取功能和 Nokogiri 來識別 CrunchBase 所報告的 IBM 員工數量。第一步是理解 CrunchBase 上列出了 IBM 員工數量的特定 HTML 頁面的標記。圖 1 顯示了在 Mozilla Firefox 中的 Firebug 工具中打開的此頁面。該圖的上半部分顯示了所呈現的 HTML,下半部分顯示了感興趣部分的 HTML 源代碼。
清單 1 中的 Ruby 腳本使用 Nokogiri 從圖 1 中的網頁抓取員工數量。
清單 1. 使用 Nokogiri 解析 HTML (parse.rb)
#!/usr/bin/env rubyrequire 'rubygems'require 'nokogiri'require 'open-uri'# Define the URL with the argument passed by the useruri = "http://www.crunchbase.com/company/#{ARGV[0]}"# Use Nokogiri to get the documentdoc = Nokogiri::HTML(open(uri))# Find the link of interestlink = doc.search('tr span[1]')# Emit the content associated with that linkputs link[0].content
在 Firebug 顯示的 HTML 源代碼中(如 圖 1 所示),您可看到感興趣的數據(員工數量)嵌入在一個 HTML 唯一 ID <span> 標記內。還可看到 <span id="num_employees"> 標記是兩個 <span> ID 標記中的第一個。所以,清單 1 中的最后兩個指令是,使用 link = doc.search('tr span[1]') 請求第一個 <span> 標記,然后使用 puts link[0].content 發出這個已解析鏈接的內容。
CrunchBase 還公開了一個 REST API,它能夠訪問的數據比通過抓取功能訪問的數據要多得多。清單 2 顯示了如何使用該 API 從 CrunchBase 站點提取公司的員工數。
新聞熱點
疑難解答