随着“网络”一词的不断革新,微格式(microformat)是前进中重要的一步,因为它提供了一种机制能嵌入“聪明的数据”到网页中,并且易于内容提供者来实现。简单的说,微格式是规定了如何增加结构化数据到网页中,且不用修改原网页。这一节将主要介绍微格式,并且深入一些实例将用到XFN(XHTML Friends Network),geo, hRecipe 以及 hReview等微格式。特别的,我们将从博客链接中挖掘人的关系,从网页中抽取坐标,从foodnetwork.com中解析菜单,并且分析对这些菜单的评论。本章中示例代码的实现没有处理全部的解析细节,但足够能将你领上道了。以微格式如geo或hRecipe来标记数据被称作社会化数据,它是令人感兴趣的,且社会化数据将不断增加。在写这本书的时候,几乎有一半的网页开发页报告有用到微格式,microformats.org社区刚刚庆祝了它的5岁生日。google报告有94%概率,富摘要信息(Google在搜索结果里引入的一种新的网站信息显示方式)中包含了微格式,如果google宣传了这点,我们将看到微格式重要的增长;事实上,通过ReadWriteWeb,google想要看到50%的网页包含了某种形式的语义标注,并且鼓励公司通过奖励的形式来支持这一动机。不管怎么说,你将看到更多的微格式,如果你关心网络的话。让我们进入正题吧。
XFN和朋友关系
语义网的狂热者预言像FOAF(friend of a friend --一种实体论描述人与人之间的关系,活动和活动之间的关系)这样的技术可能有一天会成为催化剂,促使很多社交网络联合起来对抗如Facebook这样的平台。虽然这些所谓的语义网技术如FOAF目前还达不到这点,但也不用太惊讶。如果你知道一些关于网络的短暂历史,那么你就会认识到这个革新是不容易的,因为网络极其分散的性质让它很难一蹴而就(参见第10章),然而,变化正在持续的,稳固的,向前进化着。微格式的出现就是为填补网页上“智能数据”的空白,它是一个很好的示范带给已有的技术以规范的标准。在这种特定情况下,它拉近了传统网络(基于易于人类阅读的HTML4.01)和语议网络(更加友好,易于机器解释)的距离。
微格式的好处在于,它提供了一种方法去嵌入这样的数据:社交网络,日程,摘要,书签;并且是反向兼容的。微格式的生态系统是多种多样的,如geo就发展得很快,并随着搜索引擎,社交媒体网站,博客平台而大受欢迎,而其它微格式则发展缓慢。当正写这本书的时候,重要的微格式开发正在进行中,包括google宣称他们在宣摘要信息中支持hRecipe.表2-1提供了一个总结对一些受欢迎的微格式。更多的示例请看http://microformats.org/wiki/examples-in-the-wild
表2-1, 一些受欢迎的技术云去嵌入结构化数据到网页中

还有其他很多微格式你可能会碰到,但是一个好方法是,认准池塘中最大的那条鱼,如Google, Yahoo!, 以及Facebook.越多的人用到微格式,它就越可能成功,越对数据挖掘有用。
通过XFN导出社交联系
随着一点梗概关于微格式是如何适应整个网络空间,下面让我们转向一个操作性的XFN(可能是目前你所遇到的最受欢迎的微格式)程序。如你所知,XFN是一种方式,来标识与他人之间的朋友关系,以在其他标签中加入rel属性。XFN常用在博客中,特别是博客链接插件中,像WordPress提供的那样。考虑如下的HTML内容,如示例2-1, 这可能会出现在博客的友链中。
示例2-1,XFN标注示例

<div> <a href="http://example.org/matthew" rel="me">Matthew</a> <a href="http://example.com/users/jc" rel="friend met">J.C.</a> <a href="http://example.com/users/abe" rel="friend met co-worker">Abe</a> <a href="http://example.net/~baseeret" rel="spouse met">Baseeret</a> <a href="http://example.net/~lindsaybelle" rel="child met">Lindsay Belle</a> </div>
讯享网
从以上内容的rel标签,可以很明显的看出这些人之间的关系。名叫做Matthew的家伙,有一帮朋友,一位妻子,一个小孩,他和这些朋友中的一个是同事,他在日常生活中和大家见面(这情况在网上也许不会发生)。除去规范的语法外,这就是XFN的全部内容。好消息是,虽然它非常简单,但在大规模情形下,它非常有用,由于它是结构化的数据。除非你碰到一些数据严重的过时--如两个最好的朋友变成了敌人,而忘记了更新他们的博客链接--XFN给出了非常准备的信息关于两个人之间的联系。已知大部分博客平台支持XFN,有很多的信息可以去发现。坏消息是,XFN只能告诉你这些信息,如果要得到更多的信息,需要借助其它的微格式。
让我们来看一个简单的获取XFN数据的例子,它类似于rubhub(http://rubhub.com/,一个社会化的搜索引擎,它爬取和索引大量的网站信息通过XFN)提供的服务,你可能想看一下在线的XFN工具在进入下一节之前。
一个宽度优先的XFN数据爬虫
让我们通过XFN获取社交数据, 并以此建立一个社交图谱。已知XFN可以嵌入任何可信的网站,坏消息是我们要做一些网站爬取工作。好消息是,虽然很繁琐,但BeautifulSoup包帮你最小化了这些麻烦。示例2-2的代码涉及到Ajaxian( 一个很受欢迎的博客关于现代化的网站开发),作为图的基础。在运行它之前请用easy_install安装BeautifulSoup.
示例2-2,从网页中爬取XFN内容(microformats__xfn_scrape.py)
讯享网# -*- coding: utf-8 -*- import sys import urllib2 import HTMLParser from BeautifulSoup import BeautifulSoup # Try http://ajaxian.com/ URL = sys.argv[1] XFN_TAGS = set([ 'colleague', 'sweetheart', 'parent', 'co-resident', 'co-worker', 'muse', 'neighbor', 'sibling', 'kin', 'child', 'date', 'spouse', 'me', 'acquaintance', 'met', 'crush', 'contact', 'friend', ]) try: page = urllib2.urlopen(URL) except urllib2.URLError: print 'Failed to fetch ' + item try: soup = BeautifulSoup(page) except HTMLParser.HTMLParseError: print 'Failed to parse ' + item anchorTags = soup.findAll('a') for a in anchorTags: if a.has_key('rel'): if len(set(a['rel'].split()) & XFN_TAGS) > 0: tags = a['rel'].split() print a.contents[0], a['href'], tags
传入一个URL(包含XFN)给这个脚本,它会返回名称,关系类型,以及指向其朋友的url,如下所示输出:
Dion Almaer http://www.almaer.com/blog/ [u'me'] Ben Galbraith http://weblogs.java.net/blog/javaben/ [u'co-worker'] Rey Bango http://reybango.com/ [u'friend'] Michael Mahemoff http://softwareas.com/ [u'friend'] Chris Cornutt http://blog.phpdeveloper.org/ [u'friend'] Rob Sanheim http://www.robsanheim.com/ [u'friend'] Dietrich Kappe http://blogs.pathf.com/agileajax/ [u'friend'] Chris Heilmann http://wait-till-i.com/ [u'friend'] Brad Neuberg http://codinginparadise.org/about/ [u'friend']
假如这些URL中包含XFN或其它有用的信息,我们可以直接跟踪这些链接,系统的建立更全的社交信息图谱。这种方法就是下一个示例要用到的:以宽度优先的方式的建立图谱,如示例2-3的伪代码所示。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/60439.html