专栏导读
🔥🔥本文已收录于《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
代码
'''
@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'
tree = etree.HTML(res_data.text)
picture_url = tree.xpath('//div[@class="pic"]//a[@target="_blank"]/img')
for i in picture_url:
print(f"链接:{i.xpath('@src')},名称:{i.xpath('@title')}")
4、下载图片
代码
'''
@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'
tree = etree.HTML(res_data.text)
picture_url = tree.xpath('//div[@class="pic"]//a[@target="_blank"]/img')
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/
完整代码
'''
@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'
tree = etree.HTML(res_data.text)
picture_url = tree.xpath('//div[@class="pic"]//a[@target="_blank"]/img')
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】稍微了解一下,并且自己会找元素,只要会找元素基本没什么难度
-
希望大家多多点赞,多多收藏,多多关注
-
本专栏持续更新中。。。
-
点个收藏+关注拜托了!!!