由于需要从某个网页上下载一些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个参数是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。其中回调函数名称可任意,但是参数必须为三个。一般直接使用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】Python的urllib模块、urllib2模块批量进行网页下载文件

本文地址: http://www.cppcns.com/jiaoben/python/170594.html

python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件...相关推荐

  1. python向mysql中添加数据标签_用python在MySQL中写入数据和添加数据

    在笔者之前的博文中,已介绍了用python连接与mysql数据库的知识.包括如何安装python连接mysql的pymysql包,如何通过cusor语句将python与mysql连接起来,以及如何用p ...

  2. python 从excel中抓取数据_使用Python抓取美团数据存于Excel中

    0.程序是针对美团中的美食部分数据按好评排序采集. 要抓取保存的数据为: 商家名类型  地理位置 评论人数  均价  最低价格 1.首先编写网页数据采集函数,使用request采集网页源码,具体实现如 ...

  3. python 获取表格中的空数据_在python beautifulsoup中获取表格单元格值为空时的文本输出...

    我正在编写一个beauthulsoup/python代码来从html表中获取数据.该表的问题是某些列可能有空白数据(单元格为空).当我运行这段代码时,当它第一次遇到表中的空白单元格时,它会以一个&qu ...

  4. python统计文章中的高频词汇_使用Python 统计高频字数的方法

    使用Python 统计高频字数的方法 发布时间:2020-09-17 00:52:12 来源:脚本之家 阅读:112 作者:Silent_Summer 问题 (来自Udacity机器学习工程师纳米学位 ...

  5. python在excel中数据画线_在python中使用excel工作表中的数据绘制图形

    我做了一些假设.假设你的数据是这样的:x y yerr_positive yerr_negative 1 1 0.1 0.2 2 2 0.1 0.2 3 3 0.1 0.2 4 4 0.1 0.2 我 ...

  6. python去掉列表中的单引号_从Python中的列表中删除单引号

    我有一个输入字符串: result = '"testing","0.8841","642000.0","80.014521&quo ...

  7. 在html中加入pdf文件吗,如何在网页中显示PDF文件

    我们是不是对百度文库能直接在网页上显示PDF文件感到好奇,你是否也想实现这样的功能?很多朋友认为可以直接在网页中插入代码就可以实现这个功能,其实要在网页中完整地显示PDF文件,需要把PDF文件转换成S ...

  8. html显示docx,网页中显示PDF的HTML代码.docx

    网页中显示PDF的HTML代码 您可能想打开文档至某一特别页面或目标,或显示书签.要与 链接一起放入一个动作命令,可紧接在 PDF 文件名后面键入数字符号 (#) 和该命令.以下表格显示可能的动作命令 ...

  9. 非常好的在网页中显示pdf的方法

    今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunkie/web_designers_g ...

最新文章

  1. MVC下HtmlHelper自带BeginForm表单提交与异步Ajax请求
  2. 架设HmailServer邮件服务器以及webmail
  3. android n等分 layout,RecyclerView GridLayoutManager 等分间距
  4. ngrx Effect学习笔记
  5. linux下编译httpd,Linux下编译安装Apache httpd 2.4
  6. LeetCode 296. 最佳的碰头地点(坐标独立+中位数的地方最近)
  7. python调用node_在node中执行python脚本
  8. OneNote怎样显示或者隐藏网格线
  9. android UI进阶之仿iphone的tab效果(二)
  10. phantomjs 安装使用
  11. iOS开源项目周报0302
  12. JavaScript函数与对象
  13. 内网渗透神器CobaltStrike之Beacon详解(三)
  14. hp服务器修改阵列,HP ProLiant 服务器 修改磁盘阵列的方法
  15. 用css伪元素制作箭头图标
  16. 2020-10-16
  17. 计算机不识别lacie硬盘,windows10系统下移动硬盘读不出来的三种解决方案
  18. matlab计算绝对值的导数,如何用matlab求带绝对值函数的导数? 你值得一看的技巧...
  19. MySQL运行原理与基础架构
  20. 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理解决方案

热门文章

  1. java raster_Raster
  2. Python基础教程:对象及数字对象与数学运算
  3. Python十段经典代码
  4. 用Python求出:1到某个数的奇数序列里一共出现了多少个3
  5. 使用python操作zookeeper
  6. 【opencv4】opencv视频教程 C++ 7、手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)
  7. VS调试时怎么跳过for循环?
  8. Yunyang tensorflow-yolov3 voc_train.txt以及voc_test.txt引用的路径位置
  9. Intel RealSense D435摄像头被识别成D430的解决办法
  10. PyQt4编程之简短地做出多个选择框