taobao.go

package main

import (
    "crypto/md5"
    "encoding/hex"
    "fmt"
    "github.com/PuerkitoBio/goquery"
    "github.com/hunterhug/go_tool/spider"
    "github.com/hunterhug/go_tool/spider/query"
    "github.com/hunterhug/go_tool/util"
    "regexp"
    "strings"
)

func main() {
    fmt.Println(`欢迎使用淘宝天猫图片下载小工具,在同级目录写入链接进taobao.txt,运行EXE即可`)
    fmt.Println("链接如:tmall.com/item.htm?id=523350171126&skuId=3120562159704,tmall")
    fmt.Println("---------------以上详情页中图片会保存在tmall目录-----------------------")
    c, e := util.ReadfromFile("./taobao.txt")
    if e != nil {
        fmt.Println("打开taobao.txt出错")
    } else {
        urls := strings.Split(string(c), "\n")
        for _, url := range urls {
            url := strings.Replace(strings.TrimSpace(url), "\r", "", -1)
            downlod(url)
        }

    }
    fmt.Println("请手动关闭选框...")
    util.Sleep(100)
}

func md55(s string) string {
    h := md5.New()
    h.Write([]byte(s))
    rs := hex.EncodeToString(h.Sum(nil))
    return rs
}

func downlod(urlmany string) {
    temp := strings.Split(urlmany, ",")
    url := temp[0]
    filename := util.TodayString(3)
    if len(temp) >= 2 {
        filename = temp[1]
    }
    dir := "./" + filename
    util.MakeDir(dir)
    s, e := spider.NewSpider(nil)
    if e != nil {

    } else {
        s.Url = url
        dudu := "detail.tmall.com"
        if strings.Contains(url, "item.taobao.com") {
            dudu = "item.taobao.com"
        }
        s.NewHeader("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", dudu, nil)
        content, err := s.Get()
        if err != nil {

        } else {
            //fmt.Println(string(content))
            docm, err := query.QueryBytes(content)
            if err != nil {
                fmt.Println(err.Error())
            } else {
                //fmt.Println(string(content))
                docm.Find("img").Each(func(num int, node *goquery.Selection) {
                    img, e := node.Attr("src")
                    if e == false {
                        img, e = node.Attr("data-src")
                    }
                    if e && img != "" {
                        if strings.Contains(img, ".gif") {
                            return
                        }
                        fmt.Println("原始文件:" + img)
                        r, _ := regexp.Compile(`([\d]{1,4}x[\d]{1,4})`)
                        imgdudu := r.FindStringSubmatch(img)
                        sizes := "720*720"
                        if len(imgdudu) == 2 {
                            sizes = imgdudu[1]
                        }
                        temp := strings.Replace(img, sizes, "720x720", -1)
                        filename := md55(temp)
                        if util.FileExist(dir + "/" + filename + ".jpg") {
                            fmt.Println("文件存在:" + dir + "/" + filename)
                        } else {
                            fmt.Println("下载:" + temp)
                            s.Url = "http:" + temp
                            imgsrc, e := s.Get()
                            if e != nil {
                                fmt.Println("下载出错" + temp + ":" + e.Error())
                                return
                            }
                            e = util.SaveToFile(dir+"/"+filename+".jpg", imgsrc)
                            if e == nil {
                                fmt.Println("成功保存在" + dir + "/" + filename)
                            }
                            util.Sleep(2)
                            fmt.Println("暂停两秒")
                        }
                    }
                })

            }

        }
    }

}

在源码同级目录写入taobao.txt:

https://detail.tmall.com/item.htm?id=523350171126&skuId=3120562159704,myword

图片将会保存在myword里面

首先安装库

go get -v github.com/PuerkitoBio/goquery
go get -v github.com/hunterhug/go_tool

然后开跑!

go run taobao.go

如果嫌麻烦

请到这里下载打包exe执行文件:

http://pan.baidu.com/s/1jHKUGZG

进入go目录,下载taobao.rar

源码在:

https://github.com/hunterhug/taobao_img

截图如下:


少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区
少于150字的随笔不允许发布到首页候选区

