用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中使用PIL库实现图片高斯模糊实例
Feb 08 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
python读取二进制mnist实例详解
May 31 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
python实现实时视频流播放代码实例
Jan 11 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 Python
Python中的 No Module named ***问题及解决
Jul 23 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
js实现点击生成随机div
2020/01/16 Javascript
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
工作评语大全
2014/04/26 职场文书
诉讼授权委托书
2014/10/15 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
大学生党员个人总结
2015/02/13 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
夫妻吵架保证书
2015/05/08 职场文书
开业庆典致辞
2015/08/01 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
Django drf请求模块源码解析
2021/06/08 Python
分析Netty直接内存原理及应用
2021/06/14 Java/Android
vue实现锚点定位功能
2021/06/29 Vue.js
Javascript 解构赋值详情
2021/11/17 Javascript