界面数据抓取
有时候,我们需要用到网上搜索的数据,可能这些数据并不在一个网站上。但是这些内容不能下载,也不提供web服务,这时候,我们会考虑解析HTML页面,并从中抽取我们感兴趣的数据。这个过程称作界面抓取。
基本思想是按顺序下载页面,然后循环解析HTML页面内容,发现和抽取我们需要的数据。然后存储在数据库中。这样,每次我们需要这些信息时,直接从数据库中读取。
书本上给出了SCrAPI和Hpricot 这2种和rails整合的抓取方式,缺C#方式实现的,还需要继续寻找
scrAPI 可以按照结构化形式选择和处理页面上元素,并可使用熟悉的DOM和Css结构。
scrAPi 官方网站:http://labnotes.org/svn/public/ruby/scrapi/cheat/scrapi.html
http://rubyforge.org/projects/scrapi/
scrAPi 不是唯一的选择,Hpricot可以作为替代方案。
http://code.whytheluckystiff.net/hpricot
屏幕抓取时需要考虑的问题:
1:打算定时或者周期性抓取某些动态内容,需要大量的错误检查机制。网站的一些小变化都会带来数据抓取的偏差
2:并不是所有的数据源都是100%准确的,需要有人工审查和纠正的机制
3:有时候,某些数据源时静态的,对之前已经抓取的内容,或者有重复的内容,需要有过滤功能,避免重复操作
PS:当进行界面抓取时,需要考虑法律和道德问题,抓取前,最好得到网站所有者的许可。有时候,网站所有者希望在不影响带宽的情况下向你提供数据,或者给出使用数据的约束条件。最好能得到网站所有者书面的授权。
关于这个,其实我们可以采取更好的处理办法,我们可以在闲暇时抓取数据,不影响他们的正常访问,又能从从我们网站带给内容提供者流量,这样比较能达到双赢的结果。