当前位置: 首页 > news >正文

Python 爬虫-下载图片

运行系统:MAC

Python版本:python3.5

主要模块:Requests、BeautifulSoup

下载网站Unsplash中的图片:

程序结构图如下:

代码如下:

import requests
import os
from bs4 import BeautifulSoup

class Picture():

    def __init__(self):
        # 给请求指定一个请求头来模拟chrome浏览器
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'}

        self.web_url = 'https://unsplash.com/'
        self.base_path = os.path.dirname(__file__)

    def makedir(self, name):
        path = os.path.join(self.base_path, name)
        isExist = os.path.exists(path)
        if not isExist:
            os.makedirs(path)
            print('File has been created.')
        else:
            print('The file is existed.')
        #切换到该目录下
        os.chdir(path)

    def request(self, url):
        r = requests.get(url, headers=self.headers)
        return r

    def get_img(self):
        r = self.request(self.web_url)
        # r.text是返回的网页HTML;这里的find_all('a', class_='cV68d') 是找到所有class为cV68d的a标签,返回的是一个list,所以可以用for循环获取每个a标签
        all_a = BeautifulSoup(r.text, 'lxml').find_all('a', class_='cV68d')
        self.makedir('pictures')
        for a in all_a:
            # a标签中完整的style字符串
            img_str = a['style']
            # 使用python的切片功能街区双引号之间的内容
            img_url = img_str[img_str.index('"') + 1: img_str.index('"', img_str.index('"') + 1)]
            start_pos = img_url.index('photo')
            end_pos = img_url.index('?')
            file_name = img_url[start_pos: end_pos] + '.jpg'
            with open(file_name, 'ab') as f:
                r = requests.get(img_url)
                f.write(r.content)

if __name__ == '__main__':
    picture = Picture()
    picture.get_img()
下载图片

 

转载于:https://www.cnblogs.com/fredkeke/p/6365046.html

相关文章:

  • 中文转拼音without CJK
  • Python爬虫之多进程爬取(以58同城二手市场为例)
  • webpack+react项目初体验——记录我的webpack环境配置
  • js-权威指南学习笔记19.2
  • Swift与OC混编
  • JavaWeb之文件上传、下载
  • HttpServletRequest和HttpServletResponse详解
  • shell面试难题
  • restlet入门搭建hello world
  • Vue初探
  • HTML/CSS常用的命名规则
  • Java googlecode JSON 解析示例
  • background-clip
  • Docker的常用命令-02
  • 【MongoDB】从入门到精通mongdb系列学习宝典,想学mongodb小伙伴请进来
  • 【译】JS基础算法脚本:字符串结尾
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • ComponentOne 2017 V2版本正式发布
  • HTTP那些事
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JS 面试题总结
  • Koa2 之文件上传下载
  • laravel 用artisan创建自己的模板
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • mysql 5.6 原生Online DDL解析
  • Redash本地开发环境搭建
  • Spark RDD学习: aggregate函数
  • vue数据传递--我有特殊的实现技巧
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从tcpdump抓包看TCP/IP协议
  • 算法之不定期更新(一)(2018-04-12)
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​人工智能书单(数学基础篇)
  • !!Dom4j 学习笔记
  • #HarmonyOS:Web组件的使用
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (十) 初识 Docker file
  • (转) Android中ViewStub组件使用
  • **CI中自动类加载的用法总结
  • ./和../以及/和~之间的区别
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 依赖注入的基本用发
  • .net core开源商城系统源码,支持可视化布局小程序
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @GlobalLock注解作用与原理解析
  • @property @synthesize @dynamic 及相关属性作用探究
  • @WebService和@WebMethod注解的用法
  • [2018-01-08] Python强化周的第一天
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [BetterExplained]书写是为了更好的思考(转载)
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [C++]——带你学习类和对象