zoukankan      html  css  js  c++  java
  • 批量下载 Bing 墙纸

    cn.bing.com 的背景图片的质量还是很高的,值得下载。

    package main
    
    import (
    	"compress/gzip"
    	"fmt"
    	"io/ioutil"
    	"log"
    	"net/http"
    	"net/url"
    	"os"
    	"path"
    	"regexp"
    	"strings"
    )
    
    var (
    	httpc = &http.Client{}
    
    	regWallpaper = regexp.MustCompile(`http://s.cn.bing.net/az/hprichbg/rb/[a-zA-z0-9_-]*_1920x1080.jpg`)
    )
    
    //判断网页是否使用 gzip 压缩,如果是则进行解压
    func ungzipRespBody(resp *http.Response) (b []byte, err error) {
    	body := resp.Body
    	if strings.Contains(resp.Header.Get("Content-Encoding"), "gzip") {
    		body, err = gzip.NewReader(resp.Body)
    		if err != nil {
    			return nil, err
    		}
    	}
    	defer body.Close()
    
    	return ioutil.ReadAll(body)
    }
    
    func setHeaders(req *http.Request) {
    	req.Header.Set("Accept-Encoding", "gzip, deflate")
    	req.Header.Set("User-Agent", "Mozilla/5.0 (Ubuntu) Chrome/38.0.2125.122")
    }
    
    //获取页面
    func HttpGet(url string) ([]byte, error) {
    	req, err := http.NewRequest("GET", url, nil) //创建 request
    	if err != nil {
    		return nil, err
    	}
    	setHeaders(req)
    
    	resp, err := httpc.Do(req) //发送请求
    	if err != nil {
    		return nil, err
    	}
    
    	return ungzipRespBody(resp)
    }
    
    //下载文件
    func Downfile(url, target string) (err error) {
    	body, err := HttpGet(url)
    	if err != nil {
    		return err
    	}
    
    	return ioutil.WriteFile(target, body, os.ModePerm)
    }
    
    func main() {
    	body, err := HttpGet("http://cn.bing.com/HPImageArchive.aspx?format=js&idx=1&n=10")
    	if err != nil {
    		log.Panic(err)
    	}
    
    	wallpaper := regWallpaper.FindAll(body, -1)
    
    	for i, wpaper := range wallpaper {
    		wStr := string(wpaper)
    
    		u, err := url.Parse(wStr)
    		if err != nil {
    			log.Print(err)
    			continue
    		}
    		filename := path.Base(u.Path)
    
    		err = Downfile(wStr, filename)
    		if err != nil {
    			log.Print(err)
    			continue
    		}
    
    		fmt.Printf("%d. Downloaded %s
    ", i, filename)
    	}
    }
    
  • 相关阅读:
    bzoj1653 [Usaco2006 Feb]Backward Digit Sums
    python爬虫之真实世界中的网页解析
    python爬虫之网页解析
    python列表操作方法
    python多行代码简化
    python操作文件
    python数据类型之pandas—DataFrame
    python数据类型之字典(二)
    python数据类型之字典(一)
    Selenium模拟浏览器抓取淘宝美食信息
  • 原文地址:https://www.cnblogs.com/bing-l/p/4251669.html
Copyright © 2011-2022 走看看