Python 爬虫批量爬取网页图片保存到本地

其实和爬取普通数据本质一样,不过我们直接爬取数据会直接返回,爬取图片需要处理成二进制数据保存成图片格式(.jpg,.png等)的数据文本。

现在贴一个url=https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-001.jpg
请复制上面的url直接在某个浏览器打开,你会看到如下内容:
在这里插入图片描述
这就是通过网页访问到的该网站的该图片,于是我们可以直接利用requests模块,进行这个图片的请求,于是这个网站便会返回给我们该图片的数据,我们再把数据写入本地文件就行,比较简单。

import requests
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
url='https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-001.jpg'
re=requests.get(url,headers=headers)
print(re.status_code)#查看请求状态,返回200说明正常
path='test.jpg'#文件储存地址
with open(path, 'wb') as f:#把图片数据写入本地,wb表示二进制储存
            for chunk in re.iter_content(chunk_size=128):
                f.write(chunk)

然后得到test.jpg图片,如下
在这里插入图片描述
点击打开查看如下:
在这里插入图片描述便是下载成功辣,很简单吧。

现在分析下批量下载,我们将上面的代码打包成一个函数,于是针对每张图片,单独一个名字,单独一个图片文件请求,于是有如下代码:

import requests
def get_pictures(url,path):
    headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'} 
    re=requests.get(url,headers=headers)
    print(re.status_code)#查看请求状态,返回200说明正常
    with open(path, 'wb') as f:#把图片数据写入本地,wb表示二进制储存
                for chunk in re.iter_content(chunk_size=128):
                    f.write(chunk)
url='https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-001.jpg'
path='test.jpg'#文件储存地址
get_pictures(url,path)

现在要实现批量下载图片,也就是批量获得图片的url,那么我们就得分析网页的代码结构,打开原始网站https://www.ivsky.com/tupian/bianxingjingang_v622/,会看到如下的图片:
在这里插入图片描述
于是我们需要分别得到该页面中显示的所有图片的url,于是我们再次用requests模块返回当前该页面的内容,如下:

import requests
headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
url='https://www.ivsky.com/tupian/bianxingjingang_v622/'
re=requests.get(url,headers=headers)
print(re.text)

运行会返回当前该页面的网页结构内容,于是我们找到和图片相关的也就是.jpg或者.png等图片格式的字条,如下:
在这里插入图片描述
上面圈出来的**//img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-017.jpg**便是我们的图片url,不过还需要前面加上https:,于是完成的url就是https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-017.jpg。

我们知道了这个结构,现在就是把这个提取出来,写个简单的解析式:

import requests
headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
url='https://www.ivsky.com/tupian/bianxingjingang_v622/'
re=requests.get(url,headers=headers)
def get_pictures_urls(text):
    st='img src="'
    m=len(st)
    i=0
    n=len(text)
    urls=[]#储存url
    while i<n:
        if text[i:i+m]==st:
            url=''
            for j in range(i+m,n):
                if text[j]=='"':
                    i=j
                    urls.append(url)
                    break
                url+=text[j]
        i+=1
    return urls
urls=get_pictures_urls(re.text)
for url in urls:
    print(url)

打印结果如下:
在这里插入图片描述
得到了url,现在就直接放入一开始的get_pictures函数中,爬取图片辣。

import requests
def get_pictures(url,path):
    headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
    re=requests.get(url,headers=headers)
    print(re.status_code)#查看请求状态,返回200说明正常
    with open(path, 'wb') as f:#把图片数据写入本地,wb表示二进制储存
                for chunk in re.iter_content(chunk_size=128):
                    f.write(chunk)
def get_pictures_urls(text):
    st='img src="'
    m=len(st)
    i=0
    n=len(text)
    urls=[]#储存url
    while i<n:
        if text[i:i+m]==st:
            url=''
            for j in range(i+m,n):
                if text[j]=='"':
                    i=j
                    urls.append(url)
                    break
                url+=text[j]
        i+=1
    return urls

headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
url='https://www.ivsky.com/tupian/bianxingjingang_v622/'
re=requests.get(url,headers=headers)
urls=get_pictures_urls(re.text)#获取当前页面所有图片的url
for i in range(len(urls)):#批量爬取图片
    url='https:'+urls[i]
    path='变形金刚'+str(i)+'.jpg'
    get_pictures(url,path)

结果如下:
在这里插入图片描述
然后就完成辣,这里只是简单介绍下批量爬取图片的过程,具体的网站需要具体分析,所以本文尽可能详细的展示了批量爬取图片的过程分析,希望对你的学习有所帮助,如有问题请及时指出,谢谢~

好的,以下是用Python爬虫爬取图片的步骤: 1. 导入需要的库:requests、os、urllib。 2. 使用requests库发送请求,获取网页的HTML源代码。 3. 使用BeautifulSoup库解析HTML源代码,获取图片的URL地址。 4. 使用os库创建一个本地文件夹,用于存储下载的图片。 5. 使用urllib库下载图片,并保存在本地文件夹中。 6. 将上述步骤封装成函数,可用于批量下载图片。 下面是一个简单的代码示例: ``` import requests import os from bs4 import BeautifulSoup import urllib def download_images(url, folder_path): # 发送请求,获取HTML源代码 response = requests.get(url) html = response.text soup = BeautifulSoup(html, 'html.parser') # 查找所有的图片标签 img_tags = soup.findAll('img') # 创建本地文件夹 os.makedirs(folder_path, exist_ok=True) # 遍历所有图片标签,下载图片保存到本地文件夹中 for img_tag in img_tags: img_url = img_tag.get('src') if img_url: img_path = os.path.join(folder_path, img_url.split('/')[-1]) urllib.request.urlretrieve(img_url, img_path) # 调用函数,下载图片 download_images('https://www.example.com', 'images') ``` 上述代码中,函数`download_images`接受两个参数:`url`表示要下载图片的网页URL地址,`folder_path`表示要保存下载图片的本地文件夹路径。函数使用requests库发送请求,获取HTML源代码,然后使用BeautifulSoup库解析HTML代码,查找所有的图片标签,遍历所有图片标签,下载图片保存到本地文件夹中。最后调用`download_images`函数,传入相应的参数即可完成图片下载。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值