用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扫描IP段查看指定端口是否开放的方法
Jun 09 Python
python 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
flask框架视图函数用法示例
Jul 19 Python
Python微医挂号网医生数据抓取
Jan 24 Python
Python面向对象程序设计类的多态用法详解
Apr 12 Python
pandas计数 value_counts()的使用
Jun 24 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
python 带时区的日期格式化操作
Oct 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 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
让html页面不缓存js的实现方法
2014/10/31 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
python学生管理系统开发
2019/01/30 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
python处理大日志文件
2019/07/23 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
PHP面试题集
2016/12/18 面试题
工程管理英文求职信
2014/03/18 职场文书
质量承诺书怎么写
2014/05/24 职场文书
材料化学专业求职信
2014/07/15 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
爱心捐款感谢信
2015/01/20 职场文书
小升初自荐信范文
2015/03/05 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android