lifeixue 发表于 2021-5-1 14:12

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

继前一个帖子后,又写了一个图片爬取的程序。前贴(爬取豆瓣Top250):https://www.52pojie.cn/thread-1431033-1-1.html

这次爬取的是收藏已久的4K高清壁纸网站,虽是免费的但一张张去下载还是挺麻烦的,于是学以致用,盘它!
话不多说,继续分享成果!(代码很烂,心里很清楚;www)
# 添加模块
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.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.requestimport refrom bs4 import BeautifulSoup   # bs4模块import osimport requests源码:

double07 发表于 2021-5-2 12:38

有个正则疑问:r'<img.*src="(.*?)"',有()与无(),获取的内容一样,有必要加()??

好久丿好酒 发表于 2021-5-1 14:19

盘它,我才开始学,希望能够学会像楼主这样

杜创 发表于 2021-5-1 14:52

这个怎么用11?

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

非常详细的注释 感谢了!!!!
页: [1] 2
查看完整版本: 初学Python之爬取4k高清壁纸,会有你们想要的图片吗?你猜!