我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python怎么爬取电子课本送给居家上课的孩子们

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python怎么爬取电子课本送给居家上课的孩子们

Python怎么爬取电子课本送给居家上课的孩子们,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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

Python怎么爬取电子课本送给居家上课的孩子们
图1 电子课本首页

实现思路为两部分:

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

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

具体过程:

一、爬取课本图片

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

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

1、发出请求:

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

Python怎么爬取电子课本送给居家上课的孩子们
图2 浏览器地址栏网址可用于发出请求

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

发出请求获得响应:

url = http://www.shuxue9.com/beishida/cz8x/ebook/1.htmlresponse = requests.get(url)

解析响应获得网页内容:

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

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

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

向图片网址发出访问请求,并获得图片(因为该网址仅有图片,不需用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 , osfrom bs4 import BeautifulSoupfor 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') ['class="lazy" data-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("下载完成")

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

Python怎么爬取电子课本送给居家上课的孩子们
图3 运行程序下载图片
Python怎么爬取电子课本送给居家上课的孩子们
图4 下载好的图片

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

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

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

Python怎么爬取电子课本送给居家上课的孩子们

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

Python怎么爬取电子课本送给居家上课的孩子们

总结:

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

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

Python怎么爬取电子课本送给居家上课的孩子们

关于Python怎么爬取电子课本送给居家上课的孩子们问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python怎么爬取电子课本送给居家上课的孩子们

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python怎么爬取电子课本送给居家上课的孩子们

Python怎么爬取电子课本送给居家上课的孩子们,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在这个全民抗疫的日子,中小学生们也开启了居家上网课的生活。很多没借到书的孩子,
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录