最近发现 老用Mac 自带的壁纸不爽,就用谷歌去找个可以免费下载壁纸的网站,手动下载图片比较慢,第一网站是国外的

第二,家里的网速差(不要装移动的)

绝对高清大图

直接上代码:

导入用到的库

获取网站源码的函数

返回列表页面的对应图片内容页的网址

返回相对应图片的url

图片下载函数

main函数

运行程序 计时

想要源码的同学 私密小编 回复 025

# -*- coding: utf-8 -*-
"""
@Time: 2018/1/15
@Author: songhao
@微信公众号: zeropython
@File: spider.py
"""
# 导入工程中用到的库文件
import re, os
import requests,time
from hashlib import md5
from multiprocessing import Pool


def get_html(url):
    """
    :param url: url
    :return:  html源码
    """
    r = requests.get(url)
    if r.status_code == 200:
        return r.text
    return None

def get_list_href(html):
    """
    :param html: html源码
    :return: 返回列表页面的对应图片内容页的网址
    """
    req = '<div class="related-title"><h2><a rel="nofollow" href="(.*?)" class="related-item-link">'
    hrefs = re.findall(req, html, re.S)
    # print(hrefs)
    if hrefs:
        return hrefs
    return None

def get_image_url(ht):
    """
    :param ht: image_url 内页源码
    :return: 返回相对应的url
    """
    req = '<div class="display-image full">\s*<img class="center" draggable="false" src="(.*?)"'
    img_href = re.search(req, ht, re.S)
    if img_href:
        return img_href.group(1)
    return None


def save_image(img_url):
    '''
        format 字符串格式化
        os.getcwd() 获取当前的目录
        md5(content).hexdigest() 生成md5
        os.path.exists检测文件是否存在
    '''
    ir = requests.get(img_url)
    if ir.status_code == 200:
        content = ir.content
        file_path = '{0}/{1}.{2}'.format(os.getcwd(), md5(content).hexdigest(), 'jpg')
        print(file_path)
        if not os.path.exists(file_path):
            with open(file_path, 'wb') as f:
                f.write(content)
                #二进制写入
    else:
        print("已存在")
    print("下载完成", img_url)


def main():

    first_url = "https://hdwallsource.com/?page=%d"
    # 构造url
    get_all_urls = [first_url%x for x in range(1,5)]
    all_imges = []
    for i in get_all_urls:
        ht = get_html(i)
        if ht:
            list_hrefs = get_list_href(ht)
            for list_href in list_hrefs:
                list_href_ht = get_html(list_href)
                imgurl = get_image_url(list_href_ht)
                print("put img url to all_imges", imgurl)
                all_imges.append(imgurl)
    # 创建 10个进程
    pool = Pool(processes=10)
    for imgurl in all_imges:
        print("开始下载", imgurl)
        pool.apply_async(save_image, args=(imgurl,))
        # save_image(imgurl)
    pool.close()
    pool.join()


if __name__ == '__main__':
    start = time.time()
    main()
    print('[info]耗时:%s' % (time.time() - start))

明天更新多线程下载图片,一起加油学习