3.0 综合项目实践 python爬取pexels高清壁纸

description

本次大作业分组(1-2人)完成一个应用程序,不限于网络爬虫与信息提取、Python游戏、云端系统、数据分析与展示等领域。请每位同学在线完成大作业文章(文档),每份文档应用包含小组共同的工作和个人工作。其中,共同工作应包含内容:整体设计目标、分工说明,代码总体框架、第三方库介绍(下载地址)、软件环境配置及运行指导说明、软件运行截图、完成度自我评价等;个人工作应包含内容:自已完成的关键代码及说明、效果和结论。请每位同学在在线文章页面上传小组源代码工程、录制视频(尽量控制30秒内)、PPT文件压缩包(小组内每位同学的附件大小应一样),并命名为“姓名学号.zip”,如***10301047.zip。压缩包请上传至北理网盘http://pan.bit.edu.cn, 搜索群组“软件工程基础训练”。

code

  1. 我的大作业最终决定选择学习一下爬虫,然后利用python语言编写爬虫程序自动下载图片素材网站pexels中的高清壁纸

  2. 首先打开网页https://www.pexels.com/

  3. 输入关键词wallpaper,点击搜索:
    在这里插入图片描述

  4. 按下键盘上的F12,进入开发者工具,点击下图中菜单:
    在这里插入图片描述

  5. 刷新网页,观察
    在这里插入图片描述

  6. 很明显我们已经发现了其中的奥秘,选择其中一个在这里插入图片描述
    选中复制RequestURL,精简一下,就可以得到

https://www.pexels.com/search/4k%20wallpaper/?page=2

后面page的值决定了网页加载的数量
好了,我们已经得到url了

  1. 查看源代码,其中有不同清晰度的图片,我们找到清晰度最高的在这里插入图片描述
  2. 那么我们现在要来获取源代码,然后使用正则表达式匹配得到所有的下载地址
  3. 因为直接使用request.get()无法的到经过服务器渲染的网页源代码,所以我们使用selenium这个库,贴心的链接
    获取
  4. 接下来的工作就很简单了,看代码一目了然,由于我使用的python解释器是Anaconda3,使用到的库我都有,就没有安装,如果需要安装的话使用pip安装工具安装即可
'''
Author       : 鱼香肉丝没有鱼
Date         : 2021-11-19 23:37:46
LastEditors  : 鱼香肉丝没有鱼
LastEditTime : 2021-11-23 06:51:26
'''
'''
使用python语言编写爬虫程序,批量自动下载免费图片素材网站pexels中高清壁纸
'''

# 需要使用的库都在下面了
# 我使用的解释器是Anaconda3,不需要另外安装

import requests
import re
import time
from selenium import webdriver

# 增加计时功能
start_time = time.time()
# 网址示例
# view-source:https://www.pexels.com/search/4k%20wallpaper/?page=6
urls = [
    "https://www.pexels.com/search/4k%20wallpaper/?page={}".format(str(i)) for i in range(3, 7)]

# UAC伪装,防止被服务器识别
headers = {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
ua = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}

# 存储下载地址的列表,初始化为空
list = []

# 预编译正则表达式
obj = re.compile(r'.*?data-big-src="(?P<src>.*?)"', re.S)

# 遍历每一个网址
for url in urls:
    try:
        options = webdriver.ChromeOptions()
        options.add_experimental_option('excludeSwitches', ['enable-logging'])
        web = webdriver.Chrome(options=options)
        # 如果不使用上面三行代码直接使用下面这行会报错
        # web = webdriver.Chrome()
        web.get(url)
        time.sleep(8)  # 让浏览器休息8s,防止网速太慢延迟高造成错误
        # 由于这个动态加载的网页,使用selenium获取网页源代码
        wb_resp = web.page_source  # 返回源代码
        # 把源代码写入文件保存
        with open(r"C:\Users\Admin\Desktop\VScode\python\myhtml.html", mode="w", encoding='utf-8') as fp:
            fp.write(wb_resp)
        time.sleep(1)
        # 打开的网页要及时关闭
        web.close()
        # 使用正则表达式在we_resp中匹配找到下载地址,并且返回一个可以迭代的对象
        download_link = obj.finditer(wb_resp)
        # 遍历这个迭代对象
        for it in download_link:
            tmpsrc = it.group("src")
            # print(tmpsrc)#打印下载地址
            # 把下载地址存储到列表中
            list.append(tmpsrc)
        # break#测试使用
    except ConnectionError:
        print("pass disappoint")

# 遍历所有的下载地址,下载每一张图片
for link in list:
    # 其中的一个下载地址
    # https://images.pexels.com/photos/1580271/pexels-photo-1580271.jpeg?auto=compress&amp;cs=tinysrgb&amp;h=750&amp;w=1260
    # 使用get方式来下载图片
    image_resp = requests.get(link, headers=ua)
    # 为了避免命名重复导致报错,使用其中的一直在变化的一串数字来作为文件名
    tmp_image_name = link.split("?")[0]
    image_name = tmp_image_name.split("/")[-1]
    # 创建Bytes形式的图片文件,把数据写入图片文件中,保存在img文件中,打开方式为二进制写模式
    with open(r"C:\Users\Admin\Desktop\VScode\python\img\\"+image_name, mode="wb") as f:
        f.write(image_resp.content)
    # 关闭
    image_resp.close()
    time.sleep(1)

# 结束时间
end_time = time.time()
# 持续时间 = 结束时间-开始时间
total_time = end_time - start_time
# 输出持续时间
print(total_time)

# 1319.1924061775208

程序运行时间:

1319.1924061775208

程序运行结束一共下载了151张图片
在这里插入图片描述
在这里插入图片描述


summary

  1. re正则表达式常用表达 https://blog.csdn.net/qq_41680771/article/details/121484908
  2. 使用selenium库时我使用的是chrome浏览器,记得要下载对应的浏览器驱动,还要下载和浏览器版本相同的驱动
    驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/
    在这里插入图片描述
    下载错了没有用哦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值