python学习笔记3-爬取指定网页的图片

在上一篇学习笔记中,python学习笔记2-下载网络图片 ,简单记下了已知网络图片地址,下载图片的过程。

但是,一个网页里图片很多,怎么让python自动解析地址,再挨个下载图片呢?

这篇算是上篇的一个继续。

 要使用本代码,要安装 3个模块:

requests、BeautifulSoup(这个要安装 BeautifulSoup4,简写为bs4,否则是老版本)、lxml。

安装方法:

在 cmd 里依次输入,挨个安装:

python -m pip install requests
python -m pip install BeautifulSoup4
python -m pip install lxml
# -*- coding:utf-8 -*-
"""
    爬虫的基础练习:
    利用 requests 和 BeautifulSoup 模块下载图片
    利用 lxml 解析HTML
"""
import os
import re   # 正则模块
import requests  # 爬取网页内容需要的模块
from bs4 import BeautifulSoup  # 解析 HTML 的模块 导入 BS ,版本 4。
import lxml   # bs4的解析插件模块

# 定义网址,我们就来爬取这个网址上的所有图片。对不住学校了,练习使用~
weburl = r"http://www.cqie.edu.cn"

# 图片保存目录,事先建立好的目录。跟python文件同一目录哦。
dir = "images"

# 定义正则,用以判断图片地址是不是 http 开头的绝对地址。
reg = re.compile(r'^http',re.I)

以上代码就是 模块的引入,并且设置一些基础变量。

# 设置请求 headers,伪装浏览器 并接受中文数据
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36',
    'Accept-Language': "zh-CN,zh;q=0.9"
}

# 开始请求页面
req = requests.get( weburl, headers=headers )
req.encoding = req.apparent_encoding    # 设置接受的编码,免得乱码出现

# 如果状态码正确,就获取请求到的HTML代码
if req.status_code == 200:
    html = req.text   # str 数据 , w+

以上在利用 requests 模块,请求访问指定网址,以获得 HTML 代码。我们需要从这些HTML代码中,获取指定的图片地址。

# 用BS 解析HTML,获取图片地址
bs = BeautifulSoup( html ,"lxml")  # lxml 需要下载
images = bs.select("img")  # 找到页面中所有的img 标签
imgSrc = []
for img in images:
    # imgSrc.append( weburl+img.get("src") )
    url = img.get("src")
    if not reg.match(url):  # 如果图片开头没有 http ,说明这个是不完整的地址,就给它前面加上网址。获得一个完整的图片地址。
        imgSrc.append( weburl+url )
    else:
        imgSrc.append( url )
print( imgSrc )  # 获取所有的图片地址

BeautifulSoup 对象的  select() 方法就是选择标签。参数可以写 CSS 的选择标签方式。

images = bs.select("img")     这里就是选择页面中所有的 img 标签,找到的结果当然是个 list 数据。

然后,利用 for 循环把所有的 img 标签的 地址 保存在 列表 imgSrc 中。

for i in imgSrc:
    imgName =  i.split( "/" )[-1]  # 获取图片的名字
    imgSaveDir = dir + "/" + imgName # 图片的存放地址
    imgRq = requests.get(i)       # 访问图片地址
    with open(imgSaveDir,"wb+") as f:
        f.write( imgRq.content )
print( "图片下载完毕" )

循环遍历 图片地址 list, 依次使用 requests 请求图片地址,并且挨个下载到指定的文件夹中。

完毕~~

下载的成果截图:

发布了73 篇原创文章 · 获赞 97 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42703239/article/details/103572712
今日推荐