义务教育阶段教材下载
## 背景临时需要几本人教版教材,就跑去[人民教育出版社](https://jc.pep.com.cn)查看。
但是离网环境阅读不便,于是就想说下载下来。
网站没做反爬,直接爬取就行。所以这只是段随手写的几行小脚本,方便自用而已,大佬勿喷。
> 另:其他版本教材可到[国家中小学智慧教育平台](https://www.zxx.edu.cn/tchMaterial)获取。在对应教材阅读页打开开发者工具-网络,下载异步加载完成的`pdf.pdf`文件即是。
教材版权归出版社所有,在此仅作代码交流用途。
## 地址
1. 仓库:(https://github.com/Senkita/Textbook-Crawler)
## 代码
```python
import os
import requests
from PIL import Image
class Crawler:
textbooks: dict]
def __init__(self, textbooks: dict]) -> None:
self.textbooks = textbooks
def download_pic(self, book: str) -> None:
'''
description: 下载图片
param {*} self
param {str} book
return {*}
author : Senkita
'''
os.makedirs(book, exist_ok=True)
book_id: int = self.textbooks['id']
pages: int = self.textbooks['pages']
for page in range(pages):
page_num: int = page + 1
url: str = 'https://book.pep.com.cn/{}/files/mobile/{}.jpg'.format(
book_id, page_num
)
res = requests.get(url)
with open('{}/{}.jpg'.format(book, page_num), 'wb') as f:
f.write(res.content)
@staticmethod
def sort_pic(book: str) -> list:
'''
description: 图片排序
param {str} book
return {list}
author : Senkita
'''
files: list = []
for file in os.listdir(book):
if file[-4:] == '.jpg':
files.append(file[:-4])
files.sort(key=lambda ele: int(ele))
return files
@staticmethod
def generate_pdf(book: str, files: list) -> None:
'''
description: 生成PDF
param {str} book
param {list} files
return {*}
author : Senkita
'''
pics: list = []
pdf: Image.Image = Image.open('{}/{}.jpg'.format(book, files))
files.pop(0)
for pic in files:
img: Image.Image = Image.open('{}/{}.jpg'.format(book, pic))
if img.mode == 'RGBA':
img = img.convert('RGB')
pics.append(img)
pdf.save(
'./{}.pdf'.format(book),
'PDF',
resolution=100.0,
save_all=True,
quality=100,# 清晰度
subsampling=0,
append_images=pics,
)
def run(self) -> None:
for book in self.textbooks:
self.download_pic(book)
files: list = self.sort_pic(book)
self.generate_pdf(book, files)
``` hofer 发表于 2023-2-2 15:20
这是什么脚本,如何使用呢
Q:这是什么脚本?
A:Python的一段小爬虫。
Q:如何使用呢?
A:这里只放了段核心代码。
使用的话,前边提供了Github仓库地址。
1. 将源码克隆到本地,安装好依赖环境
2. 下载单本的话,python main.py 书名 ID 总页数,其中书名可自定,ID(地址栏中有一串长度13位的数字)和总页数需到对应阅读页中获取
3. 下载多本的话,直接在项目根目录下的textbooks.jsonc中仿示例添加对应教材的书名/ID/总页数,然后python main.py即可 本帖最后由 xiaofeiTM233 于 2023-2-2 17:31 编辑
我记得是有个办法直接下pdf的(如图)
https://pic.imgdb.cn/item/63db804eac6ef860169cb842.jpghttps://pic.imgdb.cn/item/63db808cac6ef860169d6122.jpg
我一直是手动下的,刚刚浅看了一下,格式很简单,就是https://r2-ndr.ykt.cbern.com.cn/edu_product/esp/assets_document/【地址中的contentId】.pkg/pdf.pdf
发经验分享好了,国家中小学智慧教育平台教材下载方法(api) - 『福利经验』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn Senkita 发表于 2023-2-2 18:14
就是段脚本而已,并非成品软件。
如果不会Python且有下载电子版教材需求的话,可以参照**背景**里 ...
感谢大佬们的分享,弄成品很麻烦吗 这是什么脚本,如何使用呢 会写的还是比我们这些人强呀 可以,可以,这个可以。 羡慕会写脚本的{:1_921:}{:1_921:}{:1_921:} 吾爱有你更精彩!!!! 太棒了,膜拜中。。。 谢谢,学习了 谢谢分享!!!!