ruby图片抓取

2011年6月3日 没有评论 2,016 views  

谨以此117行代码,来怀念一下我曾经的ruby生活。

这是一个用来抓取图片的脚本

其中F2010MEN.txt和S2011MEN.txt的内容格式为

“/fashionshows/review/S2011MEN-ACNE”,”/fashionshows/review/S2011MEN-AKIMMEL”。。。

require 'rubygems'
require 'pp'
require 'nokogiri'
require 'open-uri'
require 'fileutils'
require 'timeout'

class GetImages
def initialize
@file_names = ['F2010MEN.txt','S2011MEN.txt']
@api = "http://www.style.com/api/data-streamer?id=empty&out=xml&dsType=slideshow&season=<SEASON>&designCode=<DESIGNCODE>"
@home = "http://www.style.com"
end
def start
@file_names.each do |name|
pages = getpages(name)
pages[0] =~ /([\d\w]+)\-(\w+)/
season = $1						#得到SHOW的名字
bindex = 0
bundle = pages.size-1
FileUtils.mkdir_p("pages/api/#{season}")
pages[bundle * bindex, bundle].each do |p_url|
    begin
    a_url = ''
#    a_uri = ''
    if p_url=~/([\d\w]+)\-(\w+)/
    a, b = $1, $2
    a_url = @api.sub("<SEASON>", a).sub("<DESIGNCODE>", b)
    a_uri = "pages/api/#{a}/" + make_uri(a_url)
    puts a_url
#    puts a_uri
       
    # 1
    download_xml(a_url, a_uri)
    
    # 2
    download_images_from_api_page(a_uri, a, b)
  end
  rescue Timeout::Error, Errno::ENOENT
	    file = open("exception.txt","a")
	    file.write(Time.now.to_s+"no such file:"+a_url+"\n")
	    file.close
	    p_url = ""
	    retry
  end
end
end
end
def getpages(name)
	pages = []
	brandfile = File.open("menswear\\#{name}")	#打开每个品牌的文件
	pages = brandfile.read.split(',')		#得到pages数组
	brandfile.close
	return pages
end
def full_path(url)
  if url =~ /^http/
    url
  else
    @home + url
  end
end
def make_uri(url)
  url.gsub(/[\W\=\?\&]/, '_')
end
def download_image(a_url, a_uri)
	file = File.open("#{a_uri}","wb")
	file.write(open(a_url).read)
	file.close
end
def download_xml(a_url, a_uri)
	file = File.open("#{a_uri}","w")
	file.write(open(a_url).read)
	file.close
end
def setreadme(dir,doc)
	contents = ["主题: #{doc.css('fashion-show').text}","时间:#{doc.css('fashion-show').attr('show_date')}","城市:#{doc.css('slideshow').attr('city')}","设计师:#{doc.css('designer').text}","内容:#{doc.css('body').text}"]
 	readme = File.open("#{dir}/README.txt","w")
	contents.each do |content|
		readme.write(content+"\n")
	end
	readme.close
end
def download_images_from_api_page(a_uri, a, b)
  dir = "images/#{a}/#{b}"
  FileUtils.mkdir_p(dir)
  f = File.new(a_uri)
  doc = Nokogiri::XML(f)
  f.close
  deru = ""
  imagecount = 0
  setreadme(dir,doc)
  readme = File.open("#{dir}/README.txt","a")
  doc.css('photo[type="FULL_SCREEN_IMAGE"]').each do |link|
    puts image_url = full_path(link.attr('uri'))
    if image_url =~ /DETAILS/
	    deru = "DETAILS_"
    else
	    deru = "RUNWAY_"
    end
    puts image_uri = dir + '/' + deru + File.basename(image_url)
    if File.exists?(image_uri)
      puts "We got it!"
    else
      puts "Downloading..."
      download_image(image_url, image_uri)
      imagecount+=1
      readme.write(image_url+"\n")
    end
  end
  readme.write("图片总数: #{imagecount}")
  readme.close
end
end

get_images = GetImages.new
get_images.start
分类: ruby 标签:

ORACLE存储过程从零到入门

2011年5月20日 没有评论 1,255 views  

1.以下所说为oracle存储过程!

2.注重存储过程的编写、调试、和运用的流程,不注重太多语法的介绍!

3.只要你懂sql语句就可以继续往下看了!

4.一个存储过程不是属于哪个table的,而是属于一个用户的(在oracle来说)。

5.现在可以编写存储过程了,如果你是一个oralce新手应该也知道plsql这个东西。

在plsql里新建一个 sql window,在这里写存储过程的语句。

一个最简单的存储过程

