用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实现的简单FTP上传下载文件实例
Jun 30 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
详解Python sys.argv使用方法
May 10 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
Python爬虫requests库多种用法实例
May 28 Python
Django REST Swagger实现指定api参数
Jul 07 Python
python绘制分布折线图的示例
Sep 24 Python
python eventlet绿化和patch原理
Nov 21 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 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 adodb操作mysql数据库
2009/03/19 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
npm的lock机制解析
2019/06/20 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
vue实现计步器功能
2019/11/01 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
百年校庆节目主持词
2014/03/27 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
给公司的建议书范文
2014/05/13 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
活动总结格式
2014/08/30 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
降价通知函
2015/04/23 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers