python 爬虫之requests爬取页面图片的url,并将图片下载到本地
时间:2019-06-12
本文章向大家介绍python 爬虫之requests爬取页面图片的url,并将图片下载到本地,主要包括python 爬虫之requests爬取页面图片的url,并将图片下载到本地使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
大家好我叫hardy
需求:爬取某个页面,并把该页面的图片下载到本地
思考:
img标签一个有多少种类型的src值?三种:1、以http开头的网络链接。2、以“/”开头绝对路径。3、以“./”开头相对路径。当然还有其他类型,不过这个不做考虑,能力有限呀。
使用什么工具?我用requests、xpth
都有那些步骤:1、爬取网页
2、分析html并获取img中的src的值
3、获取图片
4、保存
具体实现
import requests from lxml import etree import time import os import re website_url = '' website_name = '' ''' 爬取的页面 ''' def html_url(url): try: text = requests.get(url) html = etree.HTML(text.text) img = html.xpath('//img/@src') # 保存图片 for src in img: src = auto_completion(src) file_path = save_image(src) if file_path == False: print('请求的图片路径出错,url地址为:%s'%src) else : print('保存图片的地址为:%s'%file_path) except requests.exceptions.ConnectionError as e: print('网络地址无法访问,请检查') print(e) except requests.exceptions.RequestException as e: print('访问异常:') print(e) ''' 保存图片 ''' def save_image(image_url): size = 0 number = 0 while size == 0: try: img_file = requests.get(image_url) except requests.exceptions.RequestException as e: raise e # 不是图片跳过 if check_image(img_file.headers['Content-Type']): return False file_path = image_path(img_file.headers) # 保存 with open(file_path, 'wb') as f: f.write(img_file.content) # 判断是否正确保存图片 size = os.path.getsize(file_path) if size == 0: os.remove(file_path) # 如果该图片获取超过十次则跳过 number += 1 if number >= 10: break return (file_path if (size > 0) else False) ''' 自动完成url的补充 ''' def auto_completion(url): global website_name,website_url #如果是http://或者https://开头直接返回 if re.match('http://|https://',url): return url elif re.match('/',url): return website_name+url elif re.match('./'): return website_url+url[1::] ''' 图片保存的路径 ''' def image_path(header): # 文件夹 file_dir = './save_image/' if not os.path.exists(file_dir): os.makedirs(file_dir) # 文件名 file_name = str(time.time()) # 文件后缀 suffix = img_type(header) return file_dir + file_name + suffix ''' 获取图片后缀名 ''' def img_type(header): # 获取文件属性 image_attr = header['Content-Type'] # 获取后缀 suffix = image_attr.split('/')[1] if suffix == 'jpeg': suffix = 'jpg' return '.' + suffix # 检查是否为图片类型 def check_image(content_type): if 'image' in content_type: return False else: return True def set_headers(): head = { } return head if __name__ == '__main__': #当前的url,不包含文件名的比如index.html,用来下载当前页的页面图片(./) website_url = 'https://cuiqingcai.com/category/life' #域名,用来下载"/"开头的图片地址 #感兴趣的朋友请帮我完善一下这个自动完成图片url的补充 website_name = 'https://cuiqingcai.com' url = 'https://cuiqingcai.com/category/life' html_url(url)
原文地址:https://www.cnblogs.com/hardykay/p/11009670.html
- 建立安全的 AI
- Python NLTK 自然语言处理入门与例程
- 漏洞预警 | Apache Struts2 曝任意代码执行漏洞 (S2-045,CVE-2017-5638)
- 详解OSSIM-OSSEC WIN 4771案例
- JSShell:一个基于python的交互式Shell
- golang中操作excel
- 企业安全漏洞通告引擎
- 通过httprouter和redis框架搭建restful api服务
- .NET Core 实现定时抓取博客园首页文章信息并发送到邮箱
- 基于 R 语言和 SPSS 的决策树算法介绍及应用
- Android 8.0 中的安全增强功能
- python2 群发 html 或文本邮件
- windows 安装 storm 及 eclipse 调试 TopN 实例
- shell 学习笔记(16)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 简单二分法查找
- 链表之Python与C
- Python MQTT
- 从键盘输入一个十进制个位数,在屏幕上显示相应数量的该数。 例如,输入3,屏幕上将显示“333”。
- ESP32 OTA详解-中文翻译版
- 汇编语言从键盘输入一个字符串(串长不大于80)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)
- 求100以内所有奇数的和,存于字变量X中。
- pyinstaller打包出错numpy.core.multiarray failed to import
- 从包含10个无符号数的字节数组array中选出最小的一个数存于变量MIN中,并将该数以十进制形式显示出来。
- 可修改内容的优先级队列
- STM32定时器与中断整理
- 计算CNN卷积神经网络中各层的参数数量「附代码」
- C++ 万字长文第一篇---拿下字节面试
- 家国梦自动收取金币、货物、升级建筑、拆相册等脚本
- matplotlib 设置移动边框