Python3 爬虫

来源:互联网 发布:数据分析师证 编辑:程序博客网 时间:2024/04/30 15:35

引言

看到 bing 的高清大图,觉得质量都很高,都挺好看的,升到 window 10 以后,每次开机的画面都不一样,也觉得很有特点,我们来做一个简单的抓图 Demo 版脚本。

版权所有:_ OE _, 转载请注明出处:http://blog.csdn.net/csnd_ayo

简介

操作系统: window 10
编程环境:Python 3.6.1
编程IDE:PyCharm


  • 引言
  • 简介
  • bing 接口
  • 总纲
  • 函数
  • 调用
  • 源码
  • 效果


bing 接口

首先来介绍一下,我通过请求 bing 搜索引擎的时候,截取到的一个 http 请求接口。

1

/** @param : format 返回的格式, js(json),xml* @param : idx 图片下标* @param : n 图片数量* /原请求:http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=0&pid=hp&video=1分析后:http://cn.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1/** 可以通过截取xml的url部分与bing官网进行拼接,已达到获取高清图片的目的。* 例如:http://www.bing.com/az/hprichbg/rb/Dipper_ZH-CN11205462091_1366x768.jpg* 后缀的分辨率可以改成常用的显示屏分辨率,已达到修改照片分辨率的目的。* 例如:http://www.bing.com/az/hprichbg/rb/Dipper_ZH-CN11205462091_1920*1080.jpg*/

2

总纲

一个抓图的过程,我们涉及以下几步:

  1. 打开网页(获得网页源码)

  2. 检索网页(获得图片URL)

  3. 拼接URL(获得图片的真实地址)

  4. 保存图片

    1. 打开网页(获取图片数据)

    2. 保存本地(保存成本地文件)

函数

对应总纲内的逻辑步骤,我们将实现4个函数

# 打开网页def open_url(url):    pass# 获得 response 中的图片 urldef find_picture_url(http_response):    pass# url 拼接def url_joint(picture_url):    pass# 保存 url def save_url_image(url,addr):    pass

调用

根据总纲的逻辑步骤,我们将实现如下的调用

# 打开网页http_response = open_url("url地址")# 检索网页temp_picture_url = find_picture_url(http_response)# 拼接URLpicture_url = url_joint(temp_picture_url)# 保存图片save_url_image(picture_url, "1.jpg")

源码

# -*- coding:utf-8 -*-import urllib.requestimport datetime# @brief  打开网页# url : 网页地址# @return 返回网页数据def open_url(url):    # 根据当前URL创建请求包    req = urllib.request.Request(url)    # 添加头信息,伪装成浏览器访问    req.add_header('User-Agent',                   'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36')    # 发起请求    response = urllib.request.urlopen(req)    # 返回请求到的HTML信息    return response.read()# 找图片def find_picture_url(http_response):# 查找当前页面所有图片的URL    http_response = http_response.decode('utf-8')    img_addrs = []    # 找图片    a = http_response.find('<url>')    #不带停,如果没找到则退出循环    while a != -1:        # 以a的位置为起点,找以jpg结尾的图片        b = http_response.find('</url>', a, a+255)        # 如果找到就添加到图片列表中        if b != -1:            img_addrs.append(http_response[a+5:b])        # 否则偏移下标        else:            b = a + 5        # 继续找        a = http_response.find('<url>', b)    return img_addrs# url 拼接def url_joint(picture_url):    return "http://cn.bing.com/" + picture_url# @brief 保存图片# url : 图片url# addr  : 保存的地址def save_picture(url,addr):    with open(addr, 'wb') as f:        img = open_url(url_joint(url))        if img:            f.write(img)    print("图片已保存")    returni = 0while i < 5:    i += 1    # [1] 打开网页    temp_str = "http://cn.bing.com/HPImageArchive.aspx?format=xml&idx=%d&n=100" % (i)    response = open_url(temp_str)    # [2] 找到图片    list_picture = find_picture_url(response)    local_time = datetime.datetime.now().microsecond    j = 0    # [3] 保存图片    for picture_url in list_picture:        j += 1        local_time_file_name = str(local_time) + str(j) + ".jpg"        print(local_time_file_name)        save_picture(picture_url, local_time_file_name)

效果

3

原创粉丝点击