#测试网址:https://www.ivsky.com/bizhi/
#需要安装的库:requests,bs4
#本人是个强迫症患者,为了美观添加数个print(),其并没有实际意义,若是不爽删去即可。
 
import requests,re,os
from bs4 import BeautifulSoup
from time import sleep
from random import uniform
 
#网址解析
def url_open(url):
    headers= {}
    headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
    headers["Referer"] = "https://www.ivsky.com/bizhi/"
    html = requests.get(url,headers=headers).text
 
    return html
 
 
#获取全部主题图片链接
def get_url_all():
    print("正在收集整理壁纸主题网址,请稍候.....")
    print()
    theme_url_list = []
    theme_title_list = []
    data = []
    page_totle = 100 #壁纸主题共有100页
    #逐页收集主题URL
    for page in range(1,page_totle+1):
        url = "https://www.ivsky.com/bizhi/index_{}.html".format(page)
        html = url_open(url)
        soup = BeautifulSoup(html,"html.parser")
        url_all = soup.find_all("div",class_="il_img")
        for each in url_all:
            theme_title = each.a["title"]
            theme_title_list.append(theme_title)
            theme_url = "https://www.ivsky.com" + each.a["href"]
            theme_url_list.append(theme_url)
        #将数据打包 以便能够将两个数据一起返回
        data.append(theme_url_list)
        data.append(theme_title_list)
        break #减少调试运行时间使用 若要获取全部主题链接则删除此处即可
 
    theme_totle = len(data[0]) #计算主题数目
    print("壁纸网址收集结束,共收集%d个主题,准备进行图片下载....."%theme_totle)
    sleep(1)  #走个形式而已
 
    return data
 
 
def save_img(img_url_list,theme_name,work_path):
    #更改图片保存路径(分主题保存)
    save_path = work_path + r"\%s" % theme_name
    if os.path.exists(save_path) == True:
        os.chdir(save_path)
    else:
        os.mkdir(save_path)
        os.chdir(save_path)
 
    num = 0 #当前任务图片下载计数
    for img_url in img_url_list:
        num += 1
        print("正在下载主题“%s”第%d张图片" % (theme_name, num))
        headers = {}
        headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
        content = requests.get(img_url, headers=headers).content
        with open("%d.jpg" % num, "wb") as f:
            f.write(content)
 
        sleep_time = uniform(0.18,0.37) #随机休眠 减少服务器压力 (真有诚意调大点即可)
        sleep(sleep_time)
 
 
def get_img(data):
    img_root_url = "https://img.ivsky.com/img/bizhi/pre/"
    num_1 = -1  # 标题索引 后面用于索引标题
    work_path = os.getcwd()
    num_2 = 0 #统计图片总张数
    for theme_url in data[0]:
        #print(theme_url)
        num_1 += 1
        theme_name_temp = data[1][num_1] #获取对应的主题名称
        img_url_list = [] #用于存储单个主题的图片下载链接
 
        #去掉(x张)字眼  (强迫症患者)
        p_theme_name = r'(.+)[(]\d+?张[)]'
        theme_name = re.findall(p_theme_name,theme_name_temp)[0]
 
        print()
        print("正在下载主题:%s"%theme_name)
        print()
 
        #每个页面16张图片 若主题图片数目大于16张图片则存在多个页面.....
        p_img_num = r'.+[(](\d+?)张[)]'
        img_num = int(re.findall(p_img_num,theme_name_temp)[0])
        if img_num / 16 > img_num // 16:
            page_totle = img_num // 16 + 1
        else:
            page_totle = img_num / 16
 
        #获取全部图片链接
        if page_totle == 1:
            html = url_open(theme_url)
            soup = BeautifulSoup(html,"html.parser")
            soup_img_url = soup.find_all("div",class_="il_img")
            for each in soup_img_url:
                temp = each.img["src"].split("/t/")[1]
                img_url = img_root_url + temp
                img_url_list.append(img_url)
                num_2 += 1
        else:
            for page in range(1,page_totle+1):
                url = theme_url + "index_{}.html".format(page)
                html = url_open(url)
                soup = BeautifulSoup(html,"html.parser")
                soup_img_url = soup.find_all("div",class_="il_img")
                for each in soup_img_url:
                    temp = each.img["src"].split("/t/")[1]
                    img_url = img_root_url + temp
                    img_url_list.append(img_url)
                    num_2 += 1
 
        save_img(img_url_list, theme_name,work_path) #图片下载保存
    print()
    print("任务完成,共计下载图片%d张"%num_2)
 
 
