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))

分析网站

该部分是这次要爬取的所有图片内容,首先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)
相关推荐
Boilermaker19921 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
沈浩(种子思维作者)1 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
MM_MS2 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂2 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs2 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_992 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
io_T_T2 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
古城小栈2 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
华研前沿标杆游学2 小时前
2026年走进洛阳格力工厂参观游学
python
Carl_奕然3 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析