抓取天猫和淘宝的详情页图片|Golang的更多相关文章

  1. 仿淘宝商品详情页上拉弹出新ViewController

    新项目就要开始做了,里面有购物那块,就试着先把淘宝商品详情页的效果做了一下. 1.需求 1.第一次上拉时,A视图拉到一定距离将视图B从底部弹出,A视图也向上 2.显示B视图时下拉时,有刷新效果,之后将 ...

  2. iOS app url scheme跳转到淘宝商品详情页 唤醒app

    最近涉及的一个业务,在app内的一个广告,点击打开webView,加载的是一个淘宝商品详情页,效果是打开该webView自动跳转至淘宝对应的页面,同时在自己的app仍然加载页面,点击评论等也同样能跳转 ...

  3. 第十二篇、OC_仿淘宝商品详情页的翻页

    // // GFBProductViewController.m // elmsc // // Created by MAC on 2016/11/26. // Copyright © 2016年 G ...

  4. android仿京东、淘宝商品详情页上拉查看详情

    话不多说,直接上干货,基本就是一个scrollview中嵌套两个scrollview或者webview;关键点事处理好子scrollview和父scrollview的触摸.滑动事件已达到想要的效果.大 ...

  5. vue实现淘宝商品详情页属性选择功能

    方法一是自己想出来的,方法二来自忘记哪里看到的了 不知道是不是你要的效果: 方法一:利用input[type="radio"] css代码: input { display: no ...

  6. 仿京东淘宝商品详情页属性选择js效果

    在网上找了好久发现都不符合要求就自己摸索写了一个,用到了linq.js这个linq to js 扩展,不然用纯JS遍历json查询要死人啊 demo:http://123.207.28.46:8086 ...

  7. 【Python3 爬虫】14_爬取淘宝上的手机图片

    现在我们想要使用爬虫爬取淘宝上的手机图片,那么该如何爬取呢?该做些什么准备工作呢? 首先,我们需要分析网页,先看看网页有哪些规律 打开淘宝网站http://www.taobao.com/ 我们可以看到 ...

  8. python爬虫爬取京东、淘宝、苏宁上华为P20购买评论

    爬虫爬取京东.淘宝.苏宁上华为P20购买评论 1.使用软件 Anaconda3 2.代码截图 三个网站代码大同小异,因此只展示一个 3.结果(部分) 京东 淘宝 苏宁 4.分析 这三个网站上的评论数据 ...

  9. Vue实现仿淘宝商品详情属性选择的功能

    Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下:   attrA ...

随机推荐

  1. iOS 七牛云上传并获取图片----【客户端】

           最近做了七牛云存储的有关内容,涉及到与后台交互获取验证的token,无奈,后台自命清高,不与理会,没办法呀,于是自己搞呗.首先呢在在七牛上注册一个账号,然后呢添加一个存储空间这时候空间名 ...

  2. TSQL生成Combguid

    Nhibernate实现combguid /// <summary> /// Generate a new <see cref="Guid"/> using ...

  3. UniversalApp启动页面设置

    在新建的一个UniversalApp中,我在Shared项目下添加了一个页面,新建的页面名称为InitPage.xaml,现在我想把InitPage.xaml作为起始页,但是在配置文件中未找到设置启动 ...

  4. Android 开关按钮切换,类似于iphone 效果,view实现

    1.实现的效果 gitHub :  https://github.com/zcweng/ToggleButton

  5. IOS 计步器

    这篇博客介绍的是当前比较流行的“计步器”-只是简单的知识点 计步器的实现在IOS8开始进行了改变. 但是我会对之前之后的都进行简单介绍. IOS 8 - // // ViewController.m ...

  6. IOS NSThread

    任何一个 iOS 应用程序都是由一个或者多个线程构成的.无论你是否使用了多线程编程技术,至少有 1 个 线程被创建.多线程就是为了提高引用程序的工作效率!避免阻塞主线程!当我们没有用任何多线程技术的话 ...

  7. xib命名注意事项--防止被其他控制器意外地 当做默认的 view了

    注意: 1.创建的xib如果不是想给指定的控制器做view的话,命名就要注意了! 2.最好是不要命名和控制器名字相关的xib. 如下举例说明一下: - (void)touchesBegan:(NSSe ...

  8. Mysql锁初步

    存储引擎 要了解mysql的锁,就要先从存储引擎说起. 常用存储引擎列表如下图所示: 最常使用的两种存储引擎: Myisam是Mysql的默认存储引擎.当create创建新表时,未指定新表的存储引擎时 ...

  9. windows 注册表编程

    例子:将本地计算机的Monitor ID写入到注册表中 (1)获取MonitorID BOOLEAN DeviceMonitorService::EnumClassDevice(const GUID ...

  10. 【AdaBoost算法】基于OpenCV实现人脸检测Demo

    一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...