【Python爬虫开发实战①】使用urllib以及XPath爬取可爱小猫图片

news2024/9/28 9:30:58

个人主页:为梦而生~ 关注我一起学习吧!
专栏:python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~
往期推荐
【Python爬虫开发基础⑦】urllib库的基本使用
【Python爬虫开发基础⑧】XPath库及其基本用法
我们在之前已经有8篇文章讲述基础知识了,下面我们利用已有的知识来进行一个简单的爬虫实战,感受一下爬虫的魅力,同时也可以增加学习的乐趣~
本文爬虫程序用到了urllib库和XPath库,都是上两次文章讲过的,链接已经放在上面了,没有看过的先看一下前置知识哦~下面我们马上开始!

首先来看一下效果:
在这里插入图片描述


文章目录

  • 1 确定爬取目标
  • 2 开始写代码


1 确定爬取目标

我们第一步要做的,就是找到要爬取的目标网站,同时利用开发者工具看清楚前端的代码结构,方便我们写合适的xpath代码。

在这里,我们可以看到,class属性为containerdiv标签有两个,通过定位知道下面的标签包含着想要的图片。
在这里插入图片描述

在其中包含图片的div标签里面,我们注意到,每一个class属性为item masonry-brickdiv标签对应着一个图片。
在这里插入图片描述
每一个图片的地址和名字就藏在这里面,但是着并不代表可以直接用,具体原因我们后面再说。
在这里插入图片描述


2 开始写代码

  • 首先,导入需要的库
from lxml import etree
import urllib.request
  • 设置开始和结束页
start_page = int(input('请输入起始页码:'))
end_page = int(input('清输入结束页码:'))
  • 然后,对每一页的数据,都按照这三步进行:(1)请求对象的定制 (2)获取网页的源码 (3)下载图片
  • 可以用一个for循环来完成
for page in range(start_page, end_page+1):
    # (1) 请求对象的定制
    request = create_request(page)
    # (2) 获取网页的源码
    content = get_content(request)
    # (3) 下载
    down_load(content)
  • 下面来定义里面的每一个函数(细节放在代码的注释中讲解)
# 请求对象的定制
def create_request(page):
	# 由于不同的页码会导致网址的改变,所以我们把不变的部分作为base_url
    base_url = 'https://sc.chinaz.com/tupian/xiaomaotupian.html'
    # 对于形参不同的page,我们通过简单的字符串拼接得到响应的网址
    if page == 1 :
        url = base_url
    else :
        url = 'https://sc.chinaz.com/tupian/xiaomaotupian_' + str(page) + '.html'
    print(url)
    # 设置请求头,这里设置了UA,每一个浏览器的UA不一样,可以到抓包后的报文中找
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    # 生成请求对象,用于向服务器发送请求
    request = urllib.request.Request(url = url, headers = headers)
    # 返回请求对象
    return request
  • 根据请求对象,向服务器发送请求,获取网页源码
# 获取网页的源码
def get_content(request):
    # 发送请求获取响应
    response = urllib.request.urlopen(request)
    # 对响应进行解码
    content = response.read().decode('utf-8')
    # 返回
    return content
  • 进行最后一步:下载
# 下载
def down_load(content):
	# 创建ElementTree对象
    tree = etree.HTML(content)
    # 使用xpath表达式,获取图片的名字和对应的地址
    name_list = tree.xpath('//div[@class="container"]//img/@alt') 
    # 由于页面的预加载,获取到的HTML代码中,图片的地址并不会直接存在src里面,而是后面的data-original
    src_list = tree.xpath('//div[@class="container"]//img/@data-original')
    
#     print(len(name_list), len(src_list))
	# 遍历本页面的所有图片
    for i in range(len(name_list)):
        name = name_list[i]
        src = src_list[i]
        url = 'https:' + src
#         print(name, url)
		# 利用urlretrieve进行图片的下载
        urllib.request.urlretrieve(url = url, filename = './cat imgs/' + name + '.jpg')

