Python爬虫批量下载PDF文档
- 0. 需求
- 1. 网页源代码分析
- 2. 程序流程
- 3. 代码
0. 需求
有人通过云盘映射分享了一批非扫描PDF文档http://pan.win10sys.com/电子书/Books(White%20prostitute),激发了我的“仓鼠”属性——我要保存到自己手里。但是这种分享不支持批量下载,一个一个下载也太low了,要不写个爬虫批量下载?
1. 网页源代码分析
- 按F12,点中间上边的小箭头,方便界面和代码对应。
可以看到结构很简单,一个<a>
(超链接)标签,非常适合BeautifulSoup。它可以切分出指定标签的内容,并按字典格式存储。
soup = BeautifulSoup(html, 'html.parser') #HTML解析
for k in soup.find_all('a'): #依次解析所有<a>标签print([k['href']) #k的数据结构是字典
- Ctrl+U查看网页源代码,Ctrl+F查找
"<a>"
,你会发现除了书籍超链接,页面中还有其它链接。剔除这些碍事儿的<a>
标签,我们可以通过class这个属性区分。还要注意有的超链接没有class标签,对一个字典读取不存在的属性会报错。
if k['class'] == ['clearfix']:#筛选出书籍超链接#注意这里右边要加上方括号
- 用同样的方法查看下载页面的链接,是一个下载直链,点击就可以开始下载,本质上是向服务器发送get请求,可以使用requests工具包。
file = requests.get(url)
with open(title, "wb") as code: #title是文件名code.write(file.content)
2. 程序流程
3. 代码
from bs4 import BeautifulSoup
import urllib.request
import requests#获取网页源代码
def getHtml(url):req = urllib.request.Request(url)webpage = urllib.request.urlopen(req)html = webpage.read()return html#下载文件
def downloadPDF(url, title):#get请求file = requests.get(url)with open(title, "wb") as code:code.write(file.content)urlRoot = "电子书/Books(White%20prostitute)/电子工业出版社"
#链接中含有汉字需要转换一下格式
#但是会智障的把':'也转换,导致无法识别,所以先转换再拼接
urlRoot = urllib.parse.quote(urlRoot)
#获取网页源代码
htmlRoot = getHtml('http://pan.win10sys.com/' + urlRoot)
#解析
soup = BeautifulSoup(htmlRoot, 'html.parser')
#依次查找<a>标签
for k in soup.find_all('a'):#print(k)#剔除不含class属性的标签if (k.string is not 'GitHub') or (k.string is not '管理'): #只读取PDF超链,即class属性是['classfix']if k['class'] == ['clearfix']:#print('http://pan.win10sys.com' + k['href'])#拼接链接并读取html = getHtml('http://pan.win10sys.com/' + k['href'])#title就是书名title = k['title']#解析PDF下载页面 soup2 = BeautifulSoup(html, 'html.parser')#依次查找<a>标签for k2 in soup2.find_all('a'):#只读取下载超链,即class属性是['download-menu']if k2['class'] == ['download-menu']:downloadPDF(k2['href'], title)print("success:" + " " + title)else:print("剔除:" + ' ' + k)else:print("剔除:" + ' ' + k)
Python爬虫批量下载PDF文档相关推荐
- 如何用Python批量将Pdf文档转换成Word文档?
目录 一.前言 二.问题或需求 三.前提条件或注意事项 四.代码设计思路 五.具体执行代码 六.效果观察 七.声明及致谢 八.快捷方式 一.前言 一般情况,WPS系列office软件付费会员都有Pdf ...
- PyPDF2--如何使用python操作你的PDF文档
PyPDF2–如何使用python操作你的PDF文档 前言 大家好!最近想操作一下PDF文档,总是收费,于是浅尝辄止地了解了一下python当中的PyPDF2这个库.借助本篇博客总结了一下个人所学到的 ...
- 如何批量去除PDF文档的水印 .
现在的互联网时代是一个共享的时代,我们会经常从网络上面下载一些文件资料等等,那么是不是经常会遇到一些网站上的PDF文件会含有该网站的水印或者网址链接等等,接下来我们就是要讲怎样去水印. 单个PDF页的 ...
- python处理word或者pdf文件_利用python程序生成word和PDF文档的方法
一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...
- python爬虫批量下载“简谱”
python讨论qq群:996113038 导语: 上次发过一篇关于"python打造电子琴"的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的.于是,今天我 ...
- python爬虫爬取百度文档
使用python爬虫爬取百度文档文字 话不多说,直接上代码! import requests import reheaders = {"User-Agent": "Moz ...
- 新一配:perl循环调用python爬虫批量下载喜马拉雅音频
新一配:perl循环调用python爬虫批量下载喜马拉雅音频 手机下载喜马拉雅音频后,获得的音频文件虽然可以转成mp3格式,但其文件名却是一长串字符串,无法辨别是哪一集,网上找了各种工具,都有局限性, ...
- 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)
前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...
- 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)
前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...
- 一个批量下载3GPP文档的shell小程序
一个批量下载3GPP文档的shell小程序 wget "https://www.3gpp.org/ftp/Specs/archive"#获取所有的URL链接 function ge ...
最新文章
- 制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)
- Hyperledger Besu企业以太坊快速教程
- CPU GPU FPU TPU 及厂商
- pandas:apply(),applymap(),map()
- matlab 矩阵列乘系数,matlab 给某一列乘上一个系数
- 跨域小结(为什么form表单提交没有跨域问题,但ajax提交有跨域问题)
- Android 修改开机画面
- java游戏魔界村_魔界村(附秘籍)游戏下载-魔界村游戏最新版v2.0-爱单机
- CPU硅脂需要换吗?
- 解决pip无法更新问题
- 机器视觉方向的大牛介绍
- ​秋招上岸,机械转码经历和面经​
- 湖北地图html代码,echarts全国省市地图代码
- mysql取出时间最近的一条字段_Mysql 根据时间取出每组数据中最新的一条
- 六种不同型号的电灯泡
- Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突
- rabbitMq系列2:AMPQ协议与RabbitMQ执行过程
- 路径规划算法C++实现(三)--DWA
- Acwing 2944. 回家的路
- CSAPP期末复习(更新ing)
热门文章
- idea 快捷键大全(全网最详细)
- java后台对接app微信支付
- HackerRank数据库题目练习(2)
- SPSS新手教程——进行距离分析的方法
- [计算流体力学] NS 方程的速度压力法差分格式
- 汇总3种获取水系数据的途径
- 三维人脸重建:精读3dmm.py
- 伍德里奇 第6版 计量经济学导论_伍德里奇《计量经济学导论》(第6版)笔记和课后习题详解...
- Liquibase修改表字段
- 三十正青春!苏宁818要用“好服务”抢占年轻用户心智