create or replace procedure test is
begin
null;
end test;
/

解释:
阅读全文…

分类: 数据库 标签: ,

sql server 脚本 游标的使用

2011年5月10日 没有评论 993 views  
DECLARE
	@zorder INT ,@a001000 VARCHAR (20) ,@a001000temp VARCHAR (20) ,@ID INT
SET @zorder = 1
SET @a001000temp = '@#$%' 
DECLARE cur CURSOR FOR 
SELECT a001000, ID FROM table_name ORDER BY a001000,zorder 

OPEN cur
 
FETCH NEXT FROM cur INTO @a001000 ,@ID 
while @@fetch_status = 0
BEGIN
IF (@a001000temp != @a001000)
BEGIN
SET @zorder = 1
SET @a001000temp =@a001000
END 
UPDATE table_name SET zorder =@zorder WHERE a001000 =@a001000 AND ID =@ID
SET @zorder =@zorder + 1 
FETCH NEXT FROM cur INTO @a001000 ,@ID
END 
CLOSE cur 
DEALLOCATE cur
分类: 数据库 标签:

web2.0中常用配色

2011年5月6日 没有评论 787 views  

注:此图片非本人创作。

#EFF7FF #96C2F1
#F0FBEB #9BDF70
#FFFFFF #92B0DD
#EEFAFF #BBE1F1
#FAFCFD #CCEFF5

阅读全文…

分类: 前端 标签:

jquery ui datepicker 设置disabled

2011年4月30日 没有评论 866 views  

版本:jQuery UI Datepicker 1.8.23

将datepicker设置disable的方法:


$(selector).datepicker("disable");

$(selector).datepicker("enable");

原理:

在源码文件(jquery.ui.datepicker.js)的$.fn.datepicker方法里,有这样一行代码


$.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this].concat(otherArgs)) :

我们传过来的参数(“disable”和”enable”)就会替换掉这行代码中的options,最终形成函数名_disableDatepicker和_enableDatepicker。

 

分类: 前端 标签: ,

模态窗口向本窗口提交form

2011年4月26日 没有评论 1,305 views  

我遇到的是在模态窗口内实现翻页,也就是点下一页的时候,提交一个form页面变到下一页,

开始发现页面就是不刷新,指定了target,就会把页面返回的新的标签页上

后来我把链接改了下就ok了。

不能刷新:


<a href="javascript:void()" onclick="next_page()"" >下一页</a>

可以刷新:


<a href="javascript:next_page()" >下一页</a>

分类: 前端 标签:

oracle number字段改为integer

2011年4月25日 没有评论 2,104 views  

1.原字段没数据


alter   table  tb_test  modify col integer;

2.原字段有数据


alter table tb_test add col_temp integer;
update tb_test  set col_temp=col;
alter table tb_test  drop column col;
alter table tb_test  rename column col_temp to col;

分类: 数据库 标签:

ORACLE 多表删除

2011年4月22日 没有评论 1,876 views  
DELETE
FROM
	tableA A
WHERE
	EXISTS (
		SELECT
			'1'
		FROM
			tableB b
		INNER JOIN tableC c ON c.system_code = b.b001000
		WHERE
			c.class_code = 'ABAB'
		AND c.level_code LIKE '123123%'
		AND b.class_type = 'ACAC'
		AND A .tableB000 = b.tableB000
		AND A .tableA505 = 'LOVE'
		AND A .state_id != '1'
	)

要删除哪个表的数据,from后就跟哪个表,exists()后还可以再跟and进行条件限制

分类: 数据库 标签:

java 多线程小试

2011年4月18日 没有评论 898 views  

public class ThreadTest extends Thread {

	private static Object obje = new Object();

	public void run(){
		synchronized (obje) {
			for(int i=0;i<100;i++){
				try {
					if(i%10==0&&i!=0){
						System.out.println("haha");
						obje.notify();
						obje.wait();
					}
					Thread.sleep(100);
					System.out.println(this.getName()+":"+i);
				}catch (InterruptedException e) {
						e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) {
		Thread t1 = new ThreadTest();
		Thread t2 = new ThreadTest();
		t1.start();
		t2.start();
	}
}

部分输出结果:
阅读全文…

分类: java 标签: ,

ORA-01855 :要求AM/A.M. 或 PM/P.M.

2011年4月15日 没有评论 2,790 views  

在ORACLE执行insert语句的时候提示如题错误

是下面一条语句引起的


to_date('2011/09/13 3:23PM','yyyy/mm/dd hh:miAM')

将上面语句改为


to_date('2011/09/13 3:23下午','yyyy/mm/dd hh:miAM')

即可

分类: 数据库 标签: