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之赋值,简单也不简单
Sep 24 Python
Python基类函数的重载与调用实例分析
Jan 12 Python
在Python中操作时间之strptime()方法的使用
Dec 30 Python
python实现数据图表
Jul 29 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
python 对象和json互相转换方法
Mar 22 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Python socket服务常用操作代码实例
Jun 22 Python
Python高并发解决方案实现过程详解
Jul 31 Python
python 写一个性能测试工具(一)
Oct 24 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
yii操作session实例简介
2014/07/31 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
JS中style属性
2006/10/11 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
详解AngularJS 过滤器的使用
2018/06/02 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
python爬虫实例详解
2018/06/19 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
方正Java笔试题
2014/07/03 面试题
青蓝工程实施方案
2014/03/27 职场文书
学校欢迎标语
2014/06/18 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
2015年技术员工作总结
2015/04/10 职场文书
Redis分布式锁的7种实现
2022/04/01 Redis