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爬取图片的更多相关文章

  1. python 爬取图片

    使用python的requests库爬取网页时,获取文本一般使用text方法,如果要获取图片并保存要用content 举个栗子,爬煎蛋网的图: #!/usr/bin/env python #-*- c ...

  2. Python爬去图片实例,python 爬取图片

    # coding:utf-8 import requests import re import time proxies = { "http": "http://124. ...

  3. 20170912多线程Python爬取图片

    import threading #导入线程 from urllib import request #导入网页请求模块 import re #导入正则表达式模块 import os # 引入模块 fr ...

  4. python如何使用request爬取图片

    下面是代码的简单实现,变量名和方法都是跑起来就行,没有整理,有需要的可以自己整理下: image2local: import requests import time from lxml import ...

  5. [python爬虫] 爬取图片无法打开或已损坏的简单探讨

    本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...

  6. 孤荷凌寒自学python第八十二天学习爬取图片2

    孤荷凌寒自学python第八十二天学习爬取图片2 (完整学习过程屏幕记录视频地址在文末) 今天在昨天基本尝试成功的基础上,继续完善了文字和图片的同时爬取并存放在word文档中. 一.我准备爬取一个有文 ...

  7. 孤荷凌寒自学python第八十一天学习爬取图片1

    孤荷凌寒自学python第八十一天学习爬取图片1 (完整学习过程屏幕记录视频地址在文末) 通过前面十天的学习,我已经基本了解了通过requests模块来与网站服务器进行交互的方法,也知道了Beauti ...

  8. python +requests 爬虫-爬取图片并进行下载到本地

    因为写12306抢票脚本需要用到爬虫技术下载验证码并进行定位点击所以这章主要讲解,爬虫,从网页上爬取图片并进行下载到本地   爬虫实现方式: 1.首先选取你需要的抓取的URL:2.将这些URL放入待抓 ...

  9. python网络爬虫之使用scrapy爬取图片

    在前面的章节中都介绍了scrapy如何爬取网页数据,今天介绍下如何爬取图片. 下载图片需要用到ImagesPipeline这个类,首先介绍下工作流程: 1 首先需要在一个爬虫中,获取到图片的url并存 ...

随机推荐

  1. 【JS】308- 深入理解ESLint

    点击上方"前端自习课"关注,学习起来~ 本文来自于"自然醒"投稿至[前端早读课]. 小沈是一个刚刚开始工作的前端实习生,第一次进行团队开发,难免有些紧张.在导师 ...

  2. Linux查看文本的第20~30行

    一.模拟环境 [root@WT ~]# seq >/data/test.txt [root@WT ~]# xargs -n </data/test.txt 二.实现命令 方法一(head+ ...

  3. 使用python实现数组、链表、队列、栈

    引言 什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表,集合和字 ...

  4. HTML语法简要总结

    HTML基本语法 认识网页 网页主要由文字.图像和超链接等元素构成.当然,除了这些元素,网页中还可以包含音频.视频以及Flash等. 常见浏览器内核介绍 浏览器是网页运行的平台,常用的浏览器有IE.火 ...

  5. Nginx 常用配置方式说明

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/7619763f-1 ...

  6. SpringBoot SpringCloud 热部署 热加载 热调试

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] Crazy-Sp ...

  7. IPFS学习-哈希

    Hashes 哈希函数是接受一些任意输入并返回固定长度值的函数.具体值取决于所使用的给定哈希算法,例如SHA-1(GIT在使用),SHA-256,或者是BLAKE2,但是给予一个输入使用哈希算法总是返 ...

  8. python操作文件和目录查看、创建、删除、复制

    python内置了os模块可以直接调用操作系统提供的接口函数,os.name查询的是操作系统,‘nt’表示windows系统 >>> import os >>> o ...

  9. 新人踩坑的一天——springboot注入mapper时出现java.lang.NullPointerException: null

    来公司的第二周接到了定时任务的开发需求:每天早上十点发送用户报表邮件 .校招新人菜鸟没做过这玩意有些懵(尴尬)于是决定分步写,从excel导出->邮件发送->定时器实现->mappe ...

  10. 集合框架关于<list接口><map接口>的运用

    集合: 集合就是一个容器,他可以存储对象,我们说集合就是一个可变的数组 集合框架特点 1.list和set集合同时实现了collection接口 2.set集合存储唯一,无序的对象. 3.list 存 ...