博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ruby 批量下载王者荣耀皮肤
阅读量:5792 次
发布时间:2019-06-18

本文共 1316 字,大约阅读时间需要 4 分钟。

主要采用ruby Parallel库提供的多线程方式:

require 'unirest'require 'open-uri'require 'parallel'require 'json'url = 'http://pvp.qq.com/web201605/js/herolist.json'response = Unirest.get(url)/(\[.*\])/ =~ response.body.force_encoding('utf-8')hero_list = JSON $1#返回ename, cname, skin_name组成的hash数组hero_list.each do |hero|  hero.select!{
|key, _| key=='ename' || key == 'cname' || key == 'skin_name'} # hero.select!{|key, _| key =~ /[('ename')|('cname')|('skin_name')]/}enddef download_hero_img(url, path, img_name) img_file = open(url,:ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE){ |f| f.read } puts "download #{path}/#{img_name}.jpg" open("#{path}/#{img_name}.jpg", 'wb'){ |f| f.write(img_file)}enda = Proc.new{hero_list.pop || Parallel::Stop}# 分成10个线程爬取Parallel.map(a, in_threads:10) do |hero| path = "./#{hero['cname']}" Dir.mkdir(path) unless Dir.exists?(path) # url = "http://game.gtimg.cn/images/yxzj/img201606/heroimg/#{hero['ename']}/#{hero['ename']}" skin_list = hero['skin_name'].split('|') # puts skin_list skin_list.each_with_index do |skin, index| url = "https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/#{hero['ename']}/#{hero['ename']}-bigskin-#{index.to_i+1}.jpg" img_name = skin download_hero_img(url, path, img_name) endend

线程参考资料:

 

转载于:https://www.cnblogs.com/wf0117/p/9219480.html

你可能感兴趣的文章
吃午饭前,按书上的代码写会儿--Hunt the Wumpus第一个版本
查看>>
easyui中combobox的值改变onchang事件
查看>>
Eclipse魔法堂:任务管理器
查看>>
一周自学动态站点设计
查看>>
Android-Universal-Image-Loader
查看>>
Android 从硬件到应用:一步一步向上爬 4 -- 使用 JNI 方法调硬件驱动
查看>>
TEST
查看>>
loadrunner 的Administration Page里面设置
查看>>
程序员喜欢怎样的职位描述?(转)
查看>>
威胁快报|ProtonMiner挖矿蠕虫扩大攻击面,加速传播
查看>>
PAT A1116
查看>>
App上架/更新怕被拒? iOS过审“避雷秘籍”请查收
查看>>
CentOS 7 防火墙操作
查看>>
关于 top 工具的 6 个替代方案
查看>>
程序员最讨厌的9句话,你可有补充?
查看>>
PAT A1037
查看>>
浅谈RPC
查看>>
TextView 超链接点击跳转到下一个Activity
查看>>
sql server 2008安装的时候选NT AUTHORITY\NEWORK SERVICE 还是选 NT AUTHORITY\SYSTEM ?
查看>>
MyBatis3-SqlSessionDaoSupport的使用
查看>>