用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求解最大公约数的实现方法
Aug 20 Python
Python计时相关操作详解【time,datetime】
May 26 Python
在Python中执行系统命令的方法示例详解
Sep 14 Python
python实现感知器算法详解
Dec 19 Python
Python人脸识别初探
Dec 21 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
python3 写一个WAV音频文件播放器的代码
Sep 27 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 Python
Django中celery的使用项目实例
Jul 07 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP 事件机制(2)
2011/03/23 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
python正则-re的用法详解
2019/07/28 Python
Python字符串的修改方法实例
2019/12/19 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
海淘母婴商城:国际妈咪
2016/07/23 全球购物
优秀幼教自荐信
2014/02/03 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
大型会议策划方案
2014/05/17 职场文书
社团活动总结书
2014/06/27 职场文书
颐和园导游词400字
2015/01/30 职场文书
加强党性修养心得体会
2016/01/21 职场文书