[Python] 纯文本查看 复制代码package main

package main

import (

"bytes"

"fmt"

"io/ioutil"

"log"

"net/http"

"net/url"

"os"

"strconv"

"strings"

"sync"

"time"

"github.com/PuerkitoBio/goquery"

"github.com/gocolly/colly"

)

// 判断文件夹是否存在(公共方法)

func PathExists(path string) (bool, error) {

_, err := os.Stat(path)

if err == nil {

return true, nil

}

if os.IsNotExist(err) {

return false, nil

}

return false, err

}

// 判断所给路径是否为文件夹

func IsDir(path string) bool {

s, err := os.Stat(path)

if err != nil {

return false

}

return s.IsDir()

}

// 判断所给路径是否为文件

func IsFile(path string) bool {

return !IsDir(path)

}

// 判断所给路径文件/文件夹是否存在

func Exists(path string) bool {

_, err := os.Stat(path) //os.Stat获取文件信息

if err != nil {

if os.IsExist(err) {

return true

}

return false

}

return true

}

var waitGroup = new(sync.WaitGroup)

//下载图片(存在则跳过)

func download(name string, imgurl string, path string, imgtype string) {

isExi := Exists(path + "//" + name + "." + imgtype)

// fmt.Printf(strconv.FormatBool(isExi))

if isExi {

fmt.Printf("开始下载:文件已存在!\n")

waitGroup.Done()

return

}

fmt.Printf("开始下载:%s\n", imgurl)

res, err := http.Get(imgurl)

if err != nil || res.StatusCode != 200 {

fmt.Printf("下载失败:%s", res.Request.URL)

}

fmt.Printf("开始读取文件内容,url=%s\n", imgurl)

data, err2 := ioutil.ReadAll(res.Body)

if err2 != nil {

fmt.Printf("读取数据失败")

}

ioutil.WriteFile(fmt.Sprintf(path+"//%s."+imgtype, name), data, 0644)

//if failed, sudo chmod 777 pic2016/

//计数器-1

waitGroup.Done()

}

// 解析URL-返回Colly控制器

func OpenUrl(urlstr string) *colly.Collector {

//解析URL

u, err := url.Parse(urlstr)

if err != nil {

log.Fatal(err)

}

c := colly.NewCollector()

// 超时设定

c.SetRequestTimeout(100 * time.Second)

// 指定Agent信息

c.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20110101 Firefox/71.0"

c.OnRequest(func(r *colly.Request) {

// Request头部设定

r.Headers.Set("Host", u.Host)

r.Headers.Set("Connection", "keep-alive")

r.Headers.Set("Accept", "*/*")

r.Headers.Set("Origin", u.Host)

r.Headers.Set("Referer", urlstr)

r.Headers.Set("Accept-Encoding", "gzip, deflate")

r.Headers.Set("Accept-Language", "zh-CN, zh;q=0.9")

})

return c

}

// 根据图片地址下载图片

func UrlDow(band string, prefix string, urlpath string, s *goquery.Selection, i int, _dir string, err error) {

c := OpenUrl(band)

// c.OnRequest(func(r *colly.Request) {

// // waitGroup.Done()

// })

// c.OnHTML("title", func(e *colly.HTMLElement) {

// })

c.OnResponse(func(resp *colly.Response) {

fmt.Println("response received 1", resp.StatusCode)

fmt.Printf(band + "\n")

title := s.Text()

fmt.Printf("链接 %d: %s - %s\n", i, title, band)

waitGroup.Add(1)

go download(urlpath, band, _dir, "png")

})

c.OnError(func(resp *colly.Response, errHttp error) {

err = errHttp

})

c.OnScraped(func(r *colly.Response) {

waitGroup.Done()

})

err = c.Visit(band)

}

// 根据页码地址下载图片

