收集淘寶店鋪資料的小程序

Ruby學習持續進行中

看到業務人員不停的在Ctrl+c與Ctrl+v,還是把固定格式的淘寶搜索結果加入到excel表格中。

還好每人分了幾個類目,不過也夠浪費體力的了。

我雖然很懶,但也忍不住了,直接叫停,寫了點 "日本碼" 解決此懶。

ps: 每次打 'rb' ,輸入法總出現 '日本' ,不知道是不是ruby故意的,正好拼音 r b。

 

#parseHTML.rb

#endode:utf-8
# 2010.6.13 @ spring by Apanda
# ver= 1.0 r
=begin

程序用途:

	解析淘寶搜索店鋪的結果數據並儲存爲 csv文件
	一次可以截取多個搜索結果地址
	
本工具使用方法:

	1.建立一個list.txt的文件,裏面存放淘寶搜索結果頁面的地址 如下是商城食品類目搜索結果頁:
		http://shopsearch.taobao.com/browse/shop_search.htm?cat=50002766&title=title&nick=nick&filterShopType1=1&s=40&stat=4
		http://shopsearch.taobao.com/browse/shop_search.htm?cat=50002766&title=title&nick=nick&filterShopType1=1&s=40&stat=4
	  將地址每行一個的方式保存好。
	  
	2.將該程序文件parseHTML.rb 和list.txt保存在同一個文件夾中,運行 ruby parseHTML.rb ,在同一文件夾下出現 taobao.csv文件
	
	技巧:按類目分別建立不同的文件夾,這樣後續可以從新獲取最新的搜索結果。
		taobao
			| - 食品
			| 	  | - list.txt
			|	  | - parseHTML.rb
			|
			| - 服裝
			| 	  | - list.txt
			|	  | - parseHTML.rb
			....

=end








require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'iconv'
require 'fastercsv'

def write(data,name)
	FasterCSV.open(name, "w") do |csv|
		data.each{|line|
			csv << line
			#["row", "of", "CSV", "data"]
		}
	end
end	

def conv(str)
	Iconv.iconv("GBK//IGNORE", "UTF-8//IGNORE", str.to_s)
end

def parse(doc)
	shops= Array.new
	doc.css('table#item-matched tbody tr').each do |tr|
				#店鋪名稱
		shopName=conv tr.css('td.thumb div a')[0]['title']
		#店鋪地址
		shopUrl=tr.css('td.thumb div a')[0]['href'].strip
		#主營產品
		desc=conv tr.css('td.thumb dl dd p')[0].css('a').text.collect{|line| line.strip}

		#消費者服務 baozhang
		service=[]
		tr.css('td.thumb dl dd p ins').each do |sevr|
			service << conv(sevr['title'])
		end
		baozhang=service.join(',')
		#寶貝數量
		total = tr.css('p.amount span')[0].content.strip
		#旺旺名稱
		wangwang=conv tr.css('p.nick a')[0].content.strip
		#是否商城
		mall=tr.css('ins.service-mall').length > 0 ? "商城" : "個人"
		#地區
		diqu =conv tr.css('td')[3].css('p')[0].content.strip 

		#店鋪級別
		level=tr.css('td')[4].css('p')[0]
		if level.css('a').length > 0
				level = conv level.css('a')[0]['title']
			else
				level = conv level.content.strip
		end
		#puts "店鋪:#{shopName}\n地區:#{diqu}\n店鋪等級:#{mall}/#{level}\n主營:#{desc}\n地址:#{shopUrl}\n寶貝數量:#{total}\n消費者服務:#{baozhang}\n旺旺名稱:#{wangwang}\n"
		#puts "----------------------------------------"
		
		shops << [shopName,diqu,wangwang,mall,level,desc,shopUrl,total,baozhang]
	end
	
	shops
	
end

db = Array.new

File.readlines("list.txt").each do |row|
	url=conv(row).to_s
	puts url
	doc = Nokogiri::HTML(open(url))
	db.concat(parse(doc))
end
write(db,"taobao.csv")
puts db.length

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章