注意:上面的图片预加载是指:当页面还没有滑倒最下面的时候,后面的img标签里面的src属性并没有存储图片的地址,而地址是存在后面的data-original里面,如下图所示:
在这里插入图片描述

最后,我们运行代码,就可以得到一开始的图片了!赶紧试一下吧!后面的文章会介绍更加丰富多彩的爬虫基础~敬请期待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows环境下设置redis开启自动启动

一、首先下载好Redis 二、设置Redis服务 由于上面虽然启动了redis,但是只要一关闭cmd窗口,redis就会消失。所以要把redis设置成windows下的服务。 打开电脑的服务列表发现并没有所谓的Redis的服务。 我们需要进入到你安装的Redis的目录中,通…

系列五、NotePad++下载安装

一、下载 链接:https://pan.baidu.com/s/1U2f74vfBJIds7W2wJYnBxg?pwdyyds 提取码:yyds 二、安装 2.1、安装NotePad 解压NotePad-x64.zip至指定目录即可,例如 2.2、安装NppFTP 2.2.1、查看NotePad对应的位数(32位or64位&a…

8.pixi.js编写的塔防游戏(类似保卫萝卜)-发射圆圈子弹技能

游戏说明 一个用pixi.js编写的h5塔防游戏,可以用electron打包为exe,支持移动端,也可以用webview控件打包为app在移动端使用 环境说明 cnpm6.2.0 npm6.14.13 node12.22.7 npminstall3.28.0 yarn1.22.10 npm config list electron_mirr…

cp命令IO代码实现实例

需求内容&#xff1a; 编写一个类似于cp命令的程序&#xff0c;当使用该程序复制一个包含空洞&#xff08;连续的空字节&#xff09;的普通文件时&#xff0c;要求目标文件的空洞与源文件保持一致。 测试一&#xff1a;普通文件的复制 #include <sys/types.h> #include …

升哲科技受邀出席第十四届夏季达沃斯论坛

6月27日至29日&#xff0c;第十四届夏季达沃斯论坛将在天津举办&#xff0c;国务院总理李强将出席论坛&#xff0c;并在开幕式上发表特别致辞。 升哲科技&#xff08;SENSORO&#xff09;创始人兼CEO赵武阳作为中国新生代商业领袖代表&#xff0c;受邀参加开幕式以及主论坛&am…

如何查看阿里云https账号密码

克隆git上的项目时出现身份验证&#xff0c;此时需要阿里云https密码 查看阿里云https密码&#xff1a;

事务管理秘籍:MySQL引擎的黄金法则

前言 大家在生活中肯定使用过微信或者支付宝转账吧&#xff0c;那么大家有没有想过一个问题呢&#xff1f;就是如果你向商家转账了&#xff0c;但是突然微信或者支付宝服务器出现问题了&#xff0c;商家并没有收到转账该怎么办呢&#xff1f; 今天我将来带大家了解解决这一问…

浙大GMSCM十周年庆典圆满闭幕!宁海元携易知微进行主题分享

6月24日&#xff0c;浙江大学与加拿大麦吉尔大学携手创办的全球制造与供应链管理硕士项目&#xff08;Master in Global Manufacturing and Supply Chain Management&#xff09;十周年庆典在浙江大学隆重召开。本次论坛致力于为制造业、服务业、物流业、金融业等各行业管理人员…

Java安装并使用Jmter测试微服务高并发下的服务雪崩场景

