Python爬虫实战(基础篇)—10获取故宫博物院—故宫壁纸(附完整代码)

专栏导读

🔥🔥本文已收录于《Python基础篇爬虫》

🉑🉑本专栏专门针对于有爬虫基础准备的一套基础教学,轻松掌握Python爬虫,欢迎各位同学订阅,专栏订阅地址:点我直达

🤞🤞此外如果您已工作,如需利用Python解决办公中常见的问题,欢迎订阅《Python办公自动化》专栏,订阅地址:点我直达

🔺🔺此外《Python30天从入门到熟练》专栏已上线,欢迎大家订阅,订阅地址:点我直达

背景

  • 由于我是一个壁纸爱好者兼故宫文化爱好者,我的电脑专门设置了一个文件夹用来存放壁纸,并且实行每小时随机切换壁纸图片,壁纸图片的更换也让我的心情非常的开心,但是我只有几张壁纸,为此我特地向一位朋友请教,他说可以利用Python爬虫技术快速获取某个网址的许多壁纸,甚至是嘻嘻嘻图片都可以,为此我发了2.5元红包以此来学习一下!,下面是我学习的成果!

1、准备网址

在这里插入图片描述

2、分析

  • 我们发现每一张壁纸的链接存放在 a标签中,属性为:target="_blank"

在这里插入图片描述

  • 我们发现每直接用此链接下载话的,图片大小默认为:1280 x 800

在这里插入图片描述

3、代码请求+初步清洗(lxml+xpath)

  • 链接的xpath: //div[@class="pic"]//a[@target="_blank"]/img/@src

  • 标题的xpath: //div[@class="pic"]//a[@target="_blank"]/img/@title

在这里插入图片描述

代码

# -*- coding: UTF-8 -*-
'''
@Project :测试
@File    :main.py
@IDE     :PyCharm
@Author  :一晌小贪欢
@Date    :2023/12/27 13:27
'''
import requests
from lxml import etree


url = 'https://www.dpm.org.cn/lights/royal.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'Host': 'www.dpm.org.cn',
}

res_data = requests.get(url=url,headers=headers)
res_data.encoding='utf-8'
# print(res_data.text)

tree = etree.HTML(res_data.text)
picture_url = tree.xpath('//div[@class="pic"]//a[@target="_blank"]/img')
# print(picture_url)
for i in picture_url:
    print(f"链接:{i.xpath('@src')},名称:{i.xpath('@title')}")

4、下载图片

在这里插入图片描述

代码

# -*- coding: UTF-8 -*-
'''
@Project :测试
@File    :main.py
@IDE     :PyCharm
@Author  :一晌小贪欢
@Date    :2023/12/27 13:27
'''
import requests
from lxml import etree


url = 'https://www.dpm.org.cn/lights/royal.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'Host': 'www.dpm.org.cn',
}

res_data = requests.get(url=url,headers=headers)
res_data.encoding='utf-8'
# print(res_data.text)

tree = etree.HTML(res_data.text)
picture_url = tree.xpath('//div[@class="pic"]//a[@target="_blank"]/img')
# print(picture_url)
for i in picture_url:
    print(f"链接:{i.xpath('@src')[0]},名称:{i.xpath('@title')[0]}")
    reponse = requests.get(i.xpath('@src')[0])
    data = reponse.content
    with open("D:\\照片\\" + i.xpath('@title')[0] + ".jpg", "wb") as f:
        f.write(data)
    print(i.xpath('@title')[0] + ".jpg",'保存成功!')

5、进阶—多页下载

  • 我们发现翻页的时候,URL会有一定的规律

  • https://www.dpm.org.cn/lights/royal/p/页数.html?0.7358849335611111

在这里插入图片描述

  • 那第一页就是 https://www.dpm.org.cn/lights/royal/p/1.html

  • 那第一页就是 https://www.dpm.org.cn/lights/royal/p/2.html

  • 那第一页就是 https://www.dpm.org.cn/lights/royal/p/3.html

  • 。。。。。。
  • 。。。。。。以此类推
  • 测试5页

注意事项:

  • 有些图片需加上:https://www.dpm.org.cn/

在这里插入图片描述

在这里插入图片描述

完整代码

# -*- coding: UTF-8 -*-
'''
@Project :测试
@File    :main.py
@IDE     :PyCharm
@Author  :一晌小贪欢
@Date    :2023/12/27 13:27
'''
import requests
from lxml import etree

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'Host': 'www.dpm.org.cn',
}

for page in range(1,6):
    url = f'https://www.dpm.org.cn/lights/royal/p/{page}.html'
    res_data = requests.get(url=url,headers=headers)
    res_data.encoding='utf-8'
    # print(res_data.text)

    tree = etree.HTML(res_data.text)
    picture_url = tree.xpath('//div[@class="pic"]//a[@target="_blank"]/img')
    # print(picture_url)
    for i in picture_url:
        print(f"链接:{i.xpath('@src')[0]},名称:{i.xpath('@title')[0]}")
        try:
            reponse = requests.get(i.xpath('@src')[0])
            data = reponse.content
        except:
            reponse = requests.get('https://www.dpm.org.cn'+i.xpath('@src')[0])
            data = reponse.content
        with open("D:\\照片\\" + i.xpath('@title')[0] + ".jpg", "wb") as f:
            f.write(data)
        print(i.xpath('@title')[0] + ".jpg",'保存成功!')

总结

  • 今天的代码和上一节课的代码类似,都是简单的GET请求,并且返回的是html页面,我们利用【lxml】+【xpath】提取数据

  • 这里需要大家对【xpath】稍微了解一下,并且自己会找元素,只要会找元素基本没什么难度

  • 希望大家多多点赞,多多收藏,多多关注

  • 本专栏持续更新中。。。

  • 点个收藏+关注拜托了!!!

要完成这个任务,你可以使用Python中的requests库来获取网页的源码,并使用BeautifulSoup库来解析HTML内容,以便找到图片链接。然后,使用requests库下载这些图片并保存到本地。以下是完成这个任务可能的步骤和代码示例: 1. 首先安装所需的库,如果你还没有安装它们,可以使用pip命令安装: ``` pip install requests pip install beautifulsoup4 ``` 2. 使用requests库获取网页源码,并保存到本地文件: ```python import requests url = 'https://www.dpm.org.cn/lights/royal/p/81.html' response = requests.get(url) if response.status_code == 200: with open('gugong/index.html', 'wb') as file: file.write(response.content) ``` 3. 解析网页源码,找到图片链接。这里假设图片链接是直接从img标签的src属性获取的,实际情况可能需要根据网页的具体结构进行调整: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.content, 'html.parser') img_tags = soup.find_all('img', limit=5) # 假设我们只找前5个图片标签 img_urls = [img['src'] for img in img_tags if 'src' in img.attrs] ``` 4. 下载并保存图片: ```python for i, img_url in enumerate(img_urls): img_response = requests.get(img_url) if img_response.status_code == 200: with open(f'gugong/{i+1}.jpg', 'wb') as file: file.write(img_response.content) ``` 请注意,上述代码只是一个基础的示例,实际使用时可能需要处理一些特殊情况,例如相对路径的图片URL需要转换为绝对路径,以及网络请求失败时的错误处理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一晌小贪欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值