admin管理员组文章数量:1794759
使用Requests爬取网页图片并保存
目标
爬取糗事百科上的“热图”的图片并保存在一个新建文件夹当中
过程 一、获得当前网页使用的是Requests爬虫,在使用requests库爬取网页中有介绍。
import requests r = requests.get('www.qiushibaike/imgrank/')#获取网页链接 rtext = r.text #rtext #打开用来查看是否获取成功 二、解析网页并提取图片这里使用正则表达式,在正则表达式中有介绍。 首先,我们浏览器打开要爬取的网页,审查元素,定位到图片位置 通过观察,所有图片都位于 class=thumb的div的img 下 我们将这片代码拿出来观察
<div class="thumb"> <a href="/article/123937399" target="_blank"> <img src="//pic.qiushibaike/system/pictures/12393/123937399/medium/KPE3TKKQTDJZN383.jpg" alt="糗事#123937399" class="illustration" width="100%" height="auto"> </a> </div>设计正则表达式
ex = '<div class="thumb"> .*?<img src="(.*?)" alt.*?</div>' import re ex = '<div class="thumb"> .*?<img src="(.*?)" alt.*?</div>' imglist = re.findall(ex,rtext,re.S)#搜索字符串;用于解析的都用re.S 三、保存图片需要用到os库,创建一个文件夹qiutulist,将爬取出来的图片保存进去,但是需要注意保存图片的名字不能重复。
import os if not os.path.exists('./qiutulibs'): os.mkdir('./qiutulibs')#如果该目录不存在,则创新一个 for src in imglist: src = 'http:'+src#拼接成一个完整的链接 imgdata = requests.get(src).content#请求到了图的二进制数据 #生成图片名称 imgname = src.split('/')[-1] #图片存储路径 imgpath = './qiutulibs/'+imgname with open(imgpath,'wb') as fp: fp.write(imgdata) print(imgname,'下载成功!')split()函数语法:str.split(str="",num=string.count(str))[n] 参数说明: str:表示为分隔符,默认为空格,但是不能为空(’’)。若字符串中没有分隔符,则把整个字符串作为列表的一个元素 num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量 [n]:表示选取第n个分片
另外 with open() as fp 的用法
整合 import requests import re import os#文件 #创建文件夹,用来保存所有图片 if not os.path.exists('./qiutulibs'): os.mkdir('./qiutulibs') r = requests.get('www.qiushibaike/imgrank/') rtext = r.text ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>' imglist=re.findall(ex,rtext,re.S) #img for src in imglist: src = 'http:'+src#拼接成一个完整的链接 imgdata = requests.get(src).content#请求到了图的二进制数据 #生成图片名称 imgname = src.split('/')[-1] #图片存储路径 imgpath = './qiutulibs/'+imgname with open(imgpath,'wb') as fp: fp.write(imgdata) print(imgname,'下载成功!')
==============================================================================
进阶 实现多页爬取上述方法智能爬取一页的图片,但该系列有13页,这就需要分页爬取
分析第二页链接:www.qiushibaike/imgrank/page/2/ 第三页链接:www.qiushibaike/imgrank/page/3/ … 并且www.qiushibaike/imgrank/page/1/也能打开第一页链接 由此,可以设置一个模板链接,拼接到后面的数字
url='www.qiushibaike/imgrank/page/' for pagenum in range(1,13): pagen = 'pagenum'#这里要注意字符串的转化,否则会报错 rurl = format(url+pagen)#对应页码的url #把上述代码的解析都放在这个循环里 实现 #分页爬取 import requests import re import os#文件 #创建文件夹,用来保存所有图片 if not os.path.exists('./qiutulibs'): os.mkdir('./qiutulibs') #设置一个通用url模板 url='www.qiushibaike/imgrank/page/' #pagenum = 2 www.qiushibaike/imgrank/page/1/ for pagenum in range(1,13): pagen = 'pagenum' rurl = format(url+pagen)#对应页码的url r = requests.get(rurl) r.encoding='utf-8' rtext = r.text #解析操作 ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>' imglist=re.findall(ex,rtext,re.S) #img for src in imglist: src = 'http:'+src#拼接成一个完整的链接 imgdata = requests.get(src).content#请求到了图的二进制数据 #生成图片名称 imgname = src.split('/')[-1] #图片存储路径 imgpath = './qiutulibs/'+imgname with open(imgpath,'wb') as fp: fp.write(imgdata) print(imgname,'下载成功!')版权声明:本文标题:使用Requests爬取网页图片并保存 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686623441a87572.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论