Python爬虫实战案例(爬取图片)

ops/2024/10/11 1:18:41/

爬取图片的信息

爬取图片与爬取文本内容相似,只是需要加上图片的url,并且在查找图片位置的时候需要带上图片的属性。

这里选取了一个4K高清的壁纸网站(彼岸壁纸https://pic.netbian.com)进行爬取。

具体步骤如下:

  • 第一步依然是进入这个页面,这个壁纸网站分为好几种类型的壁纸图片,点击一个你想要爬取的类型,然后按F12,从中获取URL请求方式(复制URL,会用到),这次就不用网页的"User-Agent’'了,用pycharm包中别人写好的。
    然后发送我们的请求并获取这个网页的数据
    在这里插入图片描述
python"># url
url = "https://pic.netbian.com/4kmeinv/"
# UA伪装 用下载好的库中别人写好的UA
head = {"User-Agent": fake_useragent.UserAgent().random}
# 发送请求
response = requests.get(url, headers=head)
# 获取想要的数据
res_text = response.text
  • 第二步打开元素栏,用左上角的寻找工具放在图片上,定位到元素栏中对应的标签,用数据分析的方法获取到图片信息。
    其实每一张图片的排放就好像是一个个列表,其所有的信息都储存在元素栏中的li标签中,我们想要获取多张照片,首先需要先将这些li标签都获取下来。
    在这里插入图片描述
python"># 数据解析 获取所有的li标签,并存放在li_list中
tree = etree.HTML(res_text)
li_list = tree.xpath("//div[@class='slist']/ul/li")
  • 第三步获取图片与获取文本内容不同的是,需要再获取图片的url,图片的url就在上图箭头所指的位置,但是这个仅仅只是图片在这个板块的位置,所以前面需要在前面加上这个壁纸网站的地址,这样获取的图片信息才是完整的,可以被打开。
    因为先前已经将存放图片信息的li标签都存放在了li_list中,所以我们就用for循环遍历这个列表,以便获取更多的图片信息。
python"> for li in li_list:# 图片的urlimg_url = "https://pic.netbian.com" + "".join(li.xpath("./a/img/@src"))# 发送请求img_response = requests.get(img_url, headers=head)# 获取想要的数据img_content = img_response.content
  • 第四步将获取到的图片存放在文件夹中
python"># pic_name = 0 这次的代码封装在函数中,将这个变量放在了函数外面,给获取的图片编号
# 将pic_name定义为全局变量,方便调用
global pic_namewith open(f"./picLibbb/{pic_name}.jpg", "wb") as fp:fp.write(img_content)pic_name += 1
  • 第五步为了获取更多的照片,因为每一页能展示的照片有限,所以我们需要for循环遍历每一页的网址;
    每一页的网址都只是在页面数量上的差别,所以可以遍历。

第一页的网址
在这里插入图片描述
第二页的网址

在这里插入图片描述
第三页的网址

在这里插入图片描述

python">url = "https://pic.netbian.com/4kmeinv/"request_pic(url)for i in range(1,10):next_url = f"https://pic.netbian.com/4kmeinv/index_{i}.html"request_pic(next_url)

完整代码:

python"># 获取图片数据
import os.path
import fake_useragent
import requests
from lxml import etree# UA伪装
head = {"User-Agent": fake_useragent.UserAgent().random}pic_name = 0
def request_pic(url):# 发送请求response = requests.get(url, headers=head)# 获取想要的数据res_text = response.text# 数据解析tree = etree.HTML(res_text)li_list = tree.xpath("//div[@class='slist']/ul/li")for li in li_list:# 图片的urlimg_url = "https://pic.netbian.com" + "".join(li.xpath("./a/img/@src"))# 发送请求img_response = requests.get(img_url, headers=head)# 获取想要的数据img_content = img_response.contentglobal pic_namewith open(f"./picLib/{pic_name}.jpg", "wb") as fp:fp.write(img_content)pic_name += 1if __name__ == '__main__':# 创建存放照片的文件夹if not os.path.exists("./picLib"):os.mkdir("./picLib")# 网站的urlurl = "https://pic.netbian.com/4kdongman/"request_pic(url)for i in range(1,10):next_url = f"https://pic.netbian.com/4kmeinv/index_{i}.html"request_pic(next_url)

爬取后的效果如下:
在这里插入图片描述


http://www.ppmy.cn/ops/86988.html

相关文章

八股文是助力还是阻力取决于程序员本身

作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试考什么?是工作能力、工作经验还是背题能力&#xf…

Bugku-web-Simple_SSTI_1

##Bugku-web-Simple_SSTI_1 F12查看源代码,说在flask中我经常设置secret_key变量 **flask框架:**flask是一个使用Python编写的轻量级Web应用框架(一种开发框架,用来支持动态网站,网络应用程序及网络服务的开发。其类型…

RSA非对称加密算法(Java实现)

废话不多说,直接上代码 public class RSAService {private static final String RSA "RSA";private static final String PUBLIC_KEY "xxx";private static final String PRIVATE_KEY "xxx";public static void main(String[] ar…

外设购物平台

目 录 一、系统分析 二、系统设计 2.1 系统功能设计 2.2 数据库设计 三、系统实现 3.1 注册功能 3.2 登录功能 3.3 分页查询所有商品信息功能 3.4 分页条件(精确、模糊)查询商品信息功能 3.5 购物车功能 3.6 订单管理功能 四、项…

UNIX 域协议

1. UNIX域协议 利用socket 编程接口实现本地进程间通信 UNIX域协议套接字:可以使用TCP,也可以使用UDP SOCK_STREAM -----> TCP 面向字节流 SOCK_DGRAM -----> UDP 面向数据报 UNIX域协议并不是一个实际的协议族,而是在单个主机上执…

第13周 简历职位功能开发与Zookeeper实战

第13周 简历职位功能开发与Zookeeper实战 本章概述1. Mysql8窗口函数over使用1.1 演示表结构与数据1.2 案例1:获取男女总分数1.3 案例2****************************************************************************************本章概述 1. Mysql8窗口函数over使用 参考案例…

Nginx实现数据库端口转发

作者:红米 一、需求 客户想要将IDC服务器的数据库端口暴漏在公网上,然后其他业务来调数据库接口。为了保证安全,只开放指定的公网ip访问。 二、逻辑设计 由于客户的IDC服务器与云ECS服务器通过专线打通,所以只需要在云ECS服务…

每天一个数据分析题(四百五十七)- 分层随机抽样

一项针对全国25-35岁用户群的手机喜好调查,但调研项目经费大概是10万元,并且用户群相对集中在中国中部城市。前期预调研显示,用户群的方差和调研费用不等。以下哪种情况是比较适宜的调查方式? A. 简单随机抽样(全国抽…