zoukankan      html  css  js  c++  java
  • python 图片爬虫抓取图片系列二——爬取指定网页中的图片精细版

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

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

    爬虫的基本思路别忘了:

    1. 指定要抓取的链接然后抓取网站源代码

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

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

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

    1. 提取网页使用的是 requests 库

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

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

    具体代码如下图所示:

     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 所在的代码,鼠标放着,就可以看到绝对路径,然后根据这个绝对路径设置需要添加的缺少部分,如下图所示:

     

     
  • 相关阅读:
    CVE-20117-111882漏洞复现及利用
    如何查看QQ坦白说来自谁
    2018 巅峰极客CTF misc writeup
    屏幕截图
    Unity中设置屏幕常亮
    面向对象设计原则
    【转】Unity资源管理原理知识(干货不嫌长)
    给指定的图片增加水印
    统计一个目录下各种文件类型及个数
    JDK 开发环境配置
  • 原文地址:https://www.cnblogs.com/ttweixiao-IT-program/p/13359741.html
Copyright © 2011-2022 走看看