admin管理员组

文章数量:1794759

使用Requests爬取网页图片并保存

使用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