python模块下载1002python模块下载_【Python】Python的urllib模、urllib2模块的网络下载文件...
因为需要从一些下载一个页PDF文件。但是需要下载PDF有数百个文件,这是不可能用人工点击下载。只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrllib2模块。
1、问题描写叙述
须要从http://www.cvpapers.com/cvpr2014.html上下载几百个论文的PDF文件,该网页例如以下图所看到的:
2、问题解决
通过结合Python的urllib模块和urllib2模块来实现自己主动下载。
代码例如以下:
test.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
import urllib #导入urllib模块
import urllib2 #导入urllib2模块
import re #导入正則表達式模块:re模块
def getPDFFromNet(inputURL):
req = urllib2.Request(inputURL)
f = urllib2.urlopen(req) #打开网页
localDir = 'E:\downloadPDF\\' #下载PDF文件须要存储在本地的文件夹
urlList = [] #用来存储提取的PDF下载的url的列表
for eachLine in f: #遍历网页的每一行
line = eachLine.strip() #去除行首位的空格。习惯性写法
if re.match('.*PDF.*', line): #去匹配含有“PDF”字符串的行。仅仅有这些行才有PDF下载地址
wordList = line.split('\"') #以"为分界。将该行分开,这样就将url地址单独分开了
for word in wordList: #遍历每一个字符串
if re.match('.*\.pdf$', word): #去匹配含有“.pdf”的字符串,仅仅有url中才有
urlList.append(word) #将提取的url存入列表
for everyURL in urlList: #遍历列表的每一项,即每一个PDF的url
wordItems = everyURL.split('/') #将url以/为界进行划分。为了提取该PDF文件名称
for item in wordItems: #遍历每一个字符串
if re.match('.*\.pdf$', item): #查找PDF的文件名称
PDFName = item #查找到PDF文件名称
localPDF = localDir + PDFName #将本地存储文件夹和须要提取的PDF文件名称进行连接
try:
urllib.urlretrieve(everyURL, localPDF) #依照url进行下载。并以其文件名称存储到本地文件夹
except Exception,e:
continue
getPDFFromNet('http://www.cvpapers.com/cvpr2014.html')
注意:
(1)第1、6、8、23行分别多谢了一个“\”来进行转义。
(2)第27行的urlretrieve函数有3个參数:第一个參数就是目标url;第二个參数是保存的文件绝对路径(含文件名称),该函数的返回值是一个tuple(filename,header),当中的filename就是第二个參数filename。
假设urlretrieve仅提供1个參数,返回值的filename就是产生的暂时文件名称,函数运行完成后该暂时文件会被删除參数。第3个參数是一个回调函数,当连接上server、以及对应的数据块传输完成的时候会触发该回调。当中回调函数名称可随意,可是參数必须为三个。一般直接使用reporthook(block_read,block_size,total_size)定义回调函数。block_size是每次读取的数据块的大小。block_read是每次读取的数据块个数,taotal_size是一一共读取的数据量,单位是byte。
能够使用reporthook函数来显示读取进度。
假设想显示读取进度。则能够讲第三个參数加上。将上述程序第27行改为例如以下:
urllib.urlretrieve(everyURL, localPDF, reporthook=reporthook)
而reporthook回调函数的代码例如以下:
def reporthook(block_read,block_size,total_size):
if not block_read:
print "connection opened";
return
if total_size<0:
#unknown size
print "read %d blocks (%dbytes)" %(block_read,block_read*block_size);
else:
amount_read=block_read*block_size;
print 'Read %d blocks,or %d/%d' %(block_read,block_read*block_size,total_size);
综上所述。这就是一个简单的从网页抓取数据、下载文件的小程序。希望对正在学习Python的同学有帮助。谢谢!
python模块下载1002python模块下载_【Python】Python的urllib模、urllib2模块的网络下载文件...相关推荐
- python编程技巧1002python编程技巧_总结Python编程中三条常用的技巧
在 python 代码中可以看到一些常见的 trick,在这里做一个简单的小结. json 字符串格式化 在开发 web 应用的时候经常会用到 json 字符串,但是一段比较长的 json 字符串是可 ...
- python2 urllib模块_python urllib与urllib2模块用法教程
python urllib与urllib2模块用法 urllib 和urllib2都是接受URL请求的相关模块,但是提供了不同的功能. urllib提供urlencode方法用来GET查询字符串的产生 ...
- python 接口自动化的sql验证_基于Python的接口自动化实战-基础篇之pymysql模块操做数据库...
引言 在进行功能或者接口测试时经常须要经过链接数据库,操做和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操做是否正确等.所以,在进行接口自动化测试时,咱们同样绕不开接 ...
- 用python函数画德国国旗代码_使用Python的turtle模块画国旗
Python的turtle模块画国旗主要用到两个函数:draw_rentangle和draw_star. 至于函数的调用就和我们学的C,C++是一样的.对于turtle画国旗的程序中,首先是查找国旗的 ...
- python常见的控制流结构有_【Python】控制流语句、函数、模块、数据结构
1.三种控制流语句:if\for\while 2.每句后都要加冒号 3.有elif语句=else后加一个if 注意使用变量名! 注意缩进! 注意控制流语句后面要加冒号! 4.for i in rang ...
- 学python必须得英语精通吗_“学习python必须精通的几个模块“
python中都有哪些模块呢 这就多了你,文档有每个模块介绍: https://docs.python.org/2/library/index.html 如果了您的问题请采纳! 如果未解继续追问 如何 ...
- python函数和模块有什么关键特性_【Python函数与模块】(2)函数的特点
原博文 2020-04-07 22:16 − 1. 隐藏实现功能的细节 2. 提高代码的重用度 3. 提高可读性,便于调试... 相关推荐 2019-09-28 21:13 − Python pyth ...
- 1python软件的下载官网是_学Python软件下载-学Python软件官方版下载v1.0-upan
学Python软件是一款专门为想要学习Python编程的人打造的,用户通过这款软件可以在线学习很多的专业知识,这些视频都是免费学习的,还有名师在线指导,非常的专业,想要快速的学Python,但是没有头 ...
- 用python函数画德国国旗代码_用Python的turtle模块画国旗
最近在学Python,发现Python的海龟绘图非常有趣,就分享一下!话不多说,先来Python turtle的官方文档链接: Python turtle.这里面有turtle的各类指令.turtle ...
- python中导入模块是用哪个关键字_关于python导入模块import与常见的模块详解
0.什么是python模块?干什么的用的? Java中如果使用abs()函数,则需要需要导入Math包,同样python也是封装的,因为python提供的函数太多,所以根据函数的功能将其封装在不同的m ...
最新文章
- 工作中总结的一些C#小经验,随时更新
- 框架之---Django
- Android:Socket客户端开发,Android 的Socket客户端优化,Android非UI线程修改控件程序崩溃的问题
- DXperience-8.2.6 注册
- openbsd 禁止root远程登陆
- 【优雅代码】深入浅出 妙用Javascript中apply、call、bind
- 携程发布2020年财报:四季度营业利润率10% 疫情以来连续两季度盈利
- go get如何删除_Go 每日一库之 xorm
- 超火的漫画线稿上色AI出新版了!无监督训练,效果更美好 | 代码+Demo
- JDBC连接池连接超时失效问题
- 小米手机全黑屏9008救砖
- Python自学记录--steam密码加密逆向
- DSP开发的一点概念
- cortex a7 a53_试驾初体验--我与奥迪A7的七天之旅
- C/C++编程:模板特例
- 拼多多登陆 JS 密码字段加密解析
- MySQL的触发器原理应用,after和before的区别
- ctfshow卷王杯部分web
- 5个APP,4220个数据,回顾Yura的2018年
- 谐振电路应用之LED交替闪烁
热门文章
- 基于选项模式实现.NET Core的配置热更新
- 在线等:“手里 5 个 offer,优选头条还是阿里?”
- 阿里正式进军机器人赛道,首款物流机器人“小蛮驴”来了!
- 实现自我隐藏 CPU 利用率的最佳方法,不妨一试!
- 为什么有人月薪5000,还要选它:逆袭都发生在这儿
- 终端模拟器大 PK,你 Pick 谁?
- 李彦宏:百度今年全员涨薪,比去年还多;谷歌暂停Chrome浏览器更新;Eclipse 4.15发布 | 极客头条...
- 你有真正理解 Java 的类加载机制吗?| 原力计划
- CSDN创始人蒋涛:开发者是泛终端生态的第一推动力
- Python 爬取 3000 部电影,最具人气烂片排行榜出炉!