读Python获取网络数据的笔记(9月16日)
2016-09-16 19:31
225 查看
今天看了第五章的第一节,讲存储媒体文件;书上的例子说的是下载图片,如果是视频我该怎么办……
这段代码含有两个函数:补全Url函数为了urlretrieve和获取本地路径函数服务;获取本地路径函数为urlretrieve服务。
该程序缺点也很明显,只能获取下载列表里最后一个Url指向的文件;如果最后一个不是文件,必然要出错。于是我魔改了一下(加个异常处理):
如果file_url不存在那就会出错了,所以把这个try块放在if里面。
这一段其实也有问题,那就是所有检测到的Url的路径全都会生成本地文件夹。多出一大堆空文件夹出来强迫症各种不舒服,不过今天懒癌犯了,不想遍历文件夹再删除空文件夹了,恩,就这样吧。
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的路径全都会生成本地文件夹。多出一大堆空文件夹出来强迫症各种不舒服,不过今天懒癌犯了,不想遍历文件夹再删除空文件夹了,恩,就这样吧。
相关文章推荐
- Python学习笔记:网络数据获取
- 笔记之Python网络数据采集
- Python绝技笔记--------python操作注册表来获取之前连接的网络信息
- Python3 urllib(网络数据获取 模块)
- 『python学习』python 网络数据采集笔记
- WSWP(用python写爬虫)笔记二:实现链接获取和数据存储爬虫
- Python学习笔记:本地数据获取
- python本地与网络数据的获取
- python多线程获取网络数据,与单线程进行比较
- Python玩转数据分析学习笔记-03数据获取
- 笔记之Python网络数据采集
- Python网络数据采集学习笔记1
- python 网络数据获取第三章书中代码更新
- python网络数据采集学习笔记-前言
- Python学习笔记:便捷数据获取
- python request 获取网络数据
- python获取网络数据
- Python3 urllib(网络数据获取 模块)
- python网络数据采集学习笔记:第二章
- Kotlin开发Android笔记7:Anko获取网络数据