admin管理员组文章数量:1541710
图片信息丰富多彩,许多网站上都有大量精美的图片资源。有时候我们可能需要批量下载这些图片,而手动一个个下载显然效率太低。因此,编写一个简单的网站图片爬取程序可以帮助我们高效地获取所需的图片资源。
目标网站:
如果出现模块报错
进入控制台输入:建议使用国内镜像源
pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple
我大致罗列了以下几种国内镜像源:
清华大学
https://pypi.tuna.tsinghua.edu/simple
阿里云
https://mirrors.aliyun/pypi/simple/
豆瓣
https://pypi.douban/simple/
百度云
https://mirror.baidu/pypi/simple/
中科大
https://pypi.mirrors.ustc.edu/simple/
华为云
https://mirrors.huaweicloud/repository/pypi/simple/
腾讯云
https://mirrors.cloud.tencent/pypi/simple/
效果图:
代码详解:
-
get_imgurl_list(url, imgurl_list)
函数用来获取指定页面中的图片链接,并将这些链接存储在imgurl_list
列表中。- 使用
requests.get(url=url, headers=headers)
发起请求获取页面内容。 - 使用
etree.HTML(html_str)
将页面内容转换为 etree 对象,方便后续使用 XPath 进行解析。 - 通过 XPath 定位到图片链接,并添加到
imgurl_list
中。
- 使用
-
get_down_img(imgurl_list)
函数用来下载图片到本地存储。- 创建名为 “美女” 的文件夹用于存储下载的图片。
- 遍历
imgurl_list
中的图片链接,逐个下载图片并保存到本地文件夹中。
-
在
if __name__ == '__main__':
部分:- 设置需要爬取的页数
page_number = 10
。 - 循环构建每一页的链接,如
https://www.moyublog/95-2-2-{i}.html
。 - 调用
get_imgurl_list()
函数获取图片链接。 - 调用
get_down_img()
函数下载图片到本地。
- 设置需要爬取的页数
代码流程:
- 导入必要的库和模块:
import requests # 用于发送HTTP请求
from lxml import etree # 用于解析HTML页面
import time # 用于控制爬取速度
import os # 用于文件操作
- 定义函数
get_imgurl_list(url, imgurl_list)
用于获取图片链接:
def get_imgurl_list(url, imgurl_list):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
html_str = response.text
html_data = etree.HTML(html_str)
li_list = html_data.xpath("//ul[@class='clearfix']/li")
for li in li_list:
imgurl = li.xpath(".//a/img/@data-original")[0]
imgurl_list.append(imgurl)
- 发送GET请求获取网页内容。
- 将网页内容转换为etree对象以便后续使用xpath进行解析。
- 使用xpath定位所有的li标签,并遍历每个li标签获取图片链接,将链接添加到
imgurl_list
列表中。
- 定义函数
get_down_img(imgurl_list)
用于下载图片:
def get_down_img(imgurl_list):
os.mkdir("美女")
n = 0
for img_url in imgurl_list:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
img_data = requests.get(url=img_url, headers=headers).content
img_path = './美女/' + str(n) + '.jpg'
with open(img_path, 'wb') as f:
f.write(img_data)
n += 1
- 创建名为"美女"的目录用于存放下载的图片。
- 遍历图片链接列表,逐个发送GET请求下载图片数据,并将图片写入本地文件。每张图片以数字编号命名。
- 主程序部分:
if __name__ == '__main__':
page_number = 10 # 爬取页数
imgurl_list = [] # 存放图片链接
for i in range(0, page_number + 1):
url = f'https://www.moyublog/95-2-2-{i}.html'
print(url)
get_imgurl_list(url, imgurl_list)
get_down_img(imgurl_list)
- 设定要爬取的页数
page_number
为10。- 初始化存放图片链接的列表
imgurl_list
。- 循环构建每一页的链接并调用
get_imgurl_list()
函数获取图片链接。- 最后调用
get_down_img()
函数下载图片到本地"美女"文件夹。
为什么我们在获取数据的过程中需要用到IP池
应对反爬虫策略:许多网站会采取反爬虫措施,限制单个IP的访问频率或次数。通过使用数据获取服务,可以轮换多IP来模仿多个用户访问,降低被封禁的风险。
保证稳定性:有些数据获取服务可能存在不稳定的情况,包括IP连接速度慢、IP被找到等问题。通过建立数据获取服务,可以预先准备多个可用的IP地址,确保程序在某个IP不可用时可以快速切换到其他可用IP,提高爬虫程序的稳定性。
提高访问速度:IP池中的多个IP地址可以并发使用,实现多线程或异步请求,从而加快数据获取速度。通过在数据获取服务中保持一定数量的可用IP地址,可以实现更快速的数据抓取。
应对封禁风险:有些网站会根据某些特定的IP地址或IP段进行封禁,如果整个IP池中的IP都被封禁,可以及时更新IP池中的IP地址,避免影响爬虫程序的正常运行。
降低被识别的风险:当爬虫程序使用固定的IP地址进行访问时,容易被网站识别出是爬虫行为。
完整代码:
import requests # python基础爬虫库
from lxml import etree # 可以将网页转换为Elements对象
import time # 防止爬取过快可以睡眠一秒
import os
def get_imgurl_list(url, imgurl_list):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
# 发送请求
response = requests.get(url=url, headers=headers)
# 获取网页源码
html_str = response.text
# 将html字符串转换为etree对象方便后面使用xpath进行解析
html_data = etree.HTML(html_str)
# 利用xpath取到所有的li标签
li_list = html_data.xpath("//ul[@class='clearfix']/li")
# 打印一下li标签个数看是否和一页的电影个数对得上
print(len(li_list)) # 输出20,没有问题
for li in li_list:
imgurl = li.xpath(".//a/img/@data-original")[0]
print(imgurl)
# 写入列表
imgurl_list.append(imgurl)
def get_down_img(imgurl_list):
os.mkdir("美女")
n = 0
for img_url in imgurl_list:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
img_data = requests.get(url=img_url, headers=headers).content #
# 拼接图片存放地址和名字
img_path = './美女/' + str(n) + '.jpg'
# 将图片写入指定位置
with open(img_path, 'wb') as f:
f.write(img_data)
# 图片编号递增
n = n + 1
if __name__ == '__main__':
page_number = 10 # 爬取页数
imgurl_list = [] # 存放图片链接
# 1. 循环构建每页的链接
for i in range(0, page_number + 1):
# 页数拼接
url = f'https://www.moyublog/95-2-2-{i}.html'
print(url)
# 2. 获取图片链接
get_imgurl_list(url, imgurl_list)
# 3. 下载图片
get_down_img(imgurl_list)
🤝 期待与你共同进步
🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏
🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟
📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬
💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉
🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦!
关于Python学习指南
如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。
我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
👉Python所有方向的学习路线👈
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python大厂面试资料👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。
👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费
】
版权声明:本文标题:【python】爬取4K壁纸保存到本地文件夹【附源码】 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727069429a1096005.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论