使⽤requests爬取图⽚并下载
⼀、爬⾍实现⽅式
  使⽤requests访问⽹页,获取⽹页源码后,使⽤BeautifulSoup抓取的数据进⾏分析,拿取到需要的数据(图⽚的url地址),然后再根据地址将图⽚保存到本地
  使⽤前需要安装好第三⽅库requests和BeautifulSoup,requests获取页⾯所有数据,BeautifulSoup对数据进⾏处理
⼆、使⽤requests访问⽹址
  使⽤requests函数来访问需要爬取图⽚的地址,然后获取对应的返回数据
requests的常⽤返回数据⽅法:
ding                      #获取当前的编码
ding = 'utf-8'#设置编码
                          #以encoding解析返回内容。字符串⽅式的响应体,会⾃动根据响应头部的字符
编码进⾏解码。
t                        #以字节形式(⼆进制)返回。字节⽅式的响应体,会⾃动为你解码 gzip 和 deflate 压缩。
5 r.headers                        #以字典对象存储服务器响应头,但是这个字典⽐较特殊,字典键不区分⼤⼩写,若键不存在则返回None
6 r.status_code                    #响应状态码
7 r.raw                            #返回原始响应体,也就是 urllib 的 response 对象,使⽤ ad()
8 r.ok                              # 查看r.ok的布尔值便可以知道是否登陆成功
9#*特殊⽅法*#
10 r.json()                        #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
11 r.raise_for_status()            #失败请求(⾮200响应)抛出异常
def page(self,url=None,photoheadr_url = None):
print("-----开始爬取图⽚-----")
if url is None:
print('请输⼊url')
return
request = (url)
if request.status_code != 200:
print("url请求失败,请检查url:%s" % url)
return
pagehtml =
print("页⾯HTML获取成功,url为:%s" % url)
self.htmldownload(pagehtml,photoheadr_url)  #调⽤下载图⽚函数
将获取到的页⾯的所有的数据,给到BeautifulSoup进⾏处理,获取想要的数据
三、下载和保存图⽚
拿取到页⾯的数据后,对数据进⾏处理:
pagehtml为刚刚获取到的页⾯的源码,使⽤
1def htmldownload(self,pagehtml,photoheadr_url = None):
2'''下载图⽚'''
3        img_urls = []图片爬虫app
4        soup = BeautifulSoup(pagehtml, 'html.parser')
5# imgs = soup.find_all("img" ,src=repile("(.*)") )  #获取图⽚的img
6        imgs = soup.find_all("img")  # 获取图⽚的img
7if len(imgs) is 0:
8print("当前页⾯没有到img标签。请检查页⾯是否有图⽚(或图⽚是否在img标签⾥)")
9return
10else:
11print("页⾯图⽚数为:%d " % len(imgs) )
12print("img标签内容为:\n%s " %  imgs)
13for img in imgs:
14try:
15                photo_url = img['src']  # 获取所有的链接,默认去查的src下的路径,如果路径不在src,修改对应的查内容就可以了
16                new_full_url = parse.urljoin(photoheadr_url,photo_url) #将从src获取的路径拼成⼀个完整的,如果没有就不需要拼
17                img_urls.append(new_full_url)
18except Exception as e:
19print("img标签⾥src路径获取失败,请检查img标签内容")
20print("报错内容: %s" % e)
21print('图⽚url获取完成:\n%s' % img_urls)
22        self.ssave_image(img_urls)
完整代码如下:
1import requests
2import os          # ⽤于指定⽂件的保存地址
3from bs4 import BeautifulSoup
4from urllib import parse
5from urllib.parse import urlparse
6
7
8class pachong(object):
9'''获取页⾯HTML并提取图⽚url'''
10def page(self,url=None,photoheadr_url = None):
11print("-----开始爬取图⽚-----")
12if url is None:
13print('请输⼊url')
14return
15        request = (url)
16        ding = 'utf-8'
17if request.status_code != 200:
18print("url请求失败,请检查url:%s" % url)
19return
20        pagehtml =
21print("页⾯HTML获取成功,url为:%s" % url)
22        self.htmldownload(pagehtml,photoheadr_url)  #调⽤下载图⽚函数
23
24def htmldownload(self,pagehtml,photoheadr_url = None):
25'''下载图⽚'''
26        img_urls = []
27        soup = BeautifulSoup(pagehtml, 'html.parser')
28# imgs = soup.find_all("img" ,src=repile("(.*)") )  #获取图⽚的img
29        imgs = soup.find_all("img")  # 获取图⽚的img
30if len(imgs) is 0:
31print("当前页⾯没有到img标签。请检查页⾯是否有图⽚(或图⽚是否在img标签⾥)")
32return
33else:
34print("页⾯图⽚数为:%d " % len(imgs) )
35print("img标签内容为:\n%s " %  imgs)
36for img in imgs:
37try:
38                photo_url = img['src']  # 获取所有的链接,默认去查的src下的路径,如果路径不在src,修改对应的查内容就可以了
39                new_full_url = parse.urljoin(photoheadr_url,photo_url) #将从src获取的路径拼成⼀个完整的,如果没有就不需要拼
40                img_urls.append(new_full_url)
41except Exception as e:
42print("img标签⾥src路径获取失败,请检查img标签内容")
43print("报错内容: %s" % e)
44print('图⽚url获取完成:\n%s' % img_urls)
45        self.ssave_image(img_urls)
46
47def ssave_image(self,img_urls = None):
48'''保存图⽚到本地'''
49if  img_urls is None or len(img_urls) == 0:
50print("下载时未到图⽚url,请检查图⽚下载地址和img标签内的属性")
51return
52        cur_path = os.path.abspath(os.curdir)  # 获取当前绝对路径
53        goal_path = cur_path + '\\' + 'imgs'# 想将⽂件保存的路径
54if not ists(goal_path):  # os.path.isfile('') 判断⽂件夹/⽂件是否存在
55            os.mkdir(goal_path)  # 创建⽂件夹
56print("创建imgs⽂件夹成功,准备下载图⽚")
57else:
58print("已有imgs⽂件夹,准备下载图⽚")
59for img in img_urls:
61            file_path = urlparse(img).path.split('/')[-1]
62            file_path = "{0}".format(file_path)  #⽣成⽂件⽤来存放图⽚,名称为取的名称
63try:
64                photo = (img)
65if photo.status_code == 200:
66                    with open(goal_path + '\\' + file_path, 'wb')as f:
67                        f.t)
68                        f.close()
69print("图⽚:%s 下载完成" % file_path)
70except Exception as e:
71print("下载图⽚:%s 失败,请检查图⽚下载url" % file_path)
72print ('报错内容:%s ' % e)
73print("爬取图⽚完成")
74
75if__name__ == '__main__':
76    a = pachong()
77    a.page('the86driver/blog/29','the86driver')
78    a.page("www.nipic/topic/show_27400_1.html")
BeautifulSoup

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。