读Python获取网络数据的笔记(9月16日)

今天看了第五章的第一节,讲存储媒体文件;书上的例子说的是下载图片,如果是视频我该怎么办……

from urllib.request import urlretrieve
from urllib.request import urlopen
from bs4 import BeautifulSoup
import os

# 下载文件所在的文件夹的名字
download_directory = "downloaded"
# 基本Url指的是什么我现在还不太明白,为什么没有www.?
base_url = "http://pythonscraping.com"


# 不使用正则表达式,而用函数的方式处理各种可能出现的Url
def get_absolute_url(one_base_url, source):
    # 关于切片的知识又要复习了,没明白[11:]啊[4:]啊之类的什么意思
    if source.startswith("http://www."):
        url = "http://" + source[11:]
    elif source.startswith("http://"):
        url = source
    elif source.startswith("www."):
        url = source[4:]
        url = "http://" + source
    else:
        url = one_base_url + "/" + source

    if one_base_url not in url:
        return None

    return url


# 获取本地存储路径
def get_download_path(one_base_url, absolute_url, one_download_directory):
    # 1.path赋值为去掉www.头部的完整Url
    # 2.path再赋值为自己去掉匹配one_base_url部分的形式
    # 3.path最后一次赋值为下载用的文件夹的路径
    path = absolute_url.replace("www.", "")
    path = path.replace(one_base_url, "")
    path = one_download_directory + path
    # 获取这个文件夹的名字
    directory = os.path.dirname(path)
    # 如果组成这个路径的一溜文件夹都不存在,就建立它
    if not os.path.exists(directory):
        os.makedirs(directory)
    # 返回这个本地路径
    return path

# 两大常规
html = urlopen("http://www.pythonscraping.com")
bs_obj = BeautifulSoup(html, "html.parser")
# 所有src属性内容都被选中
download_list = bs_obj.findAll(src=True)

for download in download_list:
    # 下载列表里每一个Url都要经过下面的补全函数修改补全
    file_url = get_absolute_url(base_url, download["src"])
    if file_url is not None:
        print("It's " + file_url)
urlretrieve(file_url, get_download_path(base_url, file_url, download_directory))

这段代码含有两个函数:补全Url函数为了urlretrieve和获取本地路径函数服务;获取本地路径函数为urlretrieve服务。
该程序缺点也很明显,只能获取下载列表里最后一个Url指向的文件;如果最后一个不是文件,必然要出错。于是我魔改了一下(加个异常处理):

        try:
            urlretrieve(file_url, get_download_path(base_url, file_url, download_directory))
        except OSError:
            continue

如果file_url不存在那就会出错了,所以把这个try块放在if里面。
这一段其实也有问题,那就是所有检测到的Url的路径全都会生成本地文件夹。多出一大堆空文件夹出来强迫症各种不舒服,不过今天懒癌犯了,不想遍历文件夹再删除空文件夹了,恩,就这样吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值