查看完整版本: 用ruby如何实现网页数据抓取并导入到Excel

ppchouyou 2006-4-25 09:26

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

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

jackei 2006-4-25 22:34

建议你不要使用直接导入 EXCEL 文件的方式,而是改用写文件的方式,并使用换行和逗号分割来处理记录与记录之间以及字段与字段之间的关系,并且把文件的扩展名改为 *.csv,同样可以使用 EXCEL 来访问。

ppchouyou 2006-4-26 08:51

很受启发,谢谢

ppchouyou 2006-4-26 09:49

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

jackei 2006-4-29 11:51

刚刚在 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();

peter530 2007-1-10 13:21

改一下Open的参数就行了
aFile=File.open("Software.csv", File::WRONLY|File::APPEND)
页: [1]
查看完整版本: 用ruby如何实现网页数据抓取并导入到Excel