用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获取某一天是星期几的方法示例
Jan 17 Python
详解python函数传参是传值还是传引用
Jan 16 Python
Php多进程实现代码
May 07 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
python 读取数据库并绘图的实例
Dec 03 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
python如何基于redis实现ip代理池
Jan 17 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
PyCharm常用配置和常用插件(小结)
Feb 06 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
python 爬取天气网卫星图片
Jun 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
PHP SplObjectStorage使用实例
2015/05/12 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
python中的随机函数random的用法示例
2018/01/27 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
Python列表解析操作实例总结
2020/02/26 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
开工仪式策划方案
2014/05/23 职场文书
农业生产宣传标语
2014/10/08 职场文书
小学语文教学反思范文
2016/03/03 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
VUE递归树形实现多级列表
2022/07/15 Vue.js