在这个全民抗疫的日子,中小学生们也开启了居家上网课的生活。很多没借到书的孩子,不得不在网上看电子课本,有的电子课本是老师发的网络链接,每次打开网页去看,既费流量,也不方便。今天我们就利用python的爬虫功能,把网络链接的课本爬下来,再做成PDF格式的本地文件,让孩子们随时都能看。本文案例爬取的网络课本见下图:

图1 电子课本首页

实现思路为两部分:

一、用python从网站爬取全部课本图片;

二、将图片合并生成PDF格式文件。

具体过程:

一、爬取课本图片

爬虫4流程:发出请求——获得网页——解析内容——保存内容。

根据上篇python批量爬取网络图片里讲过的知识,网页里的图片有单独的网址,爬取图片时需要先爬取出图片网址,再根据图片网址爬取图片。

1、发出请求:

首先找出合适的网址URL,因是静态网页网址,我们可直接用浏览器地址栏的网址,下图2中红框位置即为要用的网址,复制下来就行。

图2 浏览器地址栏网址可用于发出请求

网页网址为:http://www.shuxue9.com/beishida/cz8x/ebook/1.html

2、发出请求获得响应:

url = http://www.shuxue9.com/beishida/cz8x/ebook/1.html

response = requests.get(url)

3、解析响应获得网页内容:

soup = BeautifulSoup(response.content, 'lxml')

4、解析网页内容,获得图片网址:

jgp_url = soup.find('div', class_="center").find('a').find('img')['src']

5、向图片网址发出访问请求,并获得图片(因为该网址仅有图片,不需用find解析):

jpg = requests.get(jgp_url).content

6、保存图片:

f = open(set_path() + number + '.jpg','wb')

f.write(jpg)

其中,set_path()是提前建好的用于存放图片的路径,代码见下,也可直接写上想用的路径:

def set_path():

path = r'e:/python/book'

if not os.path.isdir(path):

os.makedirs(path)

paths = path+'/'

return(paths)

7、存在问题:

以上就完成了课本图片的爬取,我们打开文件夹,发现只有一张图片被下载了,后面的都没。这是因为浏览网页时,每个页面都有不同的网址,我们试着分析一下,发现电子课本的每一页网址很有规律:

第1页网址:http://www.shuxue9.com/beishida/cz8x/ebook/1.html

第2页网址:http://www.shuxue9.com/beishida/cz8x/ebook/2.html

......

第n页网址:http://www.shuxue9.com/beishida/cz8x/ebook/n.html

每页上的图片网址各不相同,没规律。我们可以根据规律用循环方式,对网址发起访问,获得图片后,自动循环访问下一个网址......最终获得全部图片。

8、设置循环提取:

在以上全部过程纳入到一个for循环里,根据网页,我们可以看到共有152页,设置循环后完整代码为:

import requests , os

from bs4 import BeautifulSoup

for i in range(1, 153):

# 发出请求

url = "http://www.shuxue9.com/beishida/cz8x/ebook/{}".format(i)+".html"

response = requests.get(url)

# 获得网页

soup = BeautifulSoup(response.content, 'lxml')

# 解析网页得到图片网址

jgp_url = soup.find('div', class_="center").find('a').find('img')['src']

# 发出请求解析获得图片

jpg = requests.get(jgp_url).content

# 设置图片保存路径

p = r'e:/python-book'

if not os.path.isdir(p):

os.makedirs(p)

# 保存图片

f = open(p + '/' + str(i) + '.jpg', 'wb')

f.write(jpg)

print("下载完成")

运行程序,即可一次下载全部课本图片,效果为:

图3 运行程序下载图片

图4 下载好的图片

二、将图片合并生成PDF格式文件

图片下载完成后,将图片生成PDF格式才方便使用。网上有专门的软件,但免费的试用版只能合并几张图片。今天教大家一个免费且常用的OFFICE—ppt软件来将多张图片合并成一个PDF格式文件。

新建一个PowerPoint空白文件,点击插入——相册——新建相册,

在弹出的窗体里,点击左上角的“文件/磁盘”,将刚才下载的图片全部导入进去,导入后的效果如下图右侧红框样式,然后点击“创建”,保存文件时另存为PDF格式即可。

总结:

至此,从网页爬取电子课本图片,生成PDF格式的本地文件就全部完成了。其中,如何找到并提取网页中的图片网址,在本头条上一篇文章里已有详述,有疑问的可查阅或留言交流。

另分享一个从网页内容中找到图片网址的简便方法:在打开的开发者工具界面,点击左上角的箭头符号,然后在网页上点击想要查找网址的图片,会自动高亮显示图片网址所在位置。如下所示:

python 制作网页 选择题_python爬取网页电子课本图片,自己制作可打印的课本文件...相关推荐

  1. hbuilderx简单网页代码_Python爬取网页数据

    都说python爬网页数据方便,我们今天就来试试,python爬取数据到底有多方便 简介 爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息 准备 IDE:PyChar ...

  2. python网页爬取方法_Python爬取网页的三种方法

    # Python爬取网页的三种方法之一:  使用urllib或者urllib2模块的getparam方法 import urllib fopen1 = urllib.urlopen('http://w ...

  3. python爬取一张图片并保存_python爬取网页图片并保存到本地

    先把原理梳理一下:首先我们要爬取网页的代码,然后从中提取图片的地址,通过获取到的地址来下载数据,并保存在文件中,完成. 下面是具体步骤: 先确定目标,我挑选的是国服守望先锋的官网的英雄页面,我的目标是 ...

  4. 【Python】学习笔记 #1 —— 爬取网页筛选数据全过程

    目录 Step 1:下载requests包 Step 2:导包 Step 3:requests使用 Step 4:Re的使用 Step 5:os的使用 Step 6:保存文件 Step 7:综合案例 ...

  5. python网络爬虫之解析网页的正则表达式(爬取4k动漫图片)[三]

    目录 前言 一.正则表达式的学习 1.正则表达式的匹配工具 2.正则表达式的样式 3.正则表达式的案例 二.爬取网页图片 1.分析网页 2.获取数据 爬取妹子网的案例 后记 前言 hello,大家好 ...

  6. 使用 requests+lxml 库的 Python 爬虫实例(以爬取网页连载小说《撒野》为例)

    需求目标 介绍使用 requests 库与 lxml 库进行简单的网页数据爬取普通框架与爬虫实例,本文以爬取网页连载小说<撒野>为例~ 当然有很多小说基本都能找到现成的 .txt 或者 . ...

  7. python 语音播报库_Python爬取天气信息并语音播报

    导读 爬虫是爬取网页的相关内容,了解HTML能够帮助你更好的理解网页的结构.内容等. TCP/IP协议,HTTP协议这些知识了解一下就可以,能够让你了解在网络请求和网络传输上的基本原理,这次的小案例用 ...

  8. python自动换壁纸_Python爬取必应每日图片并实现Windows壁纸自动切换

    不知道大家是否对每日一成不变的壁纸感到厌倦呢?反正对于我个人来说,如果每天打开电脑映入眼帘的都是不同的画面,那么科研热情都会被充分激发,从而提高自己的劳动生产力. 原来使用的是Deepin系统,自己写 ...

  9. python爬取正确但不出文件_python爬取糗事百科,该如何正确保存到本地文件夹?报错-问答-阿里云开发者社区-阿里云...

    我的程序已经可以爬取网络内容,但不太清楚怎么保存到当地文件夹,用网上方法试着做,但是有报错 import urllib import urllib.request import requests ## ...

  10. python爬取网页新闻_Python爬取新闻网数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 基本开发环境 Pyth ...

最新文章

  1. 特定场景下Yolo改进算法:Poly-Yolo
  2. 新的开始 和一些总结
  3. BSOJ 2423 -- 【PA2014】Final Zarowki
  4. java开发框架_Java-程序员感悟-开发人员喜欢的框架之Spring
  5. Python爬虫的经典多线程方式,生产者与消费者模型
  6. c索引超出了数组界限_关于MATLAB逻辑数组索引的二三事(二)
  7. 边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(四)...
  8. rabbitmq消费者获取消息慢_RabbitMQ:快速生产者和慢速消费者
  9. 吃亏的程序员,如何拿到 9 个月的年终奖?
  10. ansys通过扫掠(sweep)方法划分网格的方法
  11. 白日门手游luac文件加密怎么解密_浅析android手游lua脚本的加密与解密
  12. Photoshop2021入门教程|认识Photoshop界面
  13. 静态时序分析 Static Timing Analysis 教程
  14. matlab计算热岛效应强度,城市热岛热岛强度.ppt
  15. Python数据挖掘-OneR算法简介
  16. 计算机科学湖北的大学排行,2015年湖北省大学最佳专业排行榜
  17. (Modern Family S01E01) Part 9 PhilClair 射Luke、Haley和Dylan躺床上看电影
  18. Diffusion Model (扩散生成模型)的基本原理详解(三)Stochastic Differential Equation(SDE)
  19. 为什么ad域打开失败_【AD】域环境常见错误集
  20. nuke 8.0v3 强劲的视觉特效合成软件 linux,Nuke8.0

热门文章

  1. 2014年5月第二个周末总结--保守自己的心
  2. haproxy 基础知识
  3. 利用服务端session保存用户信息
  4. BZOJ4293 : [PA2015]Siano
  5. [转]教你如何在博客园放“可运行代码
  6. Unix Windows
  7. Mysql常见的日期查询语句
  8. Java 注解Annotation总结一
  9. LinkedHashMap如何保证有序
  10. 并发编程之ReadWriteLock接口