用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程序设计入门(1)基本语法简介
Jun 13 Python
python使用pil生成图片验证码的方法
May 08 Python
Python中title()方法的使用简介
May 20 Python
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python字符串格式化
Jun 15 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
May 05 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
Python微信公众号开发平台
Jan 25 Python
对python中Librosa的mfcc步骤详解
Jan 09 Python
Python3实现的反转单链表算法示例
Mar 08 Python
python命令行参数用法实例分析
Jun 25 Python
如何利用python实现Simhash算法
Jun 28 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
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
Python 开发Activex组件方法
2009/11/08 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
美工的岗位职责
2013/11/14 职场文书
消防安全检查制度
2014/02/04 职场文书
个人投资合作协议书
2014/10/12 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书