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并存 ...
随机推荐
- 超酷3D照片展示效果
@{ Layout = null; } <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www. ...
- 【重温基础】15.JS对象介绍
从这篇文章开始,复习 MDN 中级教程 的内容了,在初级教程中,我和大家分享了一些比较简单基础的知识点,并放在我的 [Cute-JavaScript]系列文章中. 关于[Cute-JavaScript ...
- 【Hybird】274-Hybird App 应用开发中 5 个必备知识点复习
前言 我们大前端团队内部 ?每周一练 的知识复习计划还在继续,本周主题是 <Hybird APP 混合应用专题> ,这期内容比较多,篇幅也相对较长,每个知识点内容也比较多. 之前分享的每周 ...
- Django对DateTimeField时间字段查询QuerySet为空的解决方案
今天在用的Django中的filter()方法对DateTimeField字段查询时碰到了问题,抓耳挠腮一下午,终于解决了,我觉得花了一下午的时间怎么着也得记录下吧(无语)...... 问题描述 : ...
- 2019年JVM面试都问了什么?快看看这22道面试题!(附答案解析)
一. Java 类加载过程? Java 类加载需要经历一下 7 个过程: 1. 加载 加载是类加载的第一个过程,在这个阶段,将完成一下三件事情: • 通过一个类的全限定名获取该类的二进制流. • 将该 ...
- ELK输出nginx的日志(未完成)
我们先准备3台centos7服务器 171 做 elasticsearch,kibana的操作 172 做logstash 的操作 173 做nginx 的操作 软件 版本号 elasticsearc ...
- 聊一聊 webpack 中的 preloading 和 Prefetching
聊一聊 webpack 中的 preloading 和 Prefetching 提到 Preloading 和 Prefetching 就不得不先说一下代码分割,通过下面的例子我们来说明为什么需要代码 ...
- Python活力练习Day5
Day5:连续输入n个字符串,请按照长度为8拆分每个字符串后输出到新的字符串组:长度不是8的整数倍的字符串请在后面补数字0,其中,空字符串不做处理. eg : input : 2 12345 ...
- SpringCloud-服务注册与实现-Eureka创建服务提供者(附源码下载)
场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- iOS----------证书的制作
https://developer.umeng.com/docs/66632/detail/66748#createappid Certificates-> 卫生许可证 identifiers ...