python壁纸4k_Python爬取4k高清动漫壁纸
[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)
}
// 找到抓取项
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高清动漫壁纸相关推荐
- Python爬虫从入门到精通:(9)数据解析_xpath解析2_爬取4K高清动漫图片_Python涛哥
使用xpath爬取4K高清动漫图片名称和图片数据 爬取当前页: # 创建文件夹 存储图片 dirName = 'GirlsLib' if not os.path.exists(dirName):os. ...
- python爬取4k高清壁纸(多线程版)
刚学了多线程,于是把上次写的博客拿出来进行改写, 原文链接:python爬取4k高清壁纸(再也不怕没有壁纸了) 爬取过程已经在上一次写过了,可以点击原文链接查看. 废话不多说,直接上多线程代码: im ...
- python爬取4K超清画质手机壁纸,壁纸这东西当然是越多越好啦~
前言 手机壁纸这东西大家都很熟悉吧,相信不论谁打开手机都希望自己的壁纸是自己喜欢的图片, 但是一张壁纸用久了就会想换一张新鲜感满满的图(当然排除情有独钟的), 但挑选图片的时间总是恒久的,有时长时间的 ...
- python手机壁纸超清_详解Python静态网页爬取获取高清壁纸
前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...
- Python 网络爬虫:爬取4K高清美图
爬取4K高清美图 这篇爬虫主要是用来爬取网站高清4K图片,这也是笔者学初学爬虫的时候最先写一个的爬虫脚本,现在回过头来重新梳理一下,也算是对从前知识的一个总结,希望对大家有所帮助! 文章目录 爬取4K ...
- 全网最细------爬取4k高清大图
本次案例将教大家免费爬取4k高清大图,即使你是爬虫新手,也可以食用本次文章实现你的免费下载梦,话不多说,先看效果 网站视图: 看到这些图片你是否怦然心动,跟着我一起看下去. 一.思路分析 首先最基本的 ...
- python利用bs4爬取外国高清图片网站
python利用bs4爬取外国高清图片网站 爬取高清图片 爬取高清图片 import re import requests from bs4 import BeautifulSoup import o ...
- 多线程爬取4k超高清美图壁纸
多线程爬取4k美图壁纸 前言:看完此篇文章你可以更加深入的了解多线程的使用,并且最重要的你能够下载你自己想要的超高清4k壁纸 爬取结果: 1. 分析网站 要爬取的url :http://pic.net ...
- python爬取4k高清壁纸(再也不怕没有壁纸了)
今天突然想换壁纸,在网上找了一圈没有找到满意的,正好学了爬虫,于是我就想把它们全都爬取下来,慢慢挑选. 这次爬取的目标是:彼岸图网动漫壁纸 接下来,我将详细讲解爬取过程: 首先点开网站,右键–检查 观 ...
最新文章
- Spring MVC入门示例教程--静态页面跳转
- 2019ICPC(银川) - Function!(数论+数学分块)
- [luoguP4705]玩游戏
- 手机MMI体系结构及其实现
- 3dmax镜像后模型线条乱了_3dMax入门教程来啦!小白赶紧收藏!
- xmodmap使用指南
- threallocal详解
- Linux RMAP
- 使用CPU时间戳进行高精度计时
- 不看可惜!无需代码,小白都会的可视化大屏,领导不重用你都难
- show date and time in ubuntu console
- SaltStack 拉取和推送文件
- Python就是为了方便生活,比如看VIP电影
- 对计算机科学的总体认识,浅谈对计算机科学与技术的认识
- 数据库实验-- 更新语句
- Java实现杨辉三角形
- javafx实现简单的计时器
- HTML5代码雨程序
- php 图片木马,php图片木马实现原理
- 神经网络中的filter(滤波器)和kernel(内核)的概念
热门文章
- OpenCV 的人脸detect及PCA匹配
- 利用决策树学习基金持仓并识别公司风格类型
- K210实现人脸识别(附代码解读)
- img图片转码base64使用(简单版)
- AdvancedMaterials IF=32 | 华科朱艳红/张燕/杨祥良构建工程菌实现近红外纳米光基因激活的癌症免疫治疗...
- 北京 matlab,北京交通大学Matlab.ppt
- devops工具-Ansible基础
- 20杭电计算机专业考研科目,20杭电计算机菜鸡跨考经验贴
- sketchup技巧分享-如何利用组件创建无缝图案峥
- [Eureka集群] 在linux上部署SpringCloudEureka的集群服务端(Dalston.SR5版本)