用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 相关文章推荐
动态创建类实例代码
Oct 07 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
Python爬取qq music中的音乐url及批量下载
Mar 23 Python
python中字符串的操作方法大全
Jun 03 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
python3实现单目标粒子群算法
Nov 14 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 Python
python中pyplot基础图标函数整理
Nov 10 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
一些星际专用术语解释
2020/03/04 星际争霸
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
JavaScript 特殊字符
2007/04/05 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
详解Python编程中包的概念与管理
2015/10/16 Python
python区分不同数据类型的方法
2019/10/14 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
汽车维修专业自荐书
2014/05/26 职场文书
个人违纪检讨书
2014/09/15 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
门面租赁合同范文
2019/08/06 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
python编写五子棋游戏
2021/05/25 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
在Python 中将类对象序列化为JSON
2022/04/06 Python
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers