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实现的手机号归属地相关信息查询功能示例
Jun 08 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
python 求10个数的平均数实例
Dec 16 Python
pytorch之添加BN的实现
Jan 06 Python
Python hashlib常见摘要算法详解
Jan 13 Python
python实现猜数游戏
Mar 27 Python
Python 实现定积分与二重定积分的操作
May 26 Python
Python list列表删除元素的4种方法
Nov 01 Python
 分享一个Python 遇到数据库超好用的模块
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自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
大学生专科毕业生自我评价
2013/11/17 职场文书
简历的个人自我评价范文
2014/01/03 职场文书
质量负责人任命书
2014/06/06 职场文书
收款授权委托书
2014/10/02 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
如何用python反转图片,视频
2021/04/24 Python
Python中使用subprocess库创建附加进程
2021/05/11 Python
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
mysql全面解析json/数组
2022/07/07 MySQL