文章目录
前言
这篇文章是提取网页里的图片,是上一篇提取文本的下文。
提示:以下是本篇文章正文内容,下面案例可供参考
一、利用BeautifulSoup爬取图片
BeautifulSoup 是 python 的一个库,最主要的功能是从网页抓取数据。
二、遇到的问题
1.提取的图片链接总是报错:ValueError:invalid literal for int() with base 10: ‘image’
这个错误折磨了我很久,翻来覆去总是不知道怎么解决。错误如下所示:
终于有一天下午,我仔细观察了要爬取的图片的链接,也就是img标签下的伤src,才恍然明白,原来这里的图片链接并不是标准的HTTP地址。我在自己用别的网页(例如豆瓣,微博)来爬图片的时候,都没有遇到过这个问题,理所当然的也把这个网页里的src链接当成规范的的,怪不得用soup.find_all()提取到的链接都是奇怪的样子,还是经验太少。如下图所示:
解决此问题代码如下:
complete_img_src = 'https://academy.binance.com'+i.get('src')
即,把不完整的链接加上网站的头
2.怎么过滤掉目标网页中不需要的图片链接
解决了上一个问题,我以为程序可以正常运行了,结果,事情总是事与愿违!又是不知道哪里错了。把PyCharm里爆出的错误,到百度里去找,还有英文网站,但是就是没有解决办法。也是突然间,我想到了一个办法,把所有获取的图片链接,打印出来,看看是哪里出现了错误,于是就有了最终的代码里的各种注释。
打印出来所有的img链接,突然发现,第一个img标签里的src链接很奇怪,根本就是我需要的链接。这才明白原理问题出在这里。由于解决这个Bug过于高兴,忘了截图,就不放图了。
解决第一个链接不是目标链接的办法,分析几张图片链接的形式,用start_with函数过滤一下:
if img_src.startswith('/_next/image?url=https'):
三、代码和结果截图
下图是爬取到的图片,这是一个国外的网站,我还用的VPN,速度很慢,为了提高速度,只爬取了两页文章的封面图: