python爬虫,爬取网页壁纸图片

python爬虫实战,爬取网页壁纸图片

使用python爬取壁纸图片,保存到本地。

爬取彼岸图网,网站地址https://pic.netbian.com/

本人小白,记录一下学习过程。

开始前的准备

安装python环境,略。

python编辑器pycharm2024.2.3

本次代码用到的库

python 复制代码
import requests	 #用于发送HTTP请求、处理响应内容等。
import re		#正则表达式
import os		#文件和目录的操作

使用库之前需要先进行安装

首先进行国内pip源设置

我是在windows电脑上操作的,文件资源管理器,输入%USERPROFILE%,然后按下回车

然后新建目录pip,然后再进入pip目录创建pip.ini,将下面阿里云地址保存到pip.ini中

[global] 
index-url = http://mirrors.aliyun.com/pypi/simple/
[install] 
trusted-host=mirrors.aliyun.com

然后打开pycharm,打开终端,执行安装命令

python 复制代码
pip install requests
pip install re
pip install os

整体思路

获取所需要的信息

打开浏览器的,然后打开f12,输入网站地址https://pic.netbian.com/4kmeinv/

可以看到请求地址https://pic.netbian.com/4kmeinv/以及请求方法get

还需要用到user-agent,用来模拟用户操作

图片共53页,我们需要把这53页图片全部爬取下来

点击第53页可以看到此时的请求地址为https://pic.netbian.com/4kmeinv/index_53.html

第一页的地址为https://pic.netbian.com/4kmeinv/index.html

后面每一页的地址都是https://pic.netbian.com/4kmeinv/index_页码.html

编写完整代码

python 复制代码
import requests
import re
"""
. 表示除空格外任意字符(除\n外)
* 表示匹配字符零次或多次
? 表示匹配字符零次或一次
.*? 非贪婪匹配
"""
import os

"""
爬取所有图片、该网站图片共53页、第一页url为https://pic.netbian.com/4kmeinv/index.html
后面的url为https://pic.netbian.com/4kmeinv/index_页码.html
"""

url = "https://pic.netbian.com/4kmeinv/index.html"
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
}

#range(2,54) 从2开始循环,到53结束,
#当循环到53时,设置url为https://pic.netbian.com/4kmeinv/index_53}.html ,此时需要到下次循环才会爬取第53页的数据
for index in range(2,55):
    # 对图片地址发起请求
    response = requests.get(url=url, headers=headers)
    # 使用检测到的编码来解码相应内容
    response.encoding = response.apparent_encoding
    print(f"当前是第{index-1}页,当前url为:{url}")
    #print(response.text)
    url = f"https://pic.netbian.com/4kmeinv/index_{index}.html"
    parr = re.compile('src="(/uploads.*?)".alt="(.*?)"')
    image = re.findall(parr, response.text)
    #定义文件保存路径
    path = f"C:\\tmp\壁纸图片\第{index-1}页"
    if not os.path.isdir(path):
         os.mkdir(path)
    else:
        #若已存在则直接跳过当前循环
        continue

    for i in image:
          #i[0]是下载地址,i[1]是图片名字
          #拼接下载地址
          link = "https://pic.netbian.com" + i[0]
          image_name = i[1]
          image_name = image_name.replace("*", "x")
          print(link,image_name)
          with open(path+"/{}.jpg".format(image_name), "wb") as img:
              res = requests.get(link)
              img.write(res.content)
              img.close()

    print("\n-----------------------------------------\n")

运行截图


#执行完成后,再次执行,可以直观的看到每次请求的url

代码解释

python 复制代码
#range(2,54) 从2开始循环,到53结束,
#当循环到53时,设置url为https://pic.netbian.com/4kmeinv/index_53}.html ,此时需要到下次循环才会爬取第53页的数据
for index in range(2,55):
    # 对图片地址发起请求
    response = requests.get(url=url, headers=headers)
    # 使用检测到的编码来解码相应内容
    response.encoding = response.apparent_encoding
    #打印出当前是第几页
    print(f"当前是第{index-1}页,当前url为:{url}")
    #如果需要可以打印response.text,查看每一页的请求返回结果
    #print(response.text)
    #使用index拼接下一次循环时请求的地址
    url = f"https://pic.netbian.com/4kmeinv/index_{index}.html"
    #对请求结果进行查找,查找包含/uploads和alt的内容
    #<img src="/uploads/allimg/240911/190656-1726052816af84.jpg" alt="花丛美女章若楠 4K壁纸 3840x2400" />
    parr = re.compile('src="(/uploads.*?)".alt="(.*?)"')
    image = re.findall(parr, response.text)
    #此时image值的格式如下:
    #('/uploads/allimg/240911/190656-1726052816af84.jpg', '花丛美女章若楠 4K壁纸 3840x2400')
python 复制代码
    #对image进行循环
    for i in image:
          #i[0]是下载地址  /uploads/allimg/240911/190656-1726052816af84.jpg
          #i[1]是图片名字  花丛美女章若楠 4K壁纸 3840x2400
          #拼接下载地址
          link = "https://pic.netbian.com" + i[0]
          image_name = i[1]
          #有的图片中包含*  是特殊字符,将其转换为x  示例:1024*4080  -->  1024x4080
          image_name = image_name.replace("*", "x")
          print(link,image_name)
          with open(path+"/{}.jpg".format(image_name), "wb") as img:
              res = requests.get(link)
              img.write(res.content)
              img.close()

图片正确的下载地址如图所示,所以需要进行拼接

相关推荐
程序员~小强19 分钟前
让知识触手可及!基于Neo4j的机械设备知识图谱问答系统
人工智能·python·django·知识图谱·neo4j
咩咩觉主28 分钟前
C# &Unity 唐老狮 No.7 模拟面试题
开发语言·unity·c#
大丈夫在世当日食一鲲29 分钟前
Java中用到的设计模式
java·开发语言·设计模式
DanCheng-studio33 分钟前
智科 机器学习毕业设计题目指导
python·毕业设计·毕设
却道天凉_好个秋1 小时前
c++ 嵌入汇编的方式实现int型自增
开发语言·汇编·c++
java1234_小锋1 小时前
一周学会Flask3 Python Web开发-SQLAlchemy定义数据库模型
python·flask·sqlalchemy·flask3
33三 三like1 小时前
软件工程画图题
java·开发语言·软件工程
Light601 小时前
CSnakes vs Python.NET:跨语言集成的巅峰对决与架构解密
python·性能优化·.net·跨语言集成·双向互操作
&岁月不待人&2 小时前
Kotlin和Java区别
java·开发语言·kotlin
gallonyin2 小时前
免root运行python保活守护进程supervisor
linux·开发语言·python