【爬虫】图片爬取思路

该博客围绕Python爬虫爬取图片展开。介绍了判断图片直接链接的方法,以及将直接链接图片写入本地的操作。还探讨了在不知直接链接时,通过爬虫获取链接的方式,包括判断数据传输方式、查找直接链接等,并给出爬取图片的代码及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、知道图片的直接链接,怎么写入?

1、怎么判断是否是直接链接? 

 2、那么知道这个链接,我们怎么写进本地呢?

二、不知道直接链接怎么办? 

1、通过爬虫能获取直接链接吗?

2、怎么找到直接链接?

3、代码获取链接解析

三、爬取图片代码如下:

 运行结果如下:


一、知道图片的直接链接,怎么写入?

1、怎么判断是否是直接链接? 

如下图

2548b722740848cd8db68d4cf1fc0750.png

右击一个图片审查,查看源代码:

复制图片链接

8f2b2cb58fa547e8bff0ec1eca7faf09.png

打开该链接我们可以看到:

8e30d24f0d0744c48d7dfa9f2c90bf04.png

说明该链接就是图片的直接链接 

 2、那么知道这个链接,我们怎么写进本地呢?

先看代码:

需要如下环境 :

from PIL import Image
from io import BytesIO
​​​import requests
# -*- coding: utf-8 -*-
"""
@File  : 写入图片.py
@author: FxDr
@Time  : 2022/10/30 21:05


"""

from PIL import Image
from io import BytesIO
import requests


def save_image(filename, src):
    req = requests.get(src).content
    a = Image.open(BytesIO(req))
    a.save('{}.jpg'.format(filename))


if __name__ == '__main__':
    url = input("输入网页图片直接地址") # 'https://i03piccdn.sogoucdn.com/f31f0fd78642e386'
    name = input("请输入您要保存图片的名字:")
    save_image(name, url)

我们以这个猫为例,先获取链接,执行上面代码 

00bda7532a4b4671a9f2273f5f25947d.png

 734c7d6e54a241748d3f693388660a15.png

在当前文件目录下可以看到:cat.jpg

dcb48b2a294148b1b2463bd83044079d.png

       

二、不知道直接链接怎么办? 

1、通过爬虫能获取直接链接吗?

# -*- coding: utf-8 -*-
"""
@File  : 00.py
@author: FxDr
@Time  : 2022/10/30 22:38
"""
import requests

url = 'https://image.xxxxxxx'
r = requests.get(url, 'html.parser').text
print(r)

输出如下:

90f1d6a4567d4fe89e2dbebfdd86678c.png

我们在搜索从审查中找到的链接,找不到,说明是用ajax异步来传送的数据

我们可以再找到链接的时候先复制链接,然后 点击查看页面源代码 查找一下里面有没有这个地址

db2b9dba5b1c4c4eabd2dc512d4ad9bf.png

可以看到,找不到

2、怎么找到直接链接?

cf2d206635174e4681a12affee0f2fee.png

按ctrl+r刷新一下,并把页面往下拉 

c7ca076ce9bb4845bdccc7f96d526e9f.png

可以知道:

4eff87de6f444457a667312b5643b9a6.png

 直接链接在这:

所以我们复制这个作为url

dafd4cc72e754772a0cf77c476fc1a36.png

3、代码获取链接解析

# -*- coding: utf-8 -*-
"""
@File  : 爬取图片.py
@author: FxDr
@Time  : 2022/10/30 19:29
"""
# url:  https://imagexxxxxx

import requests
import json
from bs4 import BeautifulSoup

url = 'https://image.baidu.com/search/albumsdata?pn=30&rn=30&tn=albumsdetail&word=%E4%BA%BA%E7%89%A9&album_tab=%E7%BB%98%E7%94%BB&album_id=523&ic=0&curPageNum=1'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit.......',
    'Host': '.........',
    'Accept': '.......'
}

req = requests.get(url, headers=headers).content
soup = BeautifulSoup(req, 'html.parser')
img_json = json.loads(soup.text) # 加载为json文件
# print(img_json)
img_urls = img_json['albumdata']['linkData']
# print(img_url)
for img_url in img_urls:
    print(img_url['thumbnailUrl'])

 如下:获取到了链接,c1763bb5b155406e8bc18efce5653209.png

再然后就是用第一点讲的写入就行

(这里我用了另一种方法,即with open(filename,'wb') as f:

三、爬取图片代码如下:

参考了这位大佬:Python爬取图片_Mr.Haley的博客-优快云博客_python爬取图片

# -*- coding: utf-8 -*-
"""
@File  : 爬取图片.py
@author: FxDr
@Time  : 2022/10/30 19:29
"""
# 图片url  https://imagexxxxxx


import requests
import json
from bs4 import BeautifulSoup


class DownIma:
    def __init__(self):
        self.url = 'https://image.baidu.com/search/albumsdata?pn=30&rn=30&tn=albumsdetail&word=%E4%BA%BA%E7%89%A9&album_tab=%E7%BB%98%E7%94%BB&album_id=523&ic=0&curPageNum=1'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit......',
            'Accept': '......'
        }

    def GetUrls(self):
        req = requests.get(self.url, headers=self.headers).text
        img_json = json.loads(req)
        # print(img_json)
        img_urls = img_json['albumdata']['linkData']
        # print(img_url)
        urls = []

        for img_url in img_urls:
            print(img_url['thumbnailUrl'])
            urls.append(img_url['thumbnailUrl'])
        return urls

        # for each in urls:
        #  print(each)

    def DownLoad(self, u):
        i = 1
        for each in u:
            filename = r"H:/Project/PPython/Python1/AAA/img/pa/img0{}.jpg".format(i)
            # urls.append(img_url['thumbnailUrl'])
            req = requests.get(each, headers=self.headers).content
            with open(filename, "wb") as f:
                f.write(req)
                print(filename)
                i += 1


if __name__ == "__main__":
    a = DownIma()
    a.DownLoad(a.GetUrls())

 运行结果如下:

f94e339cee2b485ca01c1e1e2726477e.png

 67d58336fb4d462db69059dbfbe30483.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值