51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 8881|回复: 6
打印 上一主题 下一主题

[原创] 用ruby如何实现网页数据抓取并导入到Excel

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-4-25 09:26:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
公司每天需要从一个固定网站的一个固定页面的固定栏目里面抓取其每天的更新内容,并将结果存入Excel文件中。
我用如下代码来实现
f=ie.table(:id, "tablelisting").to_a#tablelisting即为要抓取内容所在的Table名称
puts f
aFile = File.new("testfile.xls", "w")
aFile<<f
可是保存的结果并不理想,具体表现为同一行的内容(同时分属于4列)只填入了Excel表一个格子中。而且需要时间函数来获取每天的时间,以此来命名每天新生成的结果文件。或者考虑在已有的结果文件上进行数据的更新。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-4-25 22:34:53 | 只看该作者
建议你不要使用直接导入 EXCEL 文件的方式,而是改用写文件的方式,并使用换行和逗号分割来处理记录与记录之间以及字段与字段之间的关系,并且把文件的扩展名改为 *.csv,同样可以使用 EXCEL 来访问。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-4-26 08:51:47 | 只看该作者
很受启发,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2006-4-26 09:49:22 | 只看该作者
谢谢回复,不过还有些问题,因为抓取内容里面涉及到了dollar,有好多如下的形式$4,300,150所以在记录后边添加逗号之后用Execel打开还是会出现切分混乱。一时之间又没了章程。
另外能否给我提供一段比较完善的向文件里面写东西的代码,我是这样实现的。
f=ie.table(:id, "tablelisting").to_a
puts f
File.new("Website.csv", "w")
aFile=File.open("Software.csv", "w")
aFile<<f
但是每次都会把上次的记录给覆盖掉,而我的意思是要在原来的文件里面添加记录。原来的记录保持不变。
PS:很高兴知道你也是山东的。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2006-4-29 11:51:42 | 只看该作者
刚刚在 Programming Ruby 里面看到了 Ruby 可以利用 win32ole 来操作 WINDOWS application ,有段例子代码是操作 excel 的,你可以试试,如下:



require 'win32ole'

# -4100 is the value for the Excel constant xl3DColumn.
ChartTypeVal = -4100;

# Creates OLE object to Excel
excel = WIN32OLE.new("excel.application")

# Create and rotate the chart

excel['Visible'] = TRUE;
workbook = excel.Workbooks.Add();
excel.Range("a1")['Value'] = 3;
excel.Range("a2")['Value'] = 2;
excel.Range("a3")['Value'] = 1;
excel.Range("a1:a3").Select();
excelchart = workbook.Charts.Add();
excelchart['Type'] = ChartTypeVal;

30.step(180, 10) do |rot|
    excelchart['Rotation'] = rot
end

excelchart2 = workbook.Charts.Add();
excelchart3 = workbook.Charts.Add();

charts = workbook.Charts
charts.each { |i| puts i }

excel.ActiveWorkbook.Close(0);
excel.Quit();
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-1-10 13:21:42 | 只看该作者
改一下Open的参数就行了
aFile=File.open("Software.csv", File::WRONLY|File::APPEND)
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-1-13 14:09:58 | 只看该作者

回复 4# 的帖子

用aFile=File.open("Software.csv", "a")就可以了,用“a+" 代替你的"w"
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-15 04:28 , Processed in 0.073781 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表