python爬取图片
1.导入需要的模块requests,BeautifulSoup,os(用于文件读写)。
2.创建一个类,并初始化。
1
2
3
4
5
6
7
8
|
class BeautifulPicture: def __init__( self ): # 类的初始化操作 self .headers = { # 给请求指定一个请求头来模拟chrome浏览器 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64)' ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' } self .web_url = 'url' # 要访问的网页地址 self .folder_path = 'E:\\1\\pic' # 设置图片要存放的文件目录 |
3.先请求图片所在的网页,返回网页response
1
2
3
|
def request( self , url): # 返回网页response r = requests.get(url, self .headers) # 向目标url地址发送get请求,返回一个response对象 return r |
调用request方法,print(r.text)就可以看到控制台上print出的网页源码了。
4.通过BeautifulSoup工具获取需要抓取的img标签,这里根据不同的网页布局css选择器也会有不同:
1
2
3
4
5
6
|
def get_pic( self ): r = self .request( self .web_url) all_item = BeautifulSoup(r.text, 'html.parser' ).select( ".search_results > .item" ) for item in all_item: img = item.find( 'a' ).find( 'img' ) url = img[ 'src' ] |
此处,我是先抓取img所在的div(类名为item),再获取div下的a链接下的img,网页具体代码格式为
1
2
3
4
5
6
7
8
|
< div class="flex_grid credits search_results" style="margin:4px 14px 0 15px"> < div class="item" data-w="640" data-h="256"> < a href=""> < img srcset="" src="" alt=""> </ a > </ div > ...... </ div > |
通过遍历可以获取所有图片的链接。
5.获取到图片地址链接后,就可以下载图片并保存到本地了。那么就需要确认初始化定义的文件夹是否存在,如果不存在,需要创建。
1
2
3
4
5
6
7
8
9
|
def mkdir( self , path): # 创建文件夹 path = path.strip() is_exists = os.path.exists(path) if not is_exists: print ( '创建名字叫做' , path, '的文件夹' ) os.makedirs(path) print ( '创建成功!' ) else : print (path, '文件夹已经存在了,不再创建' ) |
6.接下来就可以保存图片了。
第四步操作,在get_pic方法中,获取到所有图片所在的div标签后,先确保存放图片的文件下是否存在,调用方法
self.mkdir(self.folder_path) # 创建文件夹
os.chdir(self.folder_path) # 切换路径至上面创建的文件夹
遍历所有的div,根据url名中jpg/png的不同,决定保存图片的后缀名
1
2
3
4
5
6
7
8
9
|
i = 1 # 后面用来给图片命名 for item in all_item: img = item.find( 'a' ).find( 'img' ) url = img[ 'src' ] if url.count( 'jpg' ) > 0 : self .save_img(url, str (i) + '.jpg' ) elif url.count( 'png' ) > 0 : self .save_img(url, str (i) + '.png' ) i + = 1 |
其中save_img方法为:
1
2
3
4
5
6
|
def save_img( self , url, name): # 保存图片 img = self .request(url) f = open (name, 'ab' ) f.write(img.content) print (name, '文件保存成功!' ) f.close() |
创建MyBeautifulPicture类的实例,调用get_pic方法,至此,保存图片到本地就可以实现了。
完整的get_pic方法为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def get_pic( self ): r = self .request( self .web_url) all_item = BeautifulSoup(r.text, 'html.parser' ).select( ".search_results > .item" ) self .mkdir( self .folder_path) # 创建文件夹 os.chdir( self .folder_path) # 切换路径至上面创建的文件夹 i = 1 # 后面用来给图片命名 for item in all_item: img = item.find( 'a' ).find( 'img' ) url = img[ 'src' ] # print(url) if url.count( 'jpg' ) > 0 : self .save_img(url, str (i) + '.jpg' ) elif url.count( 'png' ) > 0 : self .save_img(url, str (i) + '.png' ) i + = 1 |
python爬取图片的更多相关文章
- python 爬取图片
使用python的requests库爬取网页时,获取文本一般使用text方法,如果要获取图片并保存要用content 举个栗子,爬煎蛋网的图: #!/usr/bin/env python #-*- c ...
- Python爬去图片实例,python 爬取图片
# coding:utf-8 import requests import re import time proxies = { "http": "http://124. ...
- 20170912多线程Python爬取图片
import threading #导入线程 from urllib import request #导入网页请求模块 import re #导入正则表达式模块 import os # 引入模块 fr ...
- python如何使用request爬取图片
下面是代码的简单实现,变量名和方法都是跑起来就行,没有整理,有需要的可以自己整理下: image2local: import requests import time from lxml import ...
- [python爬虫] 爬取图片无法打开或已损坏的简单探讨
本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...
- 孤荷凌寒自学python第八十二天学习爬取图片2
孤荷凌寒自学python第八十二天学习爬取图片2 (完整学习过程屏幕记录视频地址在文末) 今天在昨天基本尝试成功的基础上,继续完善了文字和图片的同时爬取并存放在word文档中. 一.我准备爬取一个有文 ...
- 孤荷凌寒自学python第八十一天学习爬取图片1
孤荷凌寒自学python第八十一天学习爬取图片1 (完整学习过程屏幕记录视频地址在文末) 通过前面十天的学习,我已经基本了解了通过requests模块来与网站服务器进行交互的方法,也知道了Beauti ...
- python +requests 爬虫-爬取图片并进行下载到本地
因为写12306抢票脚本需要用到爬虫技术下载验证码并进行定位点击所以这章主要讲解,爬虫,从网页上爬取图片并进行下载到本地 爬虫实现方式: 1.首先选取你需要的抓取的URL:2.将这些URL放入待抓 ...
- python网络爬虫之使用scrapy爬取图片
在前面的章节中都介绍了scrapy如何爬取网页数据,今天介绍下如何爬取图片. 下载图片需要用到ImagesPipeline这个类,首先介绍下工作流程: 1 首先需要在一个爬虫中,获取到图片的url并存 ...
随机推荐
- 基于iCamera测试500w摄像头-mt9p001,mt9p031,mt9p001模块小结
基于iCamera测试500w摄像头-mt9p001,mt9p031,mt9p001模块小结 先看实物 M12标准无畸变镜头效果 标准CS镜头效果 iCamera底板+mt9p001安装效果 再看看c ...
- telnet远程登陆
这篇文章是第二次更新,内容为telnet远程登陆路由器,非常简单.直接进入正题,在网络配通的情况下,为路由器设置登陆密码和管理员密码,就可以通过pc机远程管理路由器或交换机. 目的: 网络拓扑图如下, ...
- 【React】360- 完全理解 redux(从零实现一个 redux)
点击上方"前端自习课"关注,学习起来~ 前言 记得开始接触 react 技术栈的时候,最难理解的地方就是 redux.全是新名词:reducer.store.dispatch.mi ...
- Spring Boot (二) 整合 Redis
前言 本文将会基于 springboot 2.1.8.RELEASE 简单整合 Redis ,适合新手小白入门 Spring Boot 整合 Redis 入门 1.pom.xml 中引入 redis ...
- XML字符串转为Map集合
public class xmlToMapUtils { /** * xml字符串转为map集合 * @param xmlStr * @return */ public static Map<S ...
- 2016/09/29 SQL中的join
1.建表 首先建tb_a并插入数据. )); insertinto tb_a(symbol, sname) values ('A','B'); insertinto tb_a(symbol, snam ...
- 张亦总结《AG百家乐庄闲,龙虎中下三路技巧和三株路的运用》
关于三珠路的各种打法,这里我做个详细的讲解 三珠路的打法源于澳门赌王叶汉,需要了解赌王叶汉的著作<BJL投注公式>的可以加我Q:<10353581>进行详细解答 叶汉的打法 ...
- spyder错误合集
SyntaxError: invalid syntax是非法语句的意思,检查语法是否出现错误,漏写等 SyntaxError: (unicode error) 'unicodeescape' co ...
- css重点知识和bug解决方法
1.图片向下撑大3像素问题 在一个盒子里面放一张图片,默认情况下,图片会向下撑大3像素,有以下几种解决方法: 1.1 给图片添加display:block: 1.2 给图片添加 float:left: ...
- Java工作流引擎jflow对流程的结束大总结
关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工 ...