Python爬虫实战S05网页图片的爬取及本地保存图文教程

2025-01-01阅读数:115
上一篇:Python爬虫实战S06带iframe的页面源码分析及数据爬取图文教程
下一篇:Python爬虫实战S04分页参数分析及翻页爬取图文教程

打开Python爬虫实战练习页面网页图片的爬取及本地保存_S05_Spiderbuf,看到页面上就只有几张图片。

这一个练习主要是让大家熟悉一下如何找到网页上图片的链接,并把网页的图片下载下来写到本地图片文件。

在页面上右键 -> 点击显示网页源代码,发现HTML源码里面是没有图片的,这个是正常的现象。网页本身就是一堆字符串,经过浏览器的渲染才变成了我们看到的样子,这一堆字符串就是告诉浏览器如何去渲染这个页面的。

在HTML里面,图片是通过img标签指向并加载的,链接是由src属性指定的。有些页面也会通过CSS样式或者JavaScript的方式指定图片的加载,所以当我们在HTMl源码里面找不到图片链接的时候,也可以去找找CSS样式代码或者JavaScript。其实通过JavaScript加载图片的方式会相对少一点。

在这个页面的HTML源码里面,我们很容易就找到几个img标签,把其中一个src的属性值复制出来,跟域名拼接在一起放到浏览器的地址栏里打开看看,发现能打开图片,说明链接取对了。

我们可以通过xpath的相对路径直接获取img的元素,然后提取图片链接,并向服务器发送请求获取到图片,再通过Python写二进制文件的方式写到本地图片文件。

url = 'http://www.spiderbuf.cn/playground/s05'

myheaders = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36'}

html = requests.get(url, headers=myheaders).text
print(html)

root = etree.HTML(html)
imgs = root.xpath('//img/@src')
print(imgs)
for item in imgs:
    img_data = requests.get('https://spiderbuf.cn' + item, headers=myheaders).content
    img = open(str(item).replace('/',''), 'wb')
    img.write(img_data)
    img.close()

除了图片之外,很多文件形式的数据爬虫都需要通过写二进制文件的方式写入到本地文件中。要注意的一点就是把扩展名从链接里面提取出来,加入到本地文件里面。要不然你的爬虫运行完之后还要一个一个地改扩展名。

完整示例代码:示例代码