func PageUrlDow(urlstr string, _dir string, err error, sec int) {

// urlstr := "https://wallhaven.cc/toplist?page=1"

c := OpenUrl(urlstr)

c.OnHTML("title", func(e *colly.HTMLElement) {

fmt.Println("title:", e.Text)

})

c.OnScraped(func(r *colly.Response) {

waitGroup.Done()

})

//获取图片列表

c.OnResponse(func(resp *colly.Response) {

fmt.Println("response received", resp.StatusCode)

// goquery直接读取resp.Body的内容

htmlDoc, err := goquery.NewDocumentFromReader(bytes.NewReader(resp.Body))

// fmt.Printf(htmlDoc.Html()) //查看页面内容

if err != nil {

log.Fatal(err)

}

// 找到抓取项

下所有的a解析

htmlDoc.Find("div[class=boxgrid] img").Each(func(i int, s *goquery.Selection) {

temp, bl := s.Attr("data-src")

if bl != true {

return

// log.Fatal(err)

}

imgurl := strings.Replace(temp, "thumb-350-", "", -1)

fmt.Printf(imgurl + "\n") //查看链接

waitGroup.Add(1)

urlpath := strings.Split(imgurl, "/")[len(strings.Split(imgurl, "/"))-1]

urlpath = strings.Split(urlpath, ".")[0]

prefix := urlpath

fmt.Println("\n文件名:" + urlpath)

fmt.Println("\n暂无:" + prefix)

go UrlDow(imgurl, prefix, urlpath, s, i, _dir, err)

// go ImgUrlDow(imgurl, _dir, err, 2)

})

})

c.OnError(func(resp *colly.Response, errHttp error) {

err = errHttp

})

err = c.Visit(urlstr)

}

//主线程

func main() {

//创建文件夹

_dir := "./Wnacg"

exist, err := PathExists(_dir)

if err != nil {

fmt.Printf("get dir error![%v]\n", err)

return

}

if exist {

fmt.Printf("has dir![%v]\n", _dir)

} else {

fmt.Printf("no dir![%v]\n", _dir)

// 创建文件夹

err := os.Mkdir(_dir, os.ModePerm)

if err != nil {

fmt.Printf("mkdir failed![%v]\n", err)

} else {

fmt.Printf("mkdir success!\n")

}

}

now := time.Now()

fmt.Printf("多页模式:下载0-n页\n")

fmt.Printf("中断模式:下载n-m页\n")

isFirst := "10"

fmt.Printf("请输入n或n,m选择-多页模式或者中断模式(默认为多页模式n=10): ")

fmt.Scanln(&isFirst)

urlstr := "https://wall.alphacoders.com/by_sub_category.php?id=239594&name=Fate%2FGrand+Order+Wallpapers"

fmt.Printf("请输入页面地址: ")

fmt.Scanln(&urlstr)

num := strings.Split(isFirst, ",")

if len(num) == 1 {

int, err := strconv.Atoi(num[0])

if err != nil {

fmt.Printf("get dir error![%v]\n", err)

return

}

for i := 1; i <= int; i++ {

if i == 1 {

waitGroup.Add(1)

go PageUrlDow(urlstr, _dir, err, 2)

} else {

waitGroup.Add(1)

go PageUrlDow(urlstr+"&page="+strconv.Itoa(i), _dir, err, 2)

}

}

} else {

intone, err := strconv.Atoi(num[0])

if err != nil {

fmt.Printf("get dir error![%v]\n", err)

return

}

inttwo, errt := strconv.Atoi(num[1])

if errt != nil {

fmt.Printf("get dir error![%v]\n", err)

return

}

for i := intone; i <= inttwo; i++ {

if i == 1 {

waitGroup.Add(1)

go PageUrlDow(urlstr, _dir, err, 2)

} else {

waitGroup.Add(1)

go PageUrlDow(urlstr+"&page="+strconv.Itoa(i), _dir, err, 2)

}

}

}

//等待所有协程操作完成

waitGroup.Wait()

fmt.Printf("下载总时间:%v\n", time.Now().Sub(now))

time.Sleep(60 * time.Second)

}

