[Ruby]使用Ruby抓取网页及加工处理

并不是专业做网页抓取的爬虫的,只是之前在一个做的挺烂的网站上帮人刷票起步逐渐学习了网页抓取的工具。
最初的时候是用Python的urllib2,拿到网页当文本处理,后来才在论坛上看到有BeautifulSoap这种级别的神器,Python处理起这种来实在是方便,可惜后来我遇到了Ruby及Rails,从此移情别恋,乃至读了Metaprogramming Ruby后更是喜欢的不要不要的。
最近工作压力不大,闲来无事便想抓取一下股市的一些数据。首先遇到的一个问题便是从哪里拿到上市和深市所有的股票代码,即便网上有现成的列表我也想着用程序抓取加工一下才显得牛逼,所以我找到了这个网页:http://quote.eastmoney.com/stocklist.html
看完之后就觉得其实代码并不复杂,只是第一次用Ruby来抓取网页不熟悉,不知道用什么工具以及怎么用而已,经过一番搜索要用到open-uri及Nokogiri。
首先来看一下open-uri,这个是Ruby内建的功能。要想使用open-uri只需要在代码中加入require ‘open-uri‘即可,使用起来也很简单。

1 open("http://www.ruby-lang.org/en") {|f|
2     f.each_line {|line| p line}
3     p f.base_uri         # <URI::HTTP:0x40e6ef2 URL:http://www.ruby-lang.org/en/>
4     p f.content_type     # "text/html"
5     p f.charset          # "iso-8859-1"
6     p f.content_encoding # []
7     p f.last_modified    # Thu Dec 05 02:45:02 UTC 2002
8 }

open函数提供的文件对象经过了扩展,混入了一些网页的元信息。
打开网页的时候也可以带入User-Agent等选项,用起来也很方便,如下即可

1 open("http://www.ruby-lang.org/en/",
2     "User-Agent" => "Ruby/#{RUBY_VERSION}",
3     "From" => "[email protected]",
4     "Referer" => "http://www.ruby-lang.org/") {|f|
5     # ...
6 }

Nokogiri是一个gem,据说在此之前还有另一个工具Hpricot,只是简单了解了一下,并不赘述。
首先是Nokogiri读取网页内容,可以用两个方法:
doc = Nokogiri::HTML(open(url)),用这个方法如果有字符集的问题,则可以使用doc = Nokogiri::HTML.parse(open(url), nil, "gb2312")来指定字符集。
其次是定位网页元素,Nokogiri支持XPATH也支持CSS查找。简单介绍几种通过CSS定位的方法:
doc.css(‘a‘) 返回网页所有的a标签元素
doc.css(‘.myclass div ul‘) 返回所有css样式为myclass下的div的ul标签元素
doc.css(‘div#main‘) 返回id为main的div标签元素
上面的内容基本能解决90%的需求了,如果真的用起来还需要问Google老师。

时间: 2024-10-12 16:41:34

[Ruby]使用Ruby抓取网页及加工处理的相关文章

Asp.net 使用正则和网络编程抓取网页数据(有用)

Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </summary> /// <param name="strUrl">採集地址</param> /// <param name="Begin">開始字符</param> /// <param name="End">结束字符</param&g

python多线程实现抓取网页

Python实现抓取网页 下面的Python抓取网页的程序比较初级,只能抓取第一页的url所属的页面,只要预定URL足够多,保证你抓取的网页是无限级别的哈,下面是代码: ##coding:utf-8 ''' 无限抓取网页 @author wangbingyu @date 2014-06-26 ''' import sys,urllib,re,thread,time,threading ''' 创建下载线程类 ''' class download(threading.Thread): def __

抓取网页链接

package com.smilezl.scrapy; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.sql.Connection; import java.sql.DriverManager; import java.sq

PHP利用Curl实现多线程抓取网页和下载文件

PHP 利用 Curl  可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集 数据可以利用 PHPquery类来采集数据库,在此之外也可以用 Curl ,借助Curl 这个功能实现并发多线程的访问多个url地址以实现并发多线程抓取网页或者下载文件. 至于具体实现过程,请参考下面几个例子: 1.实现抓取多个URL并将内容写入指定的文件 $urls = array( '路径地址', '路径地址', '路径地址

抓取网页中的内容、如何解决乱码问题、如何解决登录问题以及对所采集的数据进行处理显示的过程

本文主要介绍如何抓取网页中的内容.如何解决乱码问题.如何解决登录问题以及对所采集的数据进行处理显示的过程.效果如下所示: 1.下载网页并加载至HtmlAgilityPack 这里主要用WebClient类的DownloadString方法和HtmlAgilityPack中HtmlDocument类LoadHtml方法来实现.主要代码如下. var url = page == 1 ? "http://www.cnblogs.com/" : "http://www.cnblogs

Java抓取网页数据(原网页+Javascript返回数据)

转载请注明出处! 原文链接:http://blog.csdn.net/zgyulongfei/article/details/7909006 有时候因为种种原因,我们须要採集某个站点的数据,但因为不同站点对数据的显示方式略有不同! 本文就用Java给大家演示怎样抓取站点的数据:(1)抓取原网页数据:(2)抓取网页Javascript返回的数据. 一.抓取原网页. 这个样例我们准备从http://ip.chinaz.com上抓取ip查询的结果: 第一步:打开这个网页,然后输入IP:111.142.

[Python]网络爬虫(一):抓取网页的含义和URL基本构成

一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来. 这样看来,网络爬虫就是一个爬行程序,一个抓取

file_get_contents抓取网页乱码的解决

有时候用 file_get_contents() 函数抓取网页会发生乱码现象.有两个原因会导致乱码,一个是编码问题,一个是目标页面开了Gzip. 编码问题好办,把抓取到的内容转下编码即可($content=iconv("GBK", "UTF-8//IGNORE", $content);),我们这里讨论的是如何抓取开了Gzip的页面.怎么判断呢?获取的头部当中有Content-Encoding: gzip说明内容是GZIP压缩的.用FireBug看一下就知道页面开了g

MFC抓取网页代码简单版。

最近又在网上找了一些有关MFC抓取网页代码的文章看,发现有个比较简单的代码,和大家分享下. CInternetSession session(NULL, 0); CHttpFile* htmlFile = NULL; CString strLine, strHtml; CString url = _T("http://www.tqyb.com.cn/data/gzWeather/gz_weatherForecastInDays.js?"); TCHAR sRecv[1024]; UIN