用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 open()文件处理使用介绍
Nov 30 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
Python实现字典的key和values的交换
Aug 04 Python
Python读取txt某几列绘图的方法
Oct 14 Python
python中partial()基础用法说明
Dec 30 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
Django自定义列表 models字段显示方式
Apr 03 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
python redis存入字典序列化存储教程
Jul 16 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
Django基于Models定制Admin后台实现过程解析
Nov 11 Python
pandas时间序列之pd.to_datetime()的实现
Jun 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
php页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
vue mounted组件的使用
2018/06/18 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
JS实现灯泡开关特效
2020/03/30 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Python列表解析操作实例总结
2020/02/26 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
Keras设置以及获取权重的实现
2020/06/19 Python
用Python 执行cmd命令
2020/12/18 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
产品销售员岗位职责
2013/12/18 职场文书
企业新年寄语
2014/04/04 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
广播体操口号
2014/06/18 职场文书
个人先进事迹材料
2014/12/29 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android