python壁纸4k_Python爬取4k高清动漫壁纸相关推荐

  1. Python爬虫从入门到精通:(9)数据解析_xpath解析2_爬取4K高清动漫图片_Python涛哥

    使用xpath爬取4K高清动漫图片名称和图片数据 爬取当前页: # 创建文件夹 存储图片 dirName = 'GirlsLib' if not os.path.exists(dirName):os. ...

  2. python爬取4k高清壁纸(多线程版)

    刚学了多线程,于是把上次写的博客拿出来进行改写, 原文链接:python爬取4k高清壁纸(再也不怕没有壁纸了) 爬取过程已经在上一次写过了,可以点击原文链接查看. 废话不多说,直接上多线程代码: im ...

  3. python爬取4K超清画质手机壁纸,壁纸这东西当然是越多越好啦~

    前言 手机壁纸这东西大家都很熟悉吧,相信不论谁打开手机都希望自己的壁纸是自己喜欢的图片, 但是一张壁纸用久了就会想换一张新鲜感满满的图(当然排除情有独钟的), 但挑选图片的时间总是恒久的,有时长时间的 ...

  4. python手机壁纸超清_详解Python静态网页爬取获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  5. Python 网络爬虫:爬取4K高清美图

    爬取4K高清美图 这篇爬虫主要是用来爬取网站高清4K图片,这也是笔者学初学爬虫的时候最先写一个的爬虫脚本,现在回过头来重新梳理一下,也算是对从前知识的一个总结,希望对大家有所帮助! 文章目录 爬取4K ...

  6. 全网最细------爬取4k高清大图

    本次案例将教大家免费爬取4k高清大图,即使你是爬虫新手,也可以食用本次文章实现你的免费下载梦,话不多说,先看效果 网站视图: 看到这些图片你是否怦然心动,跟着我一起看下去. 一.思路分析 首先最基本的 ...

  7. python利用bs4爬取外国高清图片网站

    python利用bs4爬取外国高清图片网站 爬取高清图片 爬取高清图片 import re import requests from bs4 import BeautifulSoup import o ...

  8. 多线程爬取4k超高清美图壁纸

    多线程爬取4k美图壁纸 前言:看完此篇文章你可以更加深入的了解多线程的使用,并且最重要的你能够下载你自己想要的超高清4k壁纸 爬取结果: 1. 分析网站 要爬取的url :http://pic.net ...

  9. python爬取4k高清壁纸(再也不怕没有壁纸了)

    今天突然想换壁纸,在网上找了一圈没有找到满意的,正好学了爬虫,于是我就想把它们全都爬取下来,慢慢挑选. 这次爬取的目标是:彼岸图网动漫壁纸 接下来,我将详细讲解爬取过程: 首先点开网站,右键–检查 观 ...

最新文章

  1. Spring MVC入门示例教程--静态页面跳转
  2. 2019ICPC(银川) - Function!(数论+数学分块)
  3. [luoguP4705]玩游戏
  4. 手机MMI体系结构及其实现
  5. 3dmax镜像后模型线条乱了_3dMax入门教程来啦!小白赶紧收藏!
  6. xmodmap使用指南
  7. threallocal详解
  8. Linux RMAP
  9. 使用CPU时间戳进行高精度计时
  10. 不看可惜!无需代码,小白都会的可视化大屏,领导不重用你都难
  11. show date and time in ubuntu console
  12. SaltStack 拉取和推送文件
  13. Python就是为了方便生活,比如看VIP电影
  14. 对计算机科学的总体认识,浅谈对计算机科学与技术的认识
  15. 数据库实验-- 更新语句
  16. Java实现杨辉三角形
  17. javafx实现简单的计时器
  18. HTML5代码雨程序
  19. php 图片木马,php图片木马实现原理
  20. 神经网络中的filter(滤波器)和kernel(内核)的概念

热门文章

  1. OpenCV 的人脸detect及PCA匹配
  2. 利用决策树学习基金持仓并识别公司风格类型
  3. K210实现人脸识别(附代码解读)
  4. img图片转码base64使用(简单版)
  5. AdvancedMaterials IF=32 | 华科朱艳红/张燕/杨祥良构建工程菌实现近红外纳米光基因激活的癌症免疫治疗...
  6. 北京 matlab,北京交通大学Matlab.ppt
  7. devops工具-Ansible基础
  8. 20杭电计算机专业考研科目,20杭电计算机菜鸡跨考经验贴
  9. sketchup技巧分享-如何利用组件创建无缝图案峥
  10. [Eureka集群] 在linux上部署SpringCloudEureka的集群服务端(Dalston.SR5版本)