python爬虫:新手爬取NASA每日精选图片

作为一位科幻爱好者,初学python后,便想要使用python爬虫爬些漂亮的宇宙图片,于是乎就把目标瞄准了NASA的每日精选图片。

不过话说回来,毕竟NASA这样的官方组织我们还是要看看是否允许爬虫访问,我们先来看看:https://www.nasa.gov/robots.txt

robots.txt:
#Robots.txt file from http://www.nasa.gov
#All robots will spider the domain

User-agent: *
Disallow: /worldbook/
Disallow: /offices/oce/llis/

好的,那么看来我们爬起来并不违反人家的规则。
爬取的是每日图片,地址为:
https://www.nasa.gov/multimedia/imagegallery/iotd.html
查看网页源代码发现是使用的是json传输的数据,又发现请求参数中(params),‘size’:后面对应的数字对应传输的图片地址数量。那么根据此我们就可以开始写代码啦!

另外,在写代码及我自己运行的过程中,毕竟NASA服务器在境外,所以链接起来往往会出现问题,不管是链接还是下载过程中,都容易出现各种:ReadTimeout ,又或者是其他time out 报错,所以我基本上每一步过程中都加入了若报错就重复请求的代码。(重复请求次数我都是设置的5次)

好接下来开始看代码:

# 需要用到的几个模块
import os
import requests
import sys
from tqdm import tqdm
# 主服务器请求函数
def time_try(url_try,params):
    try:
        response = requests.get(url_try,headers=headers,timeout=3,params=params)
    except :
        for i in range(1, 7):
            if i == 6:
                print('请求链接失败,请查看网络连接并重启程序进行重试。')
                os.system('pause')
                sys.exit()
            else:
                try:
                    print('请求链接超时,第{}次重复请求'.format(i))
                    response = requests.get(url_try,headers=headers,timeout=3,params=params)
                    break
                except:
                    continue
    return response 

接下来这一步是整个下载过程的函数,我把其中的每一步都进行了拆分写小函数,便于接下来学习到新知识可以很容易的进行增加或者删减功能。
整个下载过程是可以实现断点续传,下载到一半链接异常也可以重新进行请求且接着刚刚下载的文件继续进行下载。
当然,为了好看,我们怎么少得了显示下载进度条的功能呢~
进度条是使用tqdm模块实现的

# 获取目标文件大小
def getfile_size(url):
    global file_size
    requests.packages.urllib3.disable_warnings()
    try:
        file_size = int(requests.get(url, timeout=5, stream=True, verify=False, headers=headers).headers[
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值