35行代码下载任意网页的图片

一、简介

有没有一种代码可能实现下载任意网页的图片,这样对于需要下载大量壁纸,图片的小伙伴来说真是一个好福利,今天我们就来试试。

先看视频演示效果

35行代码下载任意网页的图片_演示视频

https://v.qq.com/x/page/f3220zfigqq.html

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

二、分析

爬取过网页图片的小伙伴都知道,需要通过lxml去解析对应的网页,每一个网页的网页标签结构不一样,因此爬取一个网站的图片就需要解析一次,那想爬取多个网站时,那.....,(打扰了,告辞)

因此我们来看一下网页的图片存放在哪个网页标签

案例网页1

###网页链接
http://desk.zol.com.cn/bizhi/9461_115065_2.html

案例网页2

###网页链接
http://www.netbian.com/index.htm

案例网页3

###网页链接
http://www.jj20.com/bz/mwjy/msdc/294138.html

通过这三个案例网站的分析可以发现图片都是在img标签下,因此根据这个规律可以写正则表达式去进行爬取图片。

三、代码

所需库

import re
import requests

re是正则表达式的库,requests用于获取网页数据

请求网页

#请求头 
headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75'
    }
#请求数据,其中url是目标网页
web_text = requests.get(url, headers=headers).text

正则表达式

ex = '<img.*?src="(.*?)".*?'
img_list = re.findall(ex, web_text)

获取图片链接

# 补充协议头
if not (img.startswith('http') or img.startswith('https')):
    img = 'http:' + img
img_binary = requests.get(img, headers=headers).content
# 切割出最后一个字符串
file_name = img.split('/')[-1]
# 切割 query字符
file_name = file_name.split('?')[0]

保存图片到本地

with open(f'./李运辰_img/{file_name}', 'wb') as fp:
    fp.write(img_binary)

四、效果演示

比如演示的图片链接

http://desk.zol.com.cn/bizhi/9461_115065_2.html

运行程序后

在本地文件夹可以看到爬取的图片

五、结尾

好了,以上就是完整的介绍,有问题的可以在下方评论,互勉互励,一起努力。

完整源码获取方式

公众号回复:万能图片爬虫

------------------- End -------------------

各种爬虫源码获取方式

识别文末二维码,回复:爬虫源码

------------- 往期精彩文章 --------------

python窃取摄像头照片(摄像头拍照+邮箱发送+打包exe)

30行爬虫代码实现中英互译

分析B站《送你一朵小红花》弹幕评论

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个详细的个人微博网页HTML 代码示例,其中包括了一些常用的 HTML 标签和 CSS 样式,供你参考: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>个人微博</title> <link rel="stylesheet" href="style.css"> </head> <body> <header> <div class="logo"> <h1>个人微博</h1> </div> <nav> <ul> <li><a href="#">首页</a></li> <li><a href="#">热门微博</a></li> <li><a href="#">我的微博</a></li> <li><a href="#">个人设置</a></li> </ul> </nav> </header> <section class="container"> <div class="left"> <h2>最新微博</h2> <ul> <li> <img src="https://picsum.photos/100/100" alt=""> <p>这是一条最新微博的内容</p> </li> <li> <img src="https://picsum.photos/100/100" alt=""> <p>这是一条最新微博的内容</p> </li> <li> <img src="https://picsum.photos/100/100" alt=""> <p>这是一条最新微博的内容</p> </li> </ul> </div> <div class="right"> <h2>个人资料</h2> <div class="profile"> <img src="https://picsum.photos/100/100" alt=""> <div class="info"> <p>用户名:John</p> <p>性别:男</p> <p>年龄:30</p> <p>职业:程序员</p> </div> </div> <h2>热门话题</h2> <ul> <li><a href="#">话题1</a></li> <li><a href="#">话题2</a></li> <li><a href="#">话题3</a></li> <li><a href="#">话题4</a></li> <li><a href="#">话题5</a></li> </ul> </div> </section> <footer> <p>© 2021 个人微博</p> </footer> </body> </html> ``` 以上代码中,`<header>` 标签包含了网页的头部,其中包括了网站的标志和导航菜单。`<nav>` 标签代表导航菜单,`<ul>` 和 `<li>` 标签用于创建无序列表,其中每个列表项是一个链接。`<section>` 标签包含了网页的主体内容,其中使用了 `<div>` 标签来分组元素。网页主体部分被分为两个部分,左侧部分包括了最新微博的列表,右侧部分包括了个人资料和热门话题。`<img>` 标签用于添加图片,`<p>` 标签用于表示段落。`<footer>` 标签用于网页的底部。 同时,通过使用 CSS 样式表,可以对 HTML 标签进样式设置,例如: ```css /* 网页主体容器 */ .container { display: flex; justify-content: space-between; margin: 50px auto; max-width: 1200px; } /* 左侧区域 */ .left { width: 60%; } /* 右侧区域 */ .right { width: 35%; } /* 个人资料区域 */ .profile { display: flex; align-items: center; margin-bottom: 20px; } /* 个人资料图片 */ .profile img { width: 80px; height: 80px; border-radius: 50%; margin-right: 20px; } /* 个人资料信息 */ .profile .info { flex: 1; } /* 热门话题列表 */ ul { list-style: none; padding: 0; margin: 0; } ul li { margin-bottom: 10px; } /* 链接样式 */ a { text-decoration: none; color: #333; } a:hover { color: #f00; } ``` 以上 CSS 样式设置了网页主体容器、左侧区域、右侧区域、个人资料区域、热门话题列表等元素的样式,同时还设置了链接的样式。 需要注意的是,以上代码只是一个示例,具体的设计和样式可以根据需求进调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyc2016012170

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值