• 0. 需求
  • 1. 网页源代码分析
  • 2. 程序流程
  • 3. 代码

0. 需求

有人通过云盘映射分享了一批非扫描PDF文档http://pan.win10sys.com/电子书/Books(White%20prostitute),激发了我的“仓鼠”属性——我要保存到自己手里。但是这种分享不支持批量下载,一个一个下载也太low了,要不写个爬虫批量下载?

1. 网页源代码分析

  1. 按F12,点中间上边的小箭头,方便界面和代码对应。

    可以看到结构很简单,一个<a>(超链接)标签,非常适合BeautifulSoup。它可以切分出指定标签的内容,并按字典格式存储。
soup = BeautifulSoup(html, 'html.parser') #HTML解析
for k in soup.find_all('a'):              #依次解析所有<a>标签print([k['href'])                       #k的数据结构是字典
  1. Ctrl+U查看网页源代码,Ctrl+F查找"<a>",你会发现除了书籍超链接,页面中还有其它链接。剔除这些碍事儿的<a>标签,我们可以通过class这个属性区分。还要注意有的超链接没有class标签,对一个字典读取不存在的属性会报错。
if k['class'] == ['clearfix']:#筛选出书籍超链接#注意这里右边要加上方括号
  1. 用同样的方法查看下载页面的链接,是一个下载直链,点击就可以开始下载,本质上是向服务器发送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文档相关推荐

  1. 如何用Python批量将Pdf文档转换成Word文档?

    目录 一.前言 二.问题或需求 三.前提条件或注意事项 四.代码设计思路 五.具体执行代码 六.效果观察 七.声明及致谢 八.快捷方式 一.前言 一般情况,WPS系列office软件付费会员都有Pdf ...

  2. PyPDF2--如何使用python操作你的PDF文档

    PyPDF2–如何使用python操作你的PDF文档 前言 大家好!最近想操作一下PDF文档,总是收费,于是浅尝辄止地了解了一下python当中的PyPDF2这个库.借助本篇博客总结了一下个人所学到的 ...

  3. 如何批量去除PDF文档的水印 .

    现在的互联网时代是一个共享的时代,我们会经常从网络上面下载一些文件资料等等,那么是不是经常会遇到一些网站上的PDF文件会含有该网站的水印或者网址链接等等,接下来我们就是要讲怎样去水印. 单个PDF页的 ...

  4. python处理word或者pdf文件_利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...

  5. python爬虫批量下载“简谱”

    python讨论qq群:996113038 导语: 上次发过一篇关于"python打造电子琴"的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的.于是,今天我 ...

  6. python爬虫爬取百度文档

    使用python爬虫爬取百度文档文字 话不多说,直接上代码! import requests import reheaders = {"User-Agent": "Moz ...

  7. 新一配:perl循环调用python爬虫批量下载喜马拉雅音频

    新一配:perl循环调用python爬虫批量下载喜马拉雅音频 手机下载喜马拉雅音频后,获得的音频文件虽然可以转成mp3格式,但其文件名却是一长串字符串,无法辨别是哪一集,网上找了各种工具,都有局限性, ...

  8. 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...

  9. 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...

  10. 一个批量下载3GPP文档的shell小程序

    一个批量下载3GPP文档的shell小程序 wget "https://www.3gpp.org/ftp/Specs/archive"#获取所有的URL链接 function ge ...

最新文章

  1. 制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)
  2. Hyperledger Besu企业以太坊快速教程
  3. CPU GPU FPU TPU 及厂商
  4. pandas:apply(),applymap(),map()
  5. matlab 矩阵列乘系数,matlab 给某一列乘上一个系数
  6. 跨域小结(为什么form表单提交没有跨域问题,但ajax提交有跨域问题)
  7. Android 修改开机画面
  8. java游戏魔界村_魔界村(附秘籍)游戏下载-魔界村游戏最新版v2.0-爱单机
  9. CPU硅脂需要换吗?
  10. 解决pip无法更新问题
  11. 机器视觉方向的大牛介绍
  12. ​秋招上岸,机械转码经历和面经​
  13. 湖北地图html代码,echarts全国省市地图代码
  14. mysql取出时间最近的一条字段_Mysql 根据时间取出每组数据中最新的一条
  15. 六种不同型号的电灯泡
  16. Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突
  17. rabbitMq系列2:AMPQ协议与RabbitMQ执行过程
  18. 路径规划算法C++实现(三)--DWA
  19. Acwing 2944. 回家的路
  20. CSAPP期末复习(更新ing)

热门文章

  1. idea 快捷键大全(全网最详细)
  2. java后台对接app微信支付
  3. HackerRank数据库题目练习(2)
  4. SPSS新手教程——进行距离分析的方法
  5. [计算流体力学] NS 方程的速度压力法差分格式
  6. 汇总3种获取水系数据的途径
  7. 三维人脸重建:精读3dmm.py
  8. 伍德里奇 第6版 计量经济学导论_伍德里奇《计量经济学导论》(第6版)笔记和课后习题详解...
  9. Liquibase修改表字段
  10. 三十正青春!苏宁818要用“好服务”抢占年轻用户心智