吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3799|回复: 41
收起左侧

[Python 转载] python彼岸桌面壁纸爬取

[复制链接]
yuluo829 发表于 2022-1-17 19:27

python桌面壁纸爬取

  • 鉴于本人对桌面壁纸的需求(看时间长了容易视觉疲劳),又不想在网上自己一个一个找,于是找了一个图片质量比较高的网站,全部下载下来,方便

    本程序只供学习使用,不得用于任何商业用途

    运行环境 :
    python 3.8.7
    win11
    (只爬取了每种类型图片的第一页,20张)

# -*- coding = utf-8 -*-
# @Time : 2022/1/16 22:09
# @AuThor : yuluo
# @file : netbian.py
# Software : gvim

import time
import requests
import re
import os
from bs4 import BeautifulSoup

def main():
    url = 'https://pic.netbian.com/'
    path = '要保存的目录路径'
    response = askUrl(url)
    url_list = getDataUrlList(response, url)
    tupian_html = findEachImagesHtml(url_list, url)
    tupian_url = findEachImagesUrl(tupian_html, url)
    saveData(tupian_url, path)

def askUrl(url):
    # 准备Cookie, User-Agent
    proxies = {
        "http": None,
        "https": None
    }
    header = {
        "Cookie": "cookie ",

        "User-Agent": "User-Agent"
    }

    # 登录
    # print("开始发送请求……")
    response = requests.get(url=url, headers=header, proxies=proxies)
    # 解决乱码
    response.encoding = 'GBK'
    # print(response.status_code)

    return response

def getDataUrlList(response, url):
    # print("图片网址开始获取……")
    imgList = []
    # print(response.text)
    soup = str(BeautifulSoup(response.text, 'lxml'))
    # 使用正则寻找图片网址后缀
    findImageKindUrl = re.compile('a href="/(.*?)" title="4K')
    imageKindUrl = findImageKindUrl.findall(soup)
    # 对列表去重
    imageKindUrl = list(set(imageKindUrl))
    # print(imageKindUrl)

    # 字符串拼接
    for imgUrl in imageKindUrl:
        imgList.append(url + imgUrl)

    # for i in imgList:
    #     print(i)

    return imgList

def findEachImagesHtml(img_list, url):
    # print("开始获取每种图片类型的具体图片url……")
    img_url = []
    for img_type_url in img_list:
        # print(img_type_url)
        response = askUrl(img_type_url)
        # print(response.text)
        findImgUrl = re.compile('f="/tupian/(.*?).html" target')
        each_img_type_url_number = findImgUrl.findall(str(BeautifulSoup(response.text, 'lxml')))
        # print(each_img_type_url_number)
        each_img_type_url = []
        for i in each_img_type_url_number:
            # print(i)
            each_img_type_url.append(url + 'tupian/' + i + '.html')
        # print(each_img_type_url)

        # 进行列表之间的拼接
        img_url = img_url + each_img_type_url

    # for i in img_url:
    #     print(i)

    return img_url

def findEachImagesUrl(tupian_html, url):
    # 定义一个存放图片网址的集合
    pic_url = []
    for i in tupian_html:
        # print(askUrl(i).text)

        findPicUrl = re.compile('img src="/uploads/allimg/(.*?).jpg" data-pic')
        picUrl_number = findPicUrl.findall(str(askUrl(i).text))
        # print(picUrl_number)

        # 网址拼接
        for j in picUrl_number:
            # print(i)
            pic_url.append(url + 'uploads/allimg/' + j + '.jpg')
            # print(pic_url)

    # for i in pic_url:
    #     print(i)

    return pic_url

def saveData(tupian_url, path):
    makeFolder(path)
    # 计数器
    count = 0
    for img_url in tupian_url:
        img_name = img_url.split("/")[-1]  # 拿到url中的最后一个/后面的内容
        with open(path + img_name, mode="wb") as f:
            f.write(askUrl(img_url).content)  # 图片内容写入到文件

        count = count + 1

        # 睡一秒,防止服务器发现
        time.sleep(1)

    print("下载数量:%d" % count)

def makeFolder(path):
    folder = os.path.exists(path)
    if not folder:
        os.makedirs(path)
        print("目录创建成功!")
    else:
        print("目录已经存在!")

if __name__ == '__main__':
    begin_time = time.time()
    print("下载开始……,开始时间:%f" % begin_time)
    main()
    end_time = time.time()
    print("下载完成,结束时间 %f" % end_time)
    run_time = end_time - begin_time
    print(run_time)

免费评分

参与人数 5吾爱币 +4 热心值 +5 收起 理由
MengLiJiuXiang + 1 太厉害了
mmlinkme + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
houxiaobai + 1 + 1 用心讨论,共获提升!
yjn866y + 1 + 1 我很赞同!
liu2514 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

playermicro 发表于 2022-1-17 19:35
感谢大佬
yjn866y 发表于 2022-1-18 08:06
[Python] 纯文本查看 复制代码
if __name__ == '__main__':
    begin_time = time.time()
    print("下载开始……,开始时间:%f" % begin_time)
    main()
    end_time = time.time()
    print("下载完成,结束时间 %f" % end_time)
    run_time = end_time - begin_time
    print(f"下载用时{run_time}")
vethenc 发表于 2022-1-17 20:36
沧海轻舟 发表于 2022-1-17 20:49
感谢分享
血情 发表于 2022-1-17 21:48
如何运行您的代码?
starwar 发表于 2022-1-17 22:05
爬的不是原图
17798 发表于 2022-1-17 22:13
血情 发表于 2022-1-17 21:48
如何运行您的代码?

楼主的代码用python运行就好啦?  PyCharm 或者VS Code
微微小坏 发表于 2022-1-17 22:42
自己下载需要修改什么吗, name 'BeautifulSoup' is not defined啥都看不懂。
jamessteed 发表于 2022-1-17 22:49
感谢无私分享。先测试一下
xiaoxi2011 发表于 2022-1-18 01:40
学习了,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-12 19:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表