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

发布时间:2023年12月27日

专栏导读

🔥🔥本文已收录于《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】稍微了解一下,并且自己会找元素,只要会找元素基本没什么难度

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

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

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

文章来源:https://blog.csdn.net/weixin_42636075/article/details/135001508
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。