用python爬虫批量下载pdf的实现


Posted in Python onDecember 01, 2020

今天遇到一个任务,给一个excel文件,里面有500多个pdf文件的下载链接,需要把这些文件全部下载下来。我知道用python爬虫可以批量下载,不过之前没有接触过。今天下午找了下资料,终于成功搞定,免去了手动下载的烦恼。

由于我搭建的python版本是3.5,我学习了上面列举的参考文献2中的代码,这里的版本为2.7,有些语法已经不适用了。我修正了部分语法,如下:

# coding = UTF-8
# 爬取李东风PDF文档,网址:http://www.math.pku.edu.cn/teachers/lidf/docs/textrick/index.htm

import urllib.request
import re
import os

# open the url and read
def getHtml(url):
  page = urllib.request.urlopen(url)
  html = page.read()
  page.close()
  return html

# compile the regular expressions and find
# all stuff we need
def getUrl(html):
  reg = r'(?:href|HREF)="?((?:http://)?.+?\.pdf)'
  url_re = re.compile(reg)
  url_lst = url_re.findall(html.decode('gb2312'))
  return(url_lst)

def getFile(url):
  file_name = url.split('/')[-1]
  u = urllib.request.urlopen(url)
  f = open(file_name, 'wb')

  block_sz = 8192
  while True:
    buffer = u.read(block_sz)
    if not buffer:
      break

    f.write(buffer)
  f.close()
  print ("Sucessful to download" + " " + file_name)


root_url = 'http://www.math.pku.edu.cn/teachers/lidf/docs/textrick/'

raw_url = 'http://www.math.pku.edu.cn/teachers/lidf/docs/textrick/index.htm'

html = getHtml(raw_url)
url_lst = getUrl(html)

os.mkdir('ldf_download')
os.chdir(os.path.join(os.getcwd(), 'ldf_download'))

for url in url_lst[:]:
  url = root_url + url
  getFile(url)

上面这个例子是个很好的模板。当然,上面的还不适用于我的情况,我的做法是:先把地址写到了html文件中,然后对正则匹配部分做了些修改,我需要匹配的地址都是这样的,http://pm.zjsti.gov.cn/tempublicfiles/G176200001/G176200001.pdf。改进后的代码如下:

# coding = UTF-8
# 爬取自己编写的html链接中的PDF文档,网址:file:///E:/ZjuTH/Documents/pythonCode/pythontest.html

import urllib.request
import re
import os

# open the url and read
def getHtml(url):
  page = urllib.request.urlopen(url)
  html = page.read()
  page.close()
  return html

# compile the regular expressions and find
# all stuff we need
def getUrl(html):
  reg = r'([A-Z]\d+)' #匹配了G176200001
  url_re = re.compile(reg)
  url_lst = url_re.findall(html.decode('UTF-8')) #返回匹配的数组
  return(url_lst)

def getFile(url):
  file_name = url.split('/')[-1]
  u = urllib.request.urlopen(url)
  f = open(file_name, 'wb')

  block_sz = 8192
  while True:
    buffer = u.read(block_sz)
    if not buffer:
      break

    f.write(buffer)
  f.close()
  print ("Sucessful to download" + " " + file_name)


root_url = 'http://pm.zjsti.gov.cn/tempublicfiles/' #下载地址中相同的部分

raw_url = 'file:///E:/ZjuTH/Documents/pythonCode/pythontest.html'

html = getHtml(raw_url)
url_lst = getUrl(html)

os.mkdir('pdf_download')
os.chdir(os.path.join(os.getcwd(), 'pdf_download'))

for url in url_lst[:]:
  url = root_url + url+'/'+url+'.pdf' #形成完整的下载地址
  getFile(url)

这就轻松搞定啦。

我参考了以下资料,这对我很有帮助:
1、廖雪峰python教程
2、用Python 爬虫批量下载PDF文档
3、用Python 爬虫爬取贴吧图片
4、Python爬虫学习系列教程

到此这篇关于用python爬虫批量下载pdf的实现的文章就介绍到这了,更多相关python爬虫批量下载pdf内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现的一个p2p文件传输实例
Jun 04 Python
Python实现竖排打印传单手机号码易撕条
Mar 16 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
Django的信号机制详解
May 05 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
django框架两个使用模板实例
Dec 11 Python
pytorch自定义二值化网络层方式
Jan 07 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
python数据库编程 ODBC方式实现通讯录
Mar 27 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 Python
python3字符串输出常见面试题总结
Dec 01 #Python
python3中数组逆序输出方法
Dec 01 #Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 #Python
python爬虫请求头的使用
Dec 01 #Python
在pycharm创建scrapy项目的实现步骤
Dec 01 #Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 #Python
python 检测图片是否有马赛克
Dec 01 #Python
You might like
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
js实现随机点名功能
2020/12/23 Javascript
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
高中毕业自我鉴定
2013/12/16 职场文书
校园文化建设方案
2014/02/03 职场文书
中药专业自荐信范文
2014/03/18 职场文书
ktv好的活动方案
2014/08/17 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
干部个人考察材料
2014/12/24 职场文书
暑假安全保证书
2015/02/28 职场文书
如何写辞职信
2015/05/13 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
基于Redis延迟队列的实现代码
2021/05/13 Redis