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