zoukankan      html  css  js  c++  java
  • 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()
    下载图片
  • 相关阅读:
    树状数组基本操作
    P1802 5倍经验日 题解
    函数学习总结
    康托展开
    中国电信CDMA无线上网卡短信收发
    报错:无法获取实体类XXX对应的表名!
    javajvisualvm远程监控云服务器上的Tomcat8.5
    服务器防火墙开放端口
    报错:列"AGENT_ENTITY_NAME"的值太大(实际值: 60,最大值50) oracle VARCHAR2和NVARCHAR2的区别
    linux中查看端口是否被占用lsof i:port
  • 原文地址:https://www.cnblogs.com/fredkeke/p/6365046.html
Copyright © 2011-2022 走看看