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中dictionary items()系列函数的用法实例
Aug 21 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
Python网络爬虫出现乱码问题的解决方法
Jan 05 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
Django 框架模型操作入门教程
Nov 05 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
python之生成多层json结构的实现
Feb 27 Python
python+OpenCV实现图像拼接
Mar 05 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
Feb 19 Python
快速一键生成Python爬虫请求头
Mar 04 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中文字符截取防乱码
2008/03/28 PHP
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
js获取页面description的方法
2015/05/21 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
Vue 组件封装 并使用 NPM 发布的教程
2018/09/30 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
Python常用模块介绍
2014/11/21 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
python实现图片转字符画的完整代码
2021/02/21 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
房地产财务部员工岗位职责
2014/03/12 职场文书
法律进学校实施方案
2014/03/15 职场文书
师德师风建设方案
2014/05/08 职场文书
广播体操口号
2014/06/18 职场文书
农村门前三包责任书
2014/07/25 职场文书
降价通知函
2015/04/23 职场文书