Posts Tagged ‘ web scraping

Web Scraping in Ruby 直捣黄龙

今天我们来看看怎么获取我们关心的信息,直击要害。

Web给了我们太多不想要的信息,比如说你去新浪看新闻,竟是些不着边际的花边新闻,只不过是些惹眼的词汇罢了,并没有什么真实的内容。我经常有这种感受,为了看网页中的一点点儿东西,要忍受整个网页里面的垃圾信息对我的轰炸,各种广告,弹出对话框,有的还有脚本漏洞真实令人防不胜防,烦不胜烦。

比如我就想知道当下微软的股票价格,我怎么办呢?

http://finance.yahoo.com/q?d=t&s=MSFT

就是一个能提供这种信息的地方,哦那里有股票的价格。

image

我们用一个小工具SelectorGadget,这是个什么东西呢?简单来说,这个工具告诉我们关于某种信息的精确定位坐标。比如说我要找百度大厦,在地图上告诉你“这儿”就是不精确的,但是要是告诉你在“上地九街”就很精确了。这个工具就提供精确制导坐标,你只要点击你想要的区域,它就能自动生成css选择表达式或者xpath表达式,非常高效。有了它,几乎能把90%以上的网页都搞定。

闲言少叙见代码

require 'rubygems'
require 'nokogiri'
require 'open-uri'
 
msft_stock_url = "http://finance.yahoo.com/q?d=t&s=MSFT"
doc = Nokogiri::HTML(open(msft_stock_url))
 
doc.xpath("//*[(@id = \"table1\")]//*[(@id = \"yfs_l10_msft\")]").each do |item|
  puts item.text   
end

Web Scraping in Ruby 漫谈

什么是Web Scraping

http://en.wikipedia.org/wiki/Web_scraping

 

到目前为止,广袤的中文世界里都没有对Web Scraping 的一个定义,所以这里我怎么说怎么有道理,即使是乱放屁,恐怕一时半会儿也不会有人找到头上。

Web Scraping也叫Web Harvesting或者Web data extraction。直译一般不能表达意思的真谛,基本的意思就是Web上有一些我们需要的东东,我们通过一些技术手段把这些东东获取回来。scrap本身是踢出糟粕的意思,很形象,因为web上的绝大部分东西是我们不想要的,是要剔除的。harvest也很形象,我们的目的就是获取有用的数据,就像我们种地是为了获得粮食。extract的抽取,选取的意思表达的就稍微有点学术化了,但其本质还是在说怀有一定目的的从Web获取有用的信息。

那么到这里,我们可以看到,基本的步骤有两个,第一步把信息获取回来(grab),第二步抽取有用的信息(extract)。狭义地讲,Web Scraping就是如何做这两步的技术手段,比如本文题目中的Web Scraping in Ruby,就是说我们用Ruby作为工具的Web Scraping技术。

也有人觉得应该把Web Scraping定义为“超浏览器行为”(beyond browser activity),因为其本质上是一种不用浏览器却模拟了浏览器行为的技术。在传统的unix世界里,若是掌握了grep,sed,awk就牢牢地掌握系统信息的来龙去脉,不过前提是你得知道信息在哪里,毕竟grep,sed,awk的重点在于抽取(extract)。类似的,在广袤无垠的web世界里,尤其是web2.0+的世界里,一种scraping技术就显现出其实用价值了。

是漫无目的地被垃圾淹没还是有条不紊地收集信息?是驱动信息为我服务还是沦为一条信息,悄无声息地幻灭,也许只在一念之间。在传统的单机世界里面,信息的总量是有限的,所以获取信息往往显得不是那么重要。但是Web从某种意义上说是一个无边界的系统,恐怕冒冒失失的想要“慢慢来”,只会进得去出不来。当我们说把整个海洋的水都放到自己船上的时候,我们都觉得好笑,但是很多人却在做这样的事情。

这里要额外说说爬虫(crawler或者spider),爬虫基于简单的原则获取web页面,所以它也是web scraping技术的一部分,但仅仅算作是一个开始。后面的信息处理才是对信息价值的极大提升。后面的部分还会详细说信息的处理的。

总之,web scraping就是从web上获取我们要的信息,但是与我们人类行为有点区别,这里有自动化的,(很可能的)从海量数据中获得的意味,并且一定是剔除了无用垃圾的。

为什么要Web Scraping

因为能赚钱。看多么简单明了,但多么有说服力啊。你若是不往下看,要么你不知道钱的好处,要么是你已经被太多的赚钱谎言欺骗过了。哈哈,我说的是真的,我也是非常认真地说的。

那么我们分为三个类别来说说这项技术如何能赚钱吧。

肯定合法的途径

外汇套利,包括外汇三角套利,期权套利等方式。基本的来说,可以建立一个小程序实时跟踪国际外汇市场的行情,一旦发现套利机会,自动建立头寸(position)。至于细节不便多说,可以查看相关书籍。外汇市场瞬息万变,交易量巨大,广大穷人们还是大有可为空间的。

不一定合法的途径

网页游戏外挂,当然也包括各种网页应用的外挂程序。比如QQ的自动停车,自动偷菜之类的。外挂是能卖钱呢。当然是否涉及到法律风险本身并不是技术要讨论的话题。

比如说发帖机器人,一下子发成百上千的帖子的你真的以为是人啊?

一定不合法的途径

垃圾邮件XXX,如何能获取更多的邮件地址呢,如何能让传统的爬虫更快速,更准确呢。

密码破解器,我知道你知道一大堆工具,John the ripper, hydra等等。但是我肯定你看着各种web手痒痒,你需要新的工具了。

当然了,学术研究啊,商业的其他应用啊,我就不怎么细说了,因为那些不直接来钱。

怎么Web Scraping

哈,这里还是要兜售ruby,其实我不兜售人家销量野蛮高的啊。用文字不太好形容,那么用关键词吧。在初期还是主要讲讲nokogirimechanize的一些应用。可能大家觉得很不屑,觉得这个话题没意思,但是这些技术正是被社区广泛使用,但同时无论英文资料还是中文资料都非常少的。说以我争取做一个好孩子,做一个系统的教程。

至于拿回数据以后,进一步用统计还是人工智能方法来处理挖掘,也会涉及到一些,但毕竟我不是这方面的专家,所以介绍的东西会相对少一些,但会补充相应的资料,供大家提高用。