爬虫案例 图片下载器实现

制作爬虫的基本步骤

  1. 需求分析
  2. 分析网页源代码,配合F12
  3. 编写正则表达式或者其他解析器代码
  4. 正式编写python爬虫代码

需求分析
“我想要图片,我又不想上网搜”
“最好还能自动下载”
……
这就是需求,至少要实现两个功能,一是搜索图片,二是自动下载。

分析网页
打开网页之后,然后按F12就可以查看网页信息,可以对网页进行分析。再点击上面的Network选项卡,刷新之后点击出现的第一个网址,就可以看到请求与响应信息。我们以CSDN首页为例,查看页面信息如下:
在这里插入图片描述
针对上面的需求,我们可以爬取百度图片搜索的内容,并将搜索到的图片下载。
爬虫最简单的方式就是调用requests模块,利用里面的get方法就可以获取到页面内容。
对于图片关键词的搜索,我们可以对URL地址的相关参数进行修改,以获取到我们想要得到的图片。
下面是图片下载器案例的具体代码:

"""
图片下载器
"""
# -*- coding:utf-8 -*-

import re
import requests
import os

def downloadPic(html, keyword):
    """
    :param html: 页面的源代码
    :param keyword: 搜索的关键字
    :return:
    """
    # (.*?)代表任意多个字符
    # ()代表分组, 值返回符合条件的字符串中括号里面的内容;
    pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
    count = 0
    print('找到关键词:' + keyword + '的图片,现在开始下载图片...')

    # each 是每个图片的url地址
    for each in pic_url:
        try:
            headers = {
                'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) '
                              'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 '
                              'Mobile Safari/537.36'}
            # 获取指定图片的相应对象;
            response = requests.get(each, timeout=10, headers=headers)
        except requests.exceptions.ConnectionError:
            print('【错误】当前图片无法下载')
            continue
        except Exception as e:
            print('【错误】当前图片无法下载')
            print(e)
            continue
        else:
            # print(response.status_code)
            if response.status_code != 200:
                print("访问失败: ", response.status_code)
                continue
        #   ******** 存储图片到本地*******************************
        if not os.path.exists(imgDir):
            print("正在创建目录 ", imgDir)
            os.makedirs(imgDir)

        posix = each.split('.')[-1]
        if posix not in ['png', 'jpg', 'gif', 'jpeg']:
            break
        print('正在下载第' + str(count + 1) + '张图片,图片地址:' + str(each))
        name = keyword + '_' + str(count) + '.' + posix
        filename = os.path.join(imgDir, name)
        count += 1
        with open(filename, 'wb') as f:
            # response.content: 返回的是二进制文本信息
            #  response.text:返回的字符串文本信息
            f.write(response.content)

if __name__ == '__main__':
    imgDir = 'pictures'
    word = input("Input key word: ")
    url = 'http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=' + word
    try:
        response = requests.get(url)
    except Exception as e:
        print(e)
        content = ''
    else:
        content = response.text

    downloadPic(content, word)

运行之后,输入我们想要搜索并下载的图片关键词:
在这里插入图片描述
之后就会帮我们自动下载了:
在这里插入图片描述
查看图片保存的目录:
在这里插入图片描述
关于代码的具体内容,会在之后的文章中解释说明的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值