用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实现数通设备端口监控示例
Apr 02 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
Python绘制3D图形
May 03 Python
Python selenium根据class定位页面元素的方法
Feb 26 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
浅谈Python中的字符串
Jun 10 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
AI:如何训练机器学习的模型
Apr 16 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
使用 MySQL Date/Time 类型
2008/03/26 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
python绘制简单折线图代码示例
2017/12/19 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
python3学生名片管理v2.0版
2018/11/29 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
详解python配置虚拟环境
2019/04/08 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
医院后勤自我鉴定
2013/10/13 职场文书
采购文员岗位职责
2013/11/20 职场文书
预备党员公开承诺书
2014/05/28 职场文书
优秀应届生求职信
2014/06/16 职场文书
工作目标责任书
2014/07/23 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server