吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5870|回复: 18
收起左侧

[Python 转载] 初学Python之爬取4k高清壁纸,会有你们想要的图片吗?你猜!

  [复制链接]
lifeixue 发表于 2021-5-1 14:12
继前一个帖子后,又写了一个图片爬取的程序。前贴(爬取豆瓣Top250):https://www.52pojie.cn/thread-1431033-1-1.html

这次爬取的是收藏已久的4K高清壁纸网站,虽是免费的但一张张去下载还是挺麻烦的,于是学以致用,盘它!
话不多说,继续分享成果!(代码很烂,心里很清楚
[Python] 纯文本查看 复制代码
# 添加模块
import urllib.request
import re
from bs4 import BeautifulSoup
import os
import requests


def main():
    baseurl = "https://mobile.alphacoders.com/by-device/634/iPhone-12-Wallpapers?page="  # 爬取网址
    askURL(baseurl)  # 抓取网页
    pic = getImg(baseurl)  # 获取图片
    saveData(pic)  # 保存图片


findImg = re.compile(r'<img.*src="(.*?)"', re.S)  # 图片规则


# 1. 爬取网页
def askURL(baseurl):
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"
    }  # 模拟浏览器访问
    request = urllib.request.Request(url=baseurl, headers=head)  # 封装
    response = urllib.request.urlopen(request)  # 请求
    html = response.read().decode("utf-8")  # 得到整个网页源代码
    # print(html)  # 测试
    return html


# 2. 获取图片数据
def getImg(baseurl):
    datalist = []  # 定义空列表,用于保存爬取到的图片数据
    for i in range(0, 74):  # 一共74页(想获取多少写多少页)
        url = baseurl + str(i)  # 拼接字符串(页码)
        gain = askURL(url)  # 调用函数,让每次请求都模拟浏览器访问
        soup = BeautifulSoup(gain, "html.parser")  # 解析器解析网页
        for item in soup.find_all("img", class_="img-responsive"):  # 截取网页源代码
            # print(item)
            item = str(item)  # 转化成字符串
            img = re.findall(findImg, item)  # 使用定义好的图片规则进行匹配(得到图片链接)
            # print(img)  # 这里获取的只是小图片,可我们想获取高清原图
            if len(img) != 0:  # 条件判断
                img = img[0].replace("thumb-", "")  # 根据对比原图链接,发现只要去掉 thumb- 就可以得到原图
            else:
                img = ""  # 留空
            # print(img)  # 获取到高清原图
            datalist.append(img)  # 追加数据到列表
    return datalist


# 3.下载图片
def saveData(pic):
    os.makedirs('./image/', exist_ok=True)  # 创建文件夹
    img_name = '图片'  # 图片名称
    for a, i in enumerate(pic):  # a为索引号,i是遍历图片链接
        r = requests.get(i)
        # ./image为保存路径,图片名加索引号的方法给每张图片命名,图片格式为.jpg
        title = './image/' + img_name + str(a+1) + '.jpg'
        with open(title, 'wb') as f:  # 下载图片
            f.write(r.content)
            print("图片" + str(a+1) + '\t下载成功')


if __name__ == '__main__':
    main()


为了能够和初学Python的小伙伴们共同进步,代码每一行都写了注释
# 爬取对象:4K壁纸
# 存储方式:保存电脑本地
# 使用了5个模块(不能运行的话,需要安装下面的模块哦)
import urllib.request
import re
from bs4 import BeautifulSoup   # bs4模块
import os
import requests
源码: 爬取4K壁纸.zip (1.7 KB, 下载次数: 158)

免费评分

参与人数 9吾爱币 +8 热心值 +8 收起 理由
seeker2021 + 1 我很赞同!
Cmocmm + 1 我很赞同!
Li520pj + 1 + 1 就喜欢带注释的,代码!点赞
叫我小王叔叔 + 1 + 1 就喜欢带注释的,代码!点赞
xuxin + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
tianbian + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Agcxy + 1 + 1 热心回复!
bob3274 + 1 + 1 我很赞同!
hack88888888 + 1 + 1 我很赞同!

查看全部评分

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

double07 发表于 2021-5-2 12:38
有个正则疑问:r'<img.*src="(.*?)"',有()与无(),获取的内容一样,有必要加()??
好久丿好酒 发表于 2021-5-1 14:19
杜创 发表于 2021-5-1 14:52
abigmiu 发表于 2021-5-1 15:34
不错, 等我再学一会 爬淘宝
bob3274 发表于 2021-5-1 17:35
谢谢分享,来学习下
Agcxy 发表于 2021-5-1 17:43
加油!我刚开始学
友情天 发表于 2021-5-1 17:58
非常详细的注释 感谢了
bloodwolf4177 发表于 2021-5-1 18:02
哟喂,就喜欢楼主这样的技术福利
Anyling 发表于 2021-5-2 11:15
非常详细的注释 感谢了!!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 05:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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