文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>收集淘宝店铺资料的小程序

收集淘宝店铺资料的小程序

时间:2010-07-14  来源:mewleo

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

 

相关阅读 更多 +
排行榜 更多 +
ooxe官方版下载

ooxe官方版下载

金融理财 下载
ooxe

ooxe

金融理财 下载
OXE交易app安卓版下载

OXE交易app安卓版下载

金融理财 下载