python学习笔记3-爬取指定网页的图片_python3 网页 选中img-程序员宅基地

技术标签: 爬虫抓图  python  爬取图片  beautifulSoup  requests  

在上一篇学习笔记中,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 请求图片地址,并且挨个下载到指定的文件夹中。

完毕~~

下载的成果截图:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42703239/article/details/103572712

智能推荐

阿里云DataV功能及案例_datav案例-程序员宅基地

文章浏览阅读1.4k次。一、功能特性1、多种场景模板,解决您的设计难题数据可视化的设计难点不在于图表类型的多,而在于如何能在简单的一页之内让人读懂数据之间的层次与关联,这就关系到色彩、布局、图表的综合运用。DataV 提供指挥中心、地理分析、实时监控、汇报展示等多种场景模版,即便没有设计师,您的可视化作品也有显现出高设计水准。2、多种图表组件,支撑多种数据类型的分析展示除针对业务展示优化过的常规图表外,还能够绘制包括海量数据的地理轨迹、地理飞线、热力分布、地域区块、3D 地图、3D 地球,地理数据的多层叠加。此_datav案例

Android - 画中画_android12画中画恢复后无法startactivity-程序员宅基地

文章浏览阅读745次。简介Android8.0 开始可以让Activity进入画中画模式,即Activity变小并且悬浮于其他界面之上,就算是退到桌面也依然存在。简单使用在AndroidManifest中声明需要进入画中画的Activity支持画中画<activity android:name=".PlayerActivity" //声明支持画中画 android:resizeableActivity="true" android:supportsPictureInPicture="true" //避免_android12画中画恢复后无法startactivity

Python 入门之控制结构 - 循环结构(一)_partcount = int(input()) electric = int(input()) c-程序员宅基地

文章浏览阅读1.7k次。@R星校长第1关:While 循环与 break 语句程序的第三大结构是循环结构。在此结构中,通过一个判断语句来循环执行一个代码块,直到判断语句为假时跳出循环。循环语句分为while循环、for循环、循环嵌套和迭代器。循环语句中有一个语句break,通过这个语句可以跳出整个循环。while循环和break的结构如下图1所示:图 1while语句while语句的基本形式为:while 判断条件1: 循环语句当判断条件1为true时,执行循环语句,直到判断条件1为假。例如:co._partcount = int(input()) electric = int(input()) count = 0 #请在此添加代码,

Matlab学习:雅克比迭代法和高斯-赛德尔迭代法_雅可比迭代法matlab代码-程序员宅基地

文章浏览阅读1k次。【代码】Matlab学习:雅克比迭代法和高斯-赛德尔迭代法。_雅可比迭代法matlab代码

Python中排序函数sort()和sorted()的区别(这是一个大坑)_python sort ascending是什么意思-程序员宅基地

文章浏览阅读7.1k次,点赞13次,收藏14次。排序_python sort ascending是什么意思

TypeScript函数_ts 函数返回值-程序员宅基地

文章浏览阅读3.5k次。一、TS函数返回值TS函数必须要有返回值,如果在TS函数中没有返回值的话,那么我们可以用void来接收返回的类型。二、TS函数形参类型小案例:_ts 函数返回值

随便推点

STM32F103C8T6控制电机驱动模块298N驱动电机调速以及正反转(附代码资源包)_stm32f103c8t6电机驱动-程序员宅基地

文章浏览阅读2.1w次,点赞37次,收藏325次。STM32F103C8T6控制电机驱动模块298N驱动电机调速以及正反转 作为本人的第一篇的博客,自身经验以及能力不足,用的方法也是基本方法,单纯的分享一下自己的经历,欢迎大家批评指正。一、 硬件选型1、 stm32f103c8t62、 L298N3、 电机4、 其他二、 硬件连接(连接以接一路电机为例)1、298N接8根线,接线具体介绍如下:注:(1)、298N的GND引脚同时引出两根线,一根接stm32的GDN,一根接电源的GND(共地)(2)、OUTA和OUTB与电机_stm32f103c8t6电机驱动

ARM嵌入式学习心得7.8_arm嵌入式综合实验学习心得-程序员宅基地

文章浏览阅读726次。感受:来到软帝的第一天,感觉熟悉又陌生,老师是之前带我们课设的邓君老师,所以对他的教学方式有了解,会讲解很多细节,陌生在对于环境和同学的陌生。第一天虽然讲解的知识点不是很多,但是还是感觉学到了很多。首先是邓君老师告诉我们的学习时的一些好习惯,比如要1,要做好笔记;2,每天写一篇博客,做好总结归纳;3,要多敲代码,这样才能提升自己的打字速度;4,做好每日一练以增强自己的交流能力,等等,,然后_arm嵌入式综合实验学习心得

异步获取数据,v-model绑定的数据不能实时刷新(每次得到的是上次的结果)----解决办法_通过异步回显后v-model 失效-程序员宅基地

文章浏览阅读1.5k次。1.场景,在表单中通过一个input的改变,调后端接口,控制其他input的值的变化错误方式:直接对后端返回的数据赋值正确方式:使用$set实现_通过异步回显后v-model 失效

xcode_8正式版安装遇到的小问题-程序员宅基地

文章浏览阅读74次。从官网上下载好了xcode_8正式版之后,我们会发现竟然不是以往的zip后缀,而是xip后缀 双击之后不能正常解压在网上查询了一下资料发现一般是以下两个问题:1,mac的储存空间不够,别看该xip文件只有4.41G的大小,解压之后会变成12.1G 听网上说至少得腾出20G才能正常加压安装,我是没亲测了,我直接清理腾出了40G出来,保证够用.2,清理完之后,我发现还是不能解压成功,..._xcode_8.xip解压失败

智哪儿出品 | 智能行业科普系列之智能照明百问百答【第二期】-程序员宅基地

文章浏览阅读123次。Q11.智能照明产品有哪些大类?一般照明 也称为“背景照明”或者“环境照明”,是一个照明规划的基础,指的是充满房间的非定向照明,为空间房间中所有活动创造一个普遍充足的照明基础。重点照明 也称“装饰照明”是指定向照射空间的某一特殊物体或区域,以引起注意的照明方式。它通常被用于强调空间的特定部件或陈设,例如建筑要素、构架、衣厨、收藏品、装饰品及艺术品等。焦点照明 也称“任务照明”,它是一种照明的定向照明,提供适合于完成于特殊活动,如阅读、写作、做游戏或工艺劳动的照明。它创造一个吸引我们注意了力的亮点,告.

Android中inflate_android之inflate-程序员宅基地

文章浏览阅读509次。Inflate可用于将一个xml中定义的布局控件找出来.  因为在一个Activity里如果直接用findViewById()的话,对应的是setConentView()的那个layout里的组件。因此如果当前Activity里需要如果用到别的layout(xml文件),比如对话框上的layout,这时还要设置对话框上的layout里的组件(像图片ImageView,文字TextView)上的_android之inflate