Python爬虫抓取指定网页图片代码实例


Posted in Python onJuly 24, 2020

想要爬取指定网页中的图片主要需要以下三个步骤:

(1)指定网站链接,抓取该网站的源代码(如果使用google浏览器就是按下鼠标右键 -> Inspect-> Elements 中的 html 内容)

(2)根据你要抓取的内容设置正则表达式以匹配要抓取的内容

(3)设置循环列表,重复抓取和保存内容

以下介绍了两种方法实现抓取指定网页中图片

(1)方法一:使用正则表达式过滤抓到的 html 内容字符串

# 第一个简单的爬取图片的程序
import urllib.request # python自带的爬操作url的库
import re # 正则表达式


# 该方法传入url,返回url的html的源代码
def getHtmlCode(url):
  # 以下几行注释的代码在本程序中有加没加效果一样,但是为了隐藏自己避免被反爬虫可以假如这个伪装的头部请求
  headers = {
    'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \
    AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36'
  }
  # 将headers头部添加到url,模拟浏览器访问
  url = urllib.request.Request(url, headers=headers)

  # 将url页面的源代码保存成字符串
  page = urllib.request.urlopen(url).read()
  # 字符串转码
  page = page.decode('UTF-8')
  return page


# 该方法传入html的源代码,通过截取其中的img标签,将图片保存到本机
def getImage(page):
  # [^\s]*? 表示最小匹配, 两个括号表示列表中有两个元组
  # imageList = re.findall(r'(https:[^\s]*?(png))"', page)
  imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page)
  x = 0
  # 循环列表
  for imageUrl in imageList:
    try:
      print('正在下载: %s' % imageUrl[0])
      # 这个image文件夹需要先创建好才能看到结果
      image_save_path = './image/%d.png' % x
      # 下载图片并且保存到指定文件夹中
      urllib.request.urlretrieve(imageUrl[0], image_save_path)
      x = x + 1
    except:
      continue
  pass
if __name__ == '__main__':
  # 指定要爬取的网站
  url = "https://www.cnblogs.com/ttweixiao-IT-program/p/13324826.html"
  # 得到该网站的源代码
  page = getHtmlCode(url)
  # 爬取该网站的图片并且保存
  getImage(page)
  # print(page)

注意,代码中需要修改的就是imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page) 这一块内容,如何设计正则表达式需要根据你想要抓取的内容设置。我的设计来源如下:

Python爬虫抓取指定网页图片代码实例

可以看到,因为这个网页上的图片都是 png 格式,所以写成imageList = re.findall(r'(https:[^\s]*?(png))"', page)也是可以的。

(2)方法二:使用 BeautifulSoup 库解析 html 网页

from bs4 import BeautifulSoup # BeautifulSoup是python处理HTML/XML的函数库,是Python内置的网页分析工具
import urllib # python自带的爬操作url的库


# 该方法传入url,返回url的html的源代码
def getHtmlCode(url):
  # 以下几行注释的代码在本程序中有加没加效果一样,但是为了隐藏自己避免被反爬虫可以假如这个伪装的头部请求
  headers = {
    'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \
    AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36'
  }
  # 将headers头部添加到url,模拟浏览器访问
  url = urllib.request.Request(url, headers=headers)

  # 将url页面的源代码保存成字符串
  page = urllib.request.urlopen(url).read()
  # 字符串转码
  page = page.decode('UTF-8')
  return page


# 该方法传入html的源代码,通过截取其中的img标签,将图片保存到本机
def getImage(page):
  # 按照html格式解析页面
  soup = BeautifulSoup(page, 'html.parser')
  # 格式化输出DOM树的内容
  print(soup.prettify())
  # 返回所有包含img标签的列表,因为在Html文件中图片的插入呈现形式是<img src="..." alt=".." />
  imgList = soup.find_all('img')
  x = 0
  # 循环找到的图片列表,注意,这里手动设置从第2张图片开始,是因为我debug看到了第一张图片不是我想要的图片
  for imgUrl in imgList[1:]:
    print('正在下载: %s ' % imgUrl.get('src'))
    # 得到scr的内容,这里返回的就是Url字符串链接,如'https://img2020.cnblogs.com/blog/1703588/202007/1703588-20200716203143042-623499171.png'
    image_url = imgUrl.get('src')
    # 这个image文件夹需要先创建好才能看到结果
    image_save_path = './image/%d.png' % x
    # 下载图片并且保存到指定文件夹中
    urllib.request.urlretrieve(image_url, image_save_path)
    x = x + 1
if __name__ == '__main__':
  # 指定要爬取的网站
  url = 'https://www.cnblogs.com/ttweixiao-IT-program/p/13324826.html'
  # 得到该网站的源代码
  page = getHtmlCode(url)
  # 爬取该网站的图片并且保存
  getImage(page)

这两种方法各有利弊,我觉得可以灵活结合使用这两种方法,比如先使用方法2中指定标签的方法缩小要寻找的内容范围,然后再使用正则表达式匹配想要的内容,这样做起来更加简洁明了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python open读写文件实现脚本
Sep 06 Python
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
python3实现单目标粒子群算法
Nov 14 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
Python读取表格类型文件代码实例
Feb 17 Python
Python如何省略括号方法详解
Mar 21 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 Python
详解Flask前后端分离项目案例
Jul 24 #Python
通过实例了解Python异常处理机制底层实现
Jul 23 #Python
Python异常处理机制结构实例解析
Jul 23 #Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 #Python
Python字符串函数strip()原理及用法详解
Jul 23 #Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 #Python
Python中Selenium库使用教程详解
Jul 23 #Python
You might like
php文件上传的例子及参数详解
2013/12/12 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
用PHP代码给图片加水印
2015/07/01 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
python实现统计代码行数的方法
2015/05/22 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
基于python实现雪花算法过程详解
2019/11/16 Python
tensorflow 变长序列存储实例
2020/01/20 Python
基于Python fminunc 的替代方法
2020/02/29 Python
Python urllib.request对象案例解析
2020/05/11 Python
python不同系统中打开方法
2020/06/23 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
竞选卫生委员演讲稿
2014/04/28 职场文书
分公司任命书
2014/06/06 职场文书
庆国庆活动总结
2014/08/28 职场文书
地道战观后感300字
2015/06/04 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS