继前一个帖子后,又写了一个图片爬取的程序。前贴(爬取豆瓣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 |