def main():
    path = r'C:\Users\Administrator\Desktop\test'
    if os.getcwd() != path:
        if os.path.exists(path) == False:
            os.mkdir(path)
            os.chdir(path)
        else:
            os.chdir(path)
 
    data = get_url_all()
    get_img(data)
 
if __name__ == "__main__":
    main()

  

python爬取全站壁纸代码的更多相关文章

  1. Python爬取全站妹子图片,差点硬盘走火了!

    在这严寒的冬日,为了点燃我们的热情,今天小编可是给大家带来了偷偷收藏了很久的好东西.大家要注意点哈,我第一次使用的时候,大意导致差点坏了大事哈! 1.所需库安装 2.网站分析 首先打开妹子图的官网(m ...

  2. Python 爬取必应壁纸

    import re import os import requests from time import sleep headers = { "User-Agent": (&quo ...

  3. python 爬取王者荣耀高清壁纸

    代码地址如下:http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...

  4. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

  5. python爬取网页的通用代码框架

    python爬取网页的通用代码框架: def getHTMLText(url):#参数code缺省值为‘utf-8’(编码方式) try: r=requests.get(url,timeout=30) ...

  6. 如何用python爬虫从爬取一章小说到爬取全站小说

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  7. python爬取网站数据

    开学前接了一个任务,内容是从网上爬取特定属性的数据.正好之前学了python,练练手. 编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲 ...

  8. 使用python爬取MedSci上的期刊信息

    使用python爬取medsci上的期刊信息,通过设定条件,然后获取相应的期刊的的影响因子排名,期刊名称,英文全称和影响因子.主要过程如下: 首先,通过分析网站http://www.medsci.cn ...

  9. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...

随机推荐

  1. 你真的了解strtotime('X month')吗

    经常会有人被strtotime结合-1 month, +1 month, next month的时候搞得很困惑, 然后就会觉得这个函数有点不那么靠谱, 动不动就出问题. 用的时候就会很慌… 今天是20 ...

  2. 禁用Chrome的“请停用以开发者模式运行的扩展程序”提示

    1.前言 每次启动都会有一个烦人的“请停用以开发者模式运行的扩展程序”提示,这个提示有多烦人,接触过的人都知道,启动的时候它不立即提示,等过了几秒钟等你打开某个网页开始执行某些操作时它突然弹出来干扰你 ...

  3. PS:老权限登录Action 中 WebObjManager有问题,一直登录不起问题

    .ashx后面代码要多继承一个, IRequiresSessionState接口

  4. SWIG 3 中文手册——1. 前言

    目录 1 前言 1.1 引言 1.2 SWIG 版本 1.3 SWIG 许可证 1.4 SWIG 资源 1.5 前提要求 1.6 本手册的组织构成 1.7 如何避免阅读手册 1.8 向后兼容 1.9 ...

  5. ElasticSearch6.3.2 集群做节点冷(warm) 热(hot) 分离

    拿一个小规模的5节点ES集群做冷热分离尝试,它上面已经有60多个索引,有些索引按月.每月生成一个索引,随着数据的不断写入,历史数据(只需保留三个月数据,三个月之前的数据视为历史数据)越来越占磁盘空间和 ...

  6. Matlab中添加语音处理(voicebox)工具箱

    系统环境 win10+Matlab2017b 下载voicebox工具箱 官方下载:http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.zip ...

  7. 你知道Object中有哪些方法及其作用吗?

    一.引言二.Object方法详解1.1.registerNatives()1.2.getClass()1.2.1.反射三种方式:1.3.hashCode()1.4.equals()1.4.clone( ...

  8. jmeter 如何获取一小时之前的时间戳

    正确答案: ${__intSum(${__time(/1000,)},-3600,)} 如果还要显示毫秒 ${__longSum(${__time},-3600000,)}

  9. DNS:从零搭建公司内网DNS服务器

    写在前面的话 网上关于 DNS 的文章其实一搜索一大把,但是看别人的文档一般都会有个问题,乱,不讲究,全是 ctrl c + ctrl v,我个人是看不下去的.头皮发麻.所以决定自己来写写这方面的东西 ...

  10. asp.net webapi 随笔

    第一次写博客,文笔有限,记录下学习的过程 话不多说,直接开干 首先用vs2017建立一个空网站项目,然后只勾选api 项目建立后,如下结构 其中WebApiConfig类配置了路由相关信息 publi ...