用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之画圈还不简单吗?
Sep 20 Python
python操作ssh实现服务器日志下载的方法
Jun 03 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
git进行版本控制心得详谈
Dec 10 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
pymysql模块的使用(增删改查)详解
Sep 09 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
python中for in的用法详解
Apr 17 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 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下10件你也许并不了解的事情
2008/09/11 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
Javascript事件实例详解
2013/11/06 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
Python中的文件和目录操作实现代码
2011/03/13 Python
wxPython学习之主框架实例
2014/09/28 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
Python中字符串与编码示例代码
2019/05/20 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
详解Python是如何实现issubclass的
2019/07/24 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
关于VPN
2012/06/10 面试题
教师的实习自我鉴定
2013/12/17 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
党员个人剖析材料
2014/09/30 职场文书
详解JS数组方法
2021/11/20 Javascript