python爬取网页图片并下载

python爬取网页图片并下载之GET类型

准备工作

【1】首先需要准备好pycharm,并且保证环境能够正常运行

【2】安装request模块

shell 复制代码
pip install requests

import request导入request内置模块

【3】安装lxml模块

shell 复制代码
pip install lxml

from lxml import etree导入lxml.etree内置模块

如果导入etree失败的话可以尝试

python 复制代码
from lxml import html
etree = html.etree

目标网站

今日的目标是爬取图片信息

网址:loryx.wiki(home [LoR丨中文百科 (loryx.wiki)](https://loryx.wiki/home))

分析网站

该部分是这次要爬取的所有图片内容,首先F12打开网络并且选中ALL,然后Ctrl+R刷新页面

打开最上方加载的文件的Response,发现和页面的源码非常相似,并且编码类型为utf-8

接着点开Headers

可以看到该网页是GET类型,并且状态码是200,URL也和该页面相同

那么接下来就可以用python来模拟request请求了

爬虫代码

其实GET方法在这里data不带进去也行,写在这里是为了更方便理解

python 复制代码
import requests
from lxml import etree

url = 'https://loryx.wiki/%E6%B5%8F%E8%A7%88/%E7%89%8C%E5%BA%93'
data = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/231.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/231.36 Edg/120.1.1.0'
}

res = requests.get(url=url, data=data)
res.encoding = 'utf-8'

接下来拿到了request对象后就可以来对元素进行筛选了

首先获取完整的网页源码print(res.text)

打印结果为

可以看见没有问题,那么继续用etree进行解析

python 复制代码
et = etree.HTML(res.text)

继续分析网页内容

在图片链接处右键进入检查

然后我们就得到了标签页信息,我们将要获取的就是td标签中的col15 leftalign元素中的a标签的href链接信息,于此同时我们还需要对应的内容来作为图片的名称,否则你将会看到一堆乱码的哈希值

这里就用卡牌名称作为图片名,取元素的方法也和图片同理

python 复制代码
# 图片链接
src = et.xpath("//td[@class='col15 leftalign']/a/@href")

# 图片名称
name = et.xpath("//td[@class='col0 leftalign']/text()")

当前所有采集到的内容都存储在srcname这两个列表中

我们打印src就可以看到这样的图片链接

打开后就可以在浏览器中看到图片

该效果说明我们下载图片的原理还是向这个网页发送请求然后再获取返回的结果

图片下载

演示只取9张图片,不然的话可以直接range(len(src))

python 复制代码
for i in range(9):
    with open(f"img/{name[i]}.png", 'wb') as f:
        f.write(requests.get(src[i]).content)

这里需要注意要用wb,因为写入的是二进制数据

运行程序

OK完工

总结

以上就是python中最基础的爬虫案例,当然实际项目中基本不会有用with open(f"img/{name[i]}.png", 'wb') as f:这种写法,因为效率太低了,本篇文章只是为了以最直观的方式呈现爬虫下载图片的原理

完整代码:

python 复制代码
import requests
from lxml import etree

url = 'https://loryx.wiki/%E6%B5%8F%E8%A7%88/%E7%89%8C%E5%BA%93'
data = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0'
}

res = requests.get(url=url, data=data)
res.encoding = 'utf-8'
et = etree.HTML(res.text)
# print(res.text)
src = et.xpath("//td[@class='col15 leftalign']/a/@href")
name = et.xpath("//td[@class='col0 leftalign']/text()")
for i, index in enumerate(name):
    name[i] = index.strip()

for i in range(9):
    with open(f"img/{name[i]}.png", 'wb') as f:
        f.write(requests.get(src[i]).content)
相关推荐
————A19 分钟前
Agent 接收用户上传文件
人工智能·笔记·python·状态模式
可乐鸡翅yeah_23 分钟前
hls.js 内存泄漏实战排查,直播 M3U8 长时间播放异常定位方案
开发语言·javascript·python·django·ecmascript·m3u8·m3u8在线
可乐鸡翅yeah_28 分钟前
第三方接口对接 M3U8 流媒体排坑实战,解决外部服务商流兼容难题
前端·javascript·python·django·html·m3u8·m3u8在线
2601_9622035130 分钟前
Java进阶07集合(续)
java·开发语言
金融小师妹32 分钟前
多因子智能推演:黄金震荡回升,杰克逊霍尔“沃什首秀”政策如何重塑金价路径的AI预测框架
大数据·人工智能·python·线性回归
阿童木写作34 分钟前
跨马翻译:AI批量图片翻译与视频字幕翻译工具推荐
人工智能·python·音视频
阿kun要赚马内40 分钟前
MCP(Model Context Protocol,模型上下文协议)
人工智能·python
郑州光合科技余经理1 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
来了就未晚1 小时前
Python基础 学习代码存储与命名规范
开发语言·python·学习
落魄大学生之流水线上谋生计1 小时前
LangGraph 基本用法指南
java·windows·python·langchain