高并发会给微服务带来什么样的的问题? 在微服务架构中,我们将业务拆分成一个个的服务,服务和服务之间可以互相调用,但是由于网络原因或者自身的原因,服务并不能保证服务100%是可用的,如果单个服务出现问题,调用这个服务的时候就会出现网络延迟在系统中一直阻塞等待(阻塞就意味…

【kubernetes系列】Kubernetes之service

本章节将分享一下关于kubernetes中service的相关知识。 一、service 概述 Service也是Kubernetes里的最核心的资源对象之一&#xff0c;正是因为对此概念的支持&#xff0c;Kubernetes在某种角度下可以被看成是一种微服务平台。由于Kubernetes中的pod并不稳定&#xff0c;比…

从0到1精通自动化测试,pytest自动化测试框架,pytest分布式执行(pytest-xdist)(十六)

一、前言 平常我们手工测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟 如果一个测试人员执行需要1000分钟才能执行完&#xff0c;当项目非常紧急的时候&#xff0c;我们会用测试人力成本换取时间成本&#xff0c;这个时候多找个小伙伴把…

【技术操作】如何通过抓包来分析EasyCVR不回复上级平台的invite请求?

EasyCVR平台基于云边端协同架构&#xff0c;可支持多协议、多类型的海量设备接入与分发&#xff0c;平台既具备传统安防视频监控的能力&#xff0c;也具备接入AI智能分析的能力&#xff0c;在线下均有大量应用。 有用户反馈&#xff0c;在级联时&#xff0c;使用EasyCVR作为下级…

【2023年全新保姆级教程】解决Ubuntu文件系统磁盘空间不足low disk space on filesystem root

** 解决Ubuntu22.04文件系统磁盘空间不足low disk space on filesystem root ** 大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流…

QGIS实战操作-解决TIFF影像黑边问题

QGIS实战操作-解决TIFF影像黑边问题 问题描述 "TIFF图像黑边问题"就是当我们处理或使用TIFF格式的遥感或者地理信息数据时&#xff0c;经常会在图像边缘看到一些不该出现的黑色区域&#xff0c;这些黑边可能会影响我们对图像的观看体验&#xff0c;甚至可能对图像的…

Unity 自定义代码模板

文章目录 1. Unity 中自带的代码模板创建自己的代码模板3. 代码模板的修改4. 自定义标签 1. Unity 中自带的代码模板 在 Unity 的安装目录下找到 Unity\Editor\Data\Resources\ScriptTemplates 文件夹&#xff0c;结构如下&#xff1a; 对应上图可得出&#xff1a; 文件名后…

CSS知识点汇总(一)

介绍一下标准的 CSS 的盒子模型&#xff1f; 两种盒子模型&#xff1a;IE盒模型&#xff08;border-box&#xff09;、W3C标准盒模型&#xff08;content-box&#xff09; 盒模型&#xff1a; 分为内容(content)、填充(padding)、边界(margin)、 边框(border)四个部分&#x…

IntelliJ IDEA maven 引用本地 jar 文件

一、背景说明 由于某些特定原因&#xff0c;不能在远程maven仓库中下载所需要版本的jar文件&#xff0c;需要在maven中引用本地jar文件。 二、解决方案 1、创建 libs 目录 为了方便jar包管理&#xff0c;可以在工程目录下&#xff0c;创建一个与src目录平级的libs目录。如下…

OpenCV之Window开发环境配置

下载opencv开发包 win配置: 双击SDK包解压 解压中 解压成功 配置环境变量 验证环境 创建控制台应用并配置工程属性表添加opencv环境 创建属性表 配置属性 复制属性表并修改名Project1X64_Debug与Project1X64_Release 导入属性表 测试opencv功能 示例代码 #include <ope…

rsync安装使用

目录 一、磁盘性能测试安装fio磁盘性能测试工具测试内容为顺序读、随机读、顺序写、随机写、随机读写结果分析 二、CPU性能测试安装sysbench性能测试工具结果分析 三、内存性能测试结果分析 四、网络性能测试测试iperf3工具测试结果分析1.测试TCP吞吐量2 . 测试UDP丢包和延迟 此…

Kubernetes-Ingress、Ingress Controller、Ingress Class

概念 1.Ingress 是对K8S集群中服务的外部访问进行管理的 API 对象。Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。 2.Ingress Controller 通常负责通过负载均衡器来实现 Ingress。 3.必须拥有一个 Ingress Controller…