google搜索 站内搜索                 软件测试门户 | 软件测试培训 | 文章资料精选 | 软件测试论坛 | 测试解决方案 | 软件测试博客 | 测试招聘求职 
打印

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

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


公司每天需要从一个固定网站的一个固定页面的固定栏目里面抓取其每天的更新内容,并将结果存入Excel文件中。
我用如下代码来实现
f=ie.table(:id, "tablelisting").to_a#tablelisting即为要抓取内容所在的Table名称
puts f
aFile = File.new("testfile.xls", "w")
aFile<<f
可是保存的结果并不理想,具体表现为同一行的内容(同时分属于4列)只填入了Excel表一个格子中。而且需要时间函数来获取每天的时间,以此来命名每天新生成的结果文件。或者考虑在已有的结果文件上进行数据的更新。

TOP

建议你不要使用直接导入 EXCEL 文件的方式,而是改用写文件的方式,并使用换行和逗号分割来处理记录与记录之间以及字段与字段之间的关系,并且把文件的扩展名改为 *.csv,同样可以使用 EXCEL 来访问。
欢迎访问我的 blog
专注于: 软件性能测试,软件测试自动化
软件测试过程,方法,技术的改进
开源工具和技术在软件测试中的应用

TOP

很受启发,谢谢

TOP

谢谢回复,不过还有些问题,因为抓取内容里面涉及到了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:很高兴知道你也是山东的。

TOP

刚刚在 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();
欢迎访问我的 blog
专注于: 软件性能测试,软件测试自动化
软件测试过程,方法,技术的改进
开源工具和技术在软件测试中的应用

TOP

改一下Open的参数就行了
aFile=File.open("Software.csv", File::WRONLY|File::APPEND)

TOP

 
当前时区 GMT+8, 现在时间是 2008-11-23 20:33Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