用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中将阿拉伯数字转换成中文的实现代码
May 19 Python
Python常用知识点汇总
May 08 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
python通过http下载文件的方法详解
Jul 26 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
Python如何把不同类型数据的json序列化
Apr 30 Python
TensorFlow的自动求导原理分析
May 26 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
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
jQuery插件 tabBox实现代码
2010/02/09 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python 模块EasyGui详细介绍
2017/02/19 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
意大利团购网站:Groupon意大利
2016/10/11 全球购物
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
中间件分为哪几类
2016/09/18 面试题
降消项目实施方案
2014/03/30 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
责任书格式范文
2014/07/28 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
python字符串常规操作大全
2021/05/02 Python
MySQL通过binlog恢复数据
2021/05/27 MySQL