js判断图片的网络地址是否有效

81 篇文章 7 订阅

判断图片的网络地址是否有效

方法:利用 HTML DOM Image 对象

Image 对象提供了两个事件,分别是:onerror & onload

用法如下:

// new Image对象
const IMG = new Image();
// 设置路径
IMG.src = yourImgPath;
// 当图像装载完毕时调用的事件句柄
IMG.onload = ()=>{
	console.log('load事件加载')}
// 在装载图像的过程中发生错误时调用的事件句柄
IMG.onerror = ()=>{
	console.log('error事件加载')}

举例说明:

  • 现在有一个网络地址图片,判断地址是否可用,如果可用,则把地址赋给 loadImg 变量,否则把 assets/image/no.jpg 这个本地路径赋值给 loading 变量。
let loading: string;
// 图片地址
const url = 'https://profile.csdnimg.cn/2/1/8/3_s_y_w123';

const IMG = new Image();
IMG.src = url;

IMG.onload = ()=>{
	loading = url;
}
IMG.onerror = ()=>{
	loading = 'assets/image/no.jpg';
}

上面的方法 其实和 使用ajax请求一下图片地址,然后判断返回状态的方法,二者本质是一样的,都是通过网络请求的返回状态来判断的。

  • 不过区别就是,一个是ajax,一个是使用的Image对象。

  • 当然这两者还有一个共同点,就是不可避免的都会造成异步问题。

  • 关于请求造成的异步,相信大家有自己的解决办法,比如使用 promise 或者 发布订阅机制。

对于单独的某一张图片都好解决,但是不确定张数呢?我这里提出一个我面临的问题:

有一个图片数组,当我遍历这个数组取出图片路径,然后调用图片路径判断方法之后。

  • 如何知道所有发生错误的图片都已经判断完成,或者说 怎么知道所有发生错误的图片中最后一张错误判断onerror执行完成了。
const imgArr = [...];
imgArr.forEach(item=>{
    const IMG = new Image();
    IMG.src = item;
    IMG.onerror = () => {
        console.log('图片发生错误');
        # 如何知道本次执行的是最后一张发生错误的图片
    }
});

当然,我们可以设置一个全局变量 count = 1;无论图片加载成功或失败都让count++,然后判断 count 是否和图片数组的length相等即可。
但是这样势必要走完所有图片地址才知道结果,有没有更加高效的呢?

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 爬取图片返回空列表可能有以下几个原因: 1. 爬取的网页没有包含任何图片:在爬取图片之前,需要确定目标网页中确实包含图片,可以通过查看网页源代码或使用开发者工具进行确认。如果网页确实没有图片,那么爬取图片就会返回空列表。 2. 爬取的网页中的图片链接有误:在爬取图片时,需要确保获取到的图片链接正确无误。可以使用正则表达式或其他方法提取出图片链接,并验证链接的有效性,如果链接有误,那么爬取图片就会返回空列表。 3. 爬取图片的规则或代码有误:在编写爬虫代码时,可能存在错误导致无法正确爬取图片。可能是爬虫的规则设置有误,没有正确指定图片的XPath路径或CSS选择器,或者在编写代码时出现了错误导致爬取失败。可以仔细检查代码,确认规则和代码的正确性。 4. 爬取过程中出现反爬机制:有些网站为了防止被爬取,会采取一些反爬机制,例如设置图片链接的防盗链,验证码等。如果爬取的目标网站存在反爬机制,需要找到对应的处理方法才能成功爬取图片。 总之,爬取图片返回空列表可能是因为目标网页没有图片图片链接有误、爬虫规则或代码有误,或者被网站设置了反爬机制。需要仔细检查代码、验证链接有效性,并对可能的反爬机制进行处理,才能确保成功爬取到目标图片。 ### 回答2: 当爬取图片返回空列表时,可能出现以下几种情况: 1. 网络问题:可能是因为网络连接不稳定或者网站服务器不可用而导致爬取图片失败。可以尝试重新连接网络或者换一个可用的网络环境再次尝试爬取。 2. 爬取规则问题:可能是因为爬取规则设置不正确导致爬取的图片为空。比如,爬取的目标网页上图片的标签或路径发生了变化,导致爬虫无法正确识别和提取图片。可以检查爬虫代码中的匹配规则是否仍然有效,并且确认图片的URL地址是否有变化。 3. 权限问题:某些网站可能设置了访问权限,需要登录或者拥有特定的授权才能够爬取图片。如果没有正确的登录或者授权,就无法获取图片,返回空列表。在这种情况下,需要模拟登录或者使用相应的授权信息来进行爬取。 4. 爬取目标网页没有图片:有时候,目标网页可能没有包含任何图片,所以爬取结果就是空列表。可以手动查看目标网页,确认是否图片可供爬取。 除了以上几种情况外,还可能存在其他因素导致爬取图片返回空列表。可以进一步检查爬虫代码以及目标网页,并通过调试和日志来判断具体的错误原因,从而找到解决办法。 ### 回答3: 当爬取图片时,返回空列表可能有以下几个原因: 1. 链接错误:在爬取图片时,首先需要获取图片的链接。如果链接错误或者无效,就无法下载到图片,返回的列表将会是空的。 2. 网页解析错误:爬取图片需要从网页中提取出图片的链接,如果解析网页时出错,就无法正常获取图片链接,返回的列表将会是空的。 3. 权限限制:有些网站或者特定网页可能会对爬虫进行限制,防止爬取图片或其他敏感信息。如果遇到这种情况,即使有正确图片链接,爬虫也无法正常下载图片,返回的列表将会是空的。 4. 页面加载问题:有些网页可能会使用 JavaScript 或 Ajax 技术动态加载图片,如果没有正确处理这些动态加载的内容,导致无法获取到图片链接,返回的列表将会是空的。 为了解决这些问题,我们可以采取以下措施: 1. 检查链接的正确性:确保爬取的图片链接是有效的,可以手动访问链接来验证是否能够正常打开图片。 2. 更新网页解析方法:使用合适的解析库(例如 BeautifulSoup 或者 PyQuery)来解析网页,确保能够正确提取出图片链接。 3. 处理权限限制:如果遇到爬虫被限制的情况,可以尝试使用代理服务器、模拟浏览器行为或者进行身份验证等方法来规避限制。 4. 处理动态加载:如果页面使用 JavaScript 或 Ajax 技术加载图片,可以使用模拟浏览器行为、动态加载页面内容的库(例如 Selenium)来处理动态加载的内容,确保能够获取到图片链接。 总之,爬取图片返回空列表可能是由于链接错误、网页解析错误、权限限制或者页面加载问题导致的,通过检查链接的正确性、更新网页解析方法、处理权限限制和动态加载等措施可以解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值