初学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源码: 有个正则疑问:r'<img.*src="(.*?)"',有()与无(),获取的内容一样,有必要加()?? 盘它,我才开始学,希望能够学会像楼主这样 这个怎么用11? 不错, 等我再学一会 爬淘宝 谢谢分享,来学习下 加油!我刚开始学 非常详细的注释 感谢了 哟喂,就喜欢楼主这样的技术福利 非常详细的注释 感谢了!!!!
页:
[1]
2