python 图片爬虫抓取图片系列二——爬取指定网页中的图片精细版

 

来自 《Python项目案例开发从入门到实战》(清华大学出版社 郑秋生 夏敏捷主编)中爬虫应用——抓取百度图片html

本文使用 request 库来爬取某个网站的图片,前面几章博客介绍了如何使用 urllib 库来抓取网页,本文主要使用的是 request 库来抓取网页内容,使用方法基本一致,但 request 方法相对简单一些正则表达式

爬虫的基本思路别忘了:函数

1. 指定要抓取的连接而后抓取网站源代码网站

2. 提取你想要的内容,好比你想要爬取图片信息,能够选择用正则表达式过滤或者使用提取 <img /> 标签的方法编码

3. 循环获得的要爬取内容列表,保存文件url

这里的代码和本人博客前几章(图片爬虫系列一)的差别在于:spa

1. 提取网页使用的是 reques 库code

2. 保存图片的时候后缀不固定使用 png 或者 jpg,而是使用图片自己的后缀名htm

3. 保存图片的时候不使用 urllib.request.urlretrieve 函数,而是使用文件的读写操做来保存图片blog

具体代码以下图所示:

 1 # 使用requests、bs4库下载华侨大学主页上的全部图片
 2 import os  3 import requests  4 from bs4 import BeautifulSoup  5 import shutil  6 from pathlib import Path  # 关于文件路径操做的库,这里主要为了获得图片后缀名
 7 
 8 
 9 # 该方法传入url,返回url的html的源代码
10 def getHtmlCode(url): 11     # 假装请求的头部来隐藏本身
12     headers = { 13         'User-Agent': 'MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0'
14  } 15     # 获取网页
16     r = requests.get(url, headers=headers) 17     # 指定网页解析的编码格式
18     r.encoding = 'UTF-8'
19     # 获取url页面的源代码字符串文本
20     page = r.text 21     return page 22 
23 
24 # 该方法传入html的源代码,经过截取其中的img标签,将图片保存到本机
25 def getImg(page, localPath): 26     # 判断文件夹是否存在,存在则删除,最后都要从新新的文件夹
27     if os.path.exists(localPath): 28  shutil.rmtree(localPath) 29  os.mkdir(localPath) 30 
31     # 按照Html格式解析页面
32     soup = BeautifulSoup(page, 'html.parser') 33     # 返回的是一个包含全部img标签的列表
34     imgList = soup.find_all('img') 35     x = 0 36     # 循环url列表
37     for imgUrl in imgList: 38         try: 39             # 获得img标签中的src具体内容
40             imgUrl_src = imgUrl.get('src') 41             # 排除 src='' 的状况
42             if imgUrl_src != '': 43                 print('正在下载第 %d : %s 张图片' % (x+1, imgUrl_src)) 44                 # 判断图片是不是从绝对路径https开始,具体为何这样操做能够看下图所示
45                 if "https://" not in imgUrl_src: 46                     m = 'https://www.hqu.edu.cn/' + imgUrl_src 47                     print('正在下载: %s' % m) 48                     # 获取图片
49                     ir = requests.get(m) 50                 else: 51                     ir = requests.get(imgUrl_src) 52                 # 设置Path变量,为了使用Pahtlib库中的方法提取后缀名
53                 p = Path(imgUrl_src) 54                 # 获得后缀,返回的是如 '.jpg'
55                 p_suffix = p.suffix 56                 # 用write()方法写入本地文件中,存储的后缀名用原始的后缀名称
57                 open(localPath + str(x) + p_suffix, 'wb').write(ir.content) 58                 x = x + 1
59         except: 60             continue
61 
62 
63 if __name__ == '__main__': 64     # 指定爬取图片连接
65     url = 'https://www.hqu.edu.cn/index.htm'
66     # 指定存储图片路径
67     localPath = './img/'
68     # 获得网页源代码
69     page = getHtmlCode(url) 70     # 保存图片
71     getImg(page, localPath)

 

注意,为何判断图片链接是否从 "https://" 开始主要是由于咱们下载图片须要完整的绝对路径,而这个得来须要看原网页代码,选择一张图片,点击 html 所在的代码,鼠标放着,就能够看到绝对路径,而后根据这个绝对路径设置须要添加的缺乏部分,以下图所示:

 

相关文章
相关标签/搜索