因为需要从一些下载一个页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模块的网络下载文件...相关推荐

  1. python编程技巧1002python编程技巧_总结Python编程中三条常用的技巧

    在 python 代码中可以看到一些常见的 trick,在这里做一个简单的小结. json 字符串格式化 在开发 web 应用的时候经常会用到 json 字符串,但是一段比较长的 json 字符串是可 ...

  2. python2 urllib模块_python urllib与urllib2模块用法教程

    python urllib与urllib2模块用法 urllib 和urllib2都是接受URL请求的相关模块,但是提供了不同的功能. urllib提供urlencode方法用来GET查询字符串的产生 ...

  3. python 接口自动化的sql验证_基于Python的接口自动化实战-基础篇之pymysql模块操做数据库...

    引言 在进行功能或者接口测试时经常须要经过链接数据库,操做和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操做是否正确等.所以,在进行接口自动化测试时,咱们同样绕不开接 ...

  4. 用python函数画德国国旗代码_使用Python的turtle模块画国旗

    Python的turtle模块画国旗主要用到两个函数:draw_rentangle和draw_star. 至于函数的调用就和我们学的C,C++是一样的.对于turtle画国旗的程序中,首先是查找国旗的 ...

  5. python常见的控制流结构有_【Python】控制流语句、函数、模块、数据结构

    1.三种控制流语句:if\for\while 2.每句后都要加冒号 3.有elif语句=else后加一个if 注意使用变量名! 注意缩进! 注意控制流语句后面要加冒号! 4.for i in rang ...

  6. 学python必须得英语精通吗_“学习python必须精通的几个模块“

    python中都有哪些模块呢 这就多了你,文档有每个模块介绍: https://docs.python.org/2/library/index.html 如果了您的问题请采纳! 如果未解继续追问 如何 ...

  7. python函数和模块有什么关键特性_【Python函数与模块】(2)函数的特点

    原博文 2020-04-07 22:16 − 1. 隐藏实现功能的细节 2. 提高代码的重用度 3. 提高可读性,便于调试... 相关推荐 2019-09-28 21:13 − Python pyth ...

  8. 1python软件的下载官网是_学Python软件下载-学Python软件官方版下载v1.0-upan

    学Python软件是一款专门为想要学习Python编程的人打造的,用户通过这款软件可以在线学习很多的专业知识,这些视频都是免费学习的,还有名师在线指导,非常的专业,想要快速的学Python,但是没有头 ...

  9. 用python函数画德国国旗代码_用Python的turtle模块画国旗

    最近在学Python,发现Python的海龟绘图非常有趣,就分享一下!话不多说,先来Python turtle的官方文档链接: Python turtle.这里面有turtle的各类指令.turtle ...

  10. python中导入模块是用哪个关键字_关于python导入模块import与常见的模块详解

    0.什么是python模块?干什么的用的? Java中如果使用abs()函数,则需要需要导入Math包,同样python也是封装的,因为python提供的函数太多,所以根据函数的功能将其封装在不同的m ...

最新文章

  1. 工作中总结的一些C#小经验,随时更新
  2. 框架之---Django
  3. Android:Socket客户端开发,Android 的Socket客户端优化,Android非UI线程修改控件程序崩溃的问题
  4. DXperience-8.2.6 注册
  5. openbsd 禁止root远程登陆
  6. 【优雅代码】深入浅出 妙用Javascript中apply、call、bind
  7. 携程发布2020年财报:四季度营业利润率10% 疫情以来连续两季度盈利
  8. go get如何删除_Go 每日一库之 xorm
  9. 超火的漫画线稿上色AI出新版了!无监督训练,效果更美好 | 代码+Demo
  10. JDBC连接池连接超时失效问题
  11. 小米手机全黑屏9008救砖
  12. Python自学记录--steam密码加密逆向
  13. DSP开发的一点概念
  14. cortex a7 a53_试驾初体验--我与奥迪A7的七天之旅
  15. C/C++编程:模板特例
  16. 拼多多登陆 JS 密码字段加密解析
  17. MySQL的触发器原理应用,after和before的区别
  18. ctfshow卷王杯部分web
  19. 5个APP,4220个数据,回顾Yura的2018年
  20. 谐振电路应用之LED交替闪烁

热门文章

  1. 基于选项模式实现.NET Core的配置热更新
  2. 在线等:“手里 5 个 offer,优选头条还是阿里?”
  3. 阿里正式进军机器人赛道,首款物流机器人“小蛮驴”来了!
  4. 实现自我隐藏 CPU 利用率的最佳方法,不妨一试!
  5. 为什么有人月薪5000,还要选它:逆袭都发生在这儿
  6. 终端模拟器大 PK,你 Pick 谁?
  7. 李彦宏:百度今年全员涨薪,比去年还多;谷歌暂停Chrome浏览器更新;Eclipse 4.15发布 | 极客头条...
  8. 你有真正理解 Java 的类加载机制吗?| 原力计划
  9. CSDN创始人蒋涛:开发者是泛终端生态的第一推动力
  10. Python 爬取 3000 部电影,最具人气烂片排行榜出炉!