网络爬虫之urllib库--校园官网图片批量提取(抓取静态网页)

目录

什么是urllib库

分析urlopen方法

添加特定Headers—请求伪装

项目目标 

步骤概述

详细步骤

1.导入库

2.发送HTTP请求并读取HTML内容

3.提取图片URL:

 4.下载图片:

结论


什么是urllib库

urllib库是Python内置的HTTP请求库,它 可以看做是处理URL的组件集合。

分析urlopen方法

urlopen方法可以接收多个参数,定义格式如下:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

参数如下: url --表示目标资源在网站中的位置。 data --用来指明向服务器发送请求的额外信息。 timeout 一 该参数用于设置超时时间,单位是秒。 context 一 实现SSL加密传输,该参数很少使用。

添加特定Headers—请求伪装

如果不是从浏览器发出的请求,我们是不能获得 响应内容的。针对这种情况,我们需要将爬虫程 序发出的请求伪装成一个从浏览器发出的请求,伪装浏览器需要自定义请求报头,也就是在 发送Request请求时,加入特定的Headers

import urllib.request

# 定义用户代理
user_agent = {
    "User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT6.1; Trident/5.0)"
}

# 创建请求对象,并设置请求头部信息
request = urllib.request.Request(url, headers=user_agent)

# 添加额外的请求头部信息
request.add_header("Connection", "keep-alive")

以上代码使用urllib.resquest模块发送HTTP请求,设置了请求头部信息,其中User-Agent用于伪装浏览器身份,Conection用于设置持久连接 

项目目标 

我们的目标是访问一个校园官网,例如:https://www.lzzy.edu.cn   然后通过Python脚本批量下载该网站上所有的图片。

步骤概述

  1. 首先,我们需要导入所需的库,包括re(用于正则表达式操作)和urllib.request(用于处理URL和发送HTTP请求)。
  2. 使用urllib.request.urlopen()函数打开目标URL,并读取其HTML内容。
  3. 使用正则表达式<img.*src=\"(.+?(gif|jpg|png))在HTML内容中查找所有图片的URL。这里,我们假设图片的标签是<img>,并且其src属性以 .gif、.jpg.png结尾。
  4. 遍历找到的所有图片URL,并使用urllib.request.urlopen()函数打开每个图片URL,获取其内容,并保存到本地文件。
  5. 最后,输出每个图片下载成功的消息

详细步骤

1.导入库
import re  # 正则表达式re库  
import urllib.request  
from os import path #处理文件路径,导入os库
2.发送HTTP请求并读取HTML内容

使用urllib.request.urlopen()函数打开目标URL,并读取其HTML内容。这里,我们假设该网站的响应内容是UTF-8编码的。下面这段代码使用urllib库中的request模块发送一个HTTP请求, 打开指定的URL连接。然后使用read()方法读取返回的响应内容,并使用decode()方法将其转换为UTF-8编码的字符

import urllib.request

# 发送HTTP请求,打开指定的URL连接
response = urllib.request.urlopen('http://www.lzzy.edu.cn/')

# 读取返回的响应内容
html = response.read().decode('UTF-8')

 前面在爬取网页时,有一句核心的爬虫代码:response=urllib.request.urlopen('http://www.lzzy.edu.cn') 上述代码调用的是urllib. request模块中的urlopen方法,它传入了一个校园首页的URL,使用的协议是HTTP,这是 urlopen方法最简单的用法。

3.提取图片URL:

使用正则表达式在HTML内容中查找所有图片的URL。正则表达式<img.*src=\"(.+?(gif|jpg|png))会匹配所有以.gif、.jpg或.png结尾的图片URL。

imgs = re.findall(r'<img.*src=\"(.+?(gif|jpg|png))', html)  
print(imgs)
 4.下载图片:

遍历找到的所有图片URL,并使用urllib.request.urlopen()函数打开每个图片URL,获取其内容,并保存到本地文件。这里假设我们要下载的图片都存储在C:/Users/Administrator/Downloads目录下。

这段代码使用了一 个循环来遍历一个包含图片URL的列表imgs。
●在循环中,通过拼接图片URL的前缀,将相对URL转换为完整的URL。
●然后使用urlib.request.urlopen(函数打开图片URL, 并使用read0方法读取图片内容为字节流。 
●通过path.basename()函数获取图片的文件名 (不包括URL)。
●使用open()函数以二进制写入模式打开本地文件,并使用write()方法将图片内容写入本地文件。
●最后打印出下载成功的提示信息


# 遍历图片列表
for index, (img, pic) in enumerate(imgs):
    img = 'http://www.lzzy.edu.cn' + img  # 拼接图片URL的前缀
    print(img)  # 打印正在下载的图片URL
    res_img = urllib.request.urlopen(img)  # 打开图片URL并获取其内容
    img_byte = res_img.read()  # 读取图片内容为字节流
    filename = path.basename(img)  # 获取图片的文件名(不包括URL)
    with open("C:/Users/Administrator/Downloads/" + filename, "wb") as f:  # 以二进制写入模式打开本地文件并写入图片内容
        f.write(img_byte)  # 将图片内容写入本地文件
    print(f"第{index + 1}张图片下载成功")

结论

这篇博客主要介绍了一个使用Python的urllib库进行网络爬虫的项目,目的是批量下载一个校园官网上的所有图片。首先,它导入了所需的库,然后使用urllib.request.urlopen()函数打开目标URL并读取其HTML内容。接着,使用正则表达式在HTML内容中查找所有图片的URL,并遍历这些URL来下载每个图片。最后,输出每个图片下载成功的消息。这个项目可以帮助人们快速地下载网站上的大量图片,提高工作效率。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值