python下载网页中的pdf文件_【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个参数是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。其中回调函数名称可任意,但是参数必须为三个。一般直接使用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模块批量进行网页下载文件...相关推荐
- python向mysql中添加数据标签_用python在MySQL中写入数据和添加数据
在笔者之前的博文中,已介绍了用python连接与mysql数据库的知识.包括如何安装python连接mysql的pymysql包,如何通过cusor语句将python与mysql连接起来,以及如何用p ...
- python 从excel中抓取数据_使用Python抓取美团数据存于Excel中
0.程序是针对美团中的美食部分数据按好评排序采集. 要抓取保存的数据为: 商家名类型 地理位置 评论人数 均价 最低价格 1.首先编写网页数据采集函数,使用request采集网页源码,具体实现如 ...
- python 获取表格中的空数据_在python beautifulsoup中获取表格单元格值为空时的文本输出...
我正在编写一个beauthulsoup/python代码来从html表中获取数据.该表的问题是某些列可能有空白数据(单元格为空).当我运行这段代码时,当它第一次遇到表中的空白单元格时,它会以一个&qu ...
- python统计文章中的高频词汇_使用Python 统计高频字数的方法
使用Python 统计高频字数的方法 发布时间:2020-09-17 00:52:12 来源:脚本之家 阅读:112 作者:Silent_Summer 问题 (来自Udacity机器学习工程师纳米学位 ...
- 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 我 ...
- python去掉列表中的单引号_从Python中的列表中删除单引号
我有一个输入字符串: result = '"testing","0.8841","642000.0","80.014521&quo ...
- 在html中加入pdf文件吗,如何在网页中显示PDF文件
我们是不是对百度文库能直接在网页上显示PDF文件感到好奇,你是否也想实现这样的功能?很多朋友认为可以直接在网页中插入代码就可以实现这个功能,其实要在网页中完整地显示PDF文件,需要把PDF文件转换成S ...
- html显示docx,网页中显示PDF的HTML代码.docx
网页中显示PDF的HTML代码 您可能想打开文档至某一特别页面或目标,或显示书签.要与 链接一起放入一个动作命令,可紧接在 PDF 文件名后面键入数字符号 (#) 和该命令.以下表格显示可能的动作命令 ...
- 非常好的在网页中显示pdf的方法
今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunkie/web_designers_g ...
最新文章
- MVC下HtmlHelper自带BeginForm表单提交与异步Ajax请求
- 架设HmailServer邮件服务器以及webmail
- android n等分 layout,RecyclerView GridLayoutManager 等分间距
- ngrx Effect学习笔记
- linux下编译httpd,Linux下编译安装Apache httpd 2.4
- LeetCode 296. 最佳的碰头地点(坐标独立+中位数的地方最近)
- python调用node_在node中执行python脚本
- OneNote怎样显示或者隐藏网格线
- android UI进阶之仿iphone的tab效果(二)
- phantomjs 安装使用
- iOS开源项目周报0302
- JavaScript函数与对象
- 内网渗透神器CobaltStrike之Beacon详解(三)
- hp服务器修改阵列,HP ProLiant 服务器 修改磁盘阵列的方法
- 用css伪元素制作箭头图标
- 2020-10-16
- 计算机不识别lacie硬盘,windows10系统下移动硬盘读不出来的三种解决方案
- matlab计算绝对值的导数,如何用matlab求带绝对值函数的导数? 你值得一看的技巧...
- MySQL运行原理与基础架构
- 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理解决方案
热门文章
- java raster_Raster
- Python基础教程:对象及数字对象与数学运算
- Python十段经典代码
- 用Python求出:1到某个数的奇数序列里一共出现了多少个3
- 使用python操作zookeeper
- 【opencv4】opencv视频教程 C++ 7、手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)
- VS调试时怎么跳过for循环?
- Yunyang tensorflow-yolov3 voc_train.txt以及voc_test.txt引用的路径位置
- Intel RealSense D435摄像头被识别成D430的解决办法
- PyQt4编程之简短地做出多个选择框