吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6591|回复: 53
收起左侧

[Python 原创] 义务教育阶段教材下载

  [复制链接]
Senkita 发表于 2023-2-2 14:20

背景

临时需要几本人教版教材,就跑去人民教育出版社查看。

但是离网环境阅读不便,于是就想说下载下来。

网站没做反爬,直接爬取就行。所以这只是段随手写的几行小脚本,方便自用而已,大佬勿喷。

另:其他版本教材可到国家中小学智慧教育平台获取。在对应教材阅读页打开开发者工具-网络,下载异步加载完成的pdf.pdf文件即是。

教材版权归出版社所有,在此仅作代码交流用途。

地址

  1. 仓库:Textbook Crawler

代码

import os
import requests
from PIL import Image

class Crawler:
  textbooks: dict[str, dict[str, int]]

  def __init__(self, textbooks: dict[str, dict[str, int]]) -> 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[book]['id']
    pages: int = self.textbooks[book]['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[0]))

    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)

免费评分

参与人数 6吾爱币 +13 热心值 +6 收起 理由
zhangmi008 + 1 + 1 谢谢@Thanks!
我乃小明 + 2 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
bestmusic + 1 + 1 谢谢@Thanks!
hofer + 1 + 1 谢谢@Thanks!
Bob5230 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Senkita 发表于 2023-2-2 15:55
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:17
本帖最后由 xiaofeiTM233 于 2023-2-2 17:31 编辑

我记得是有个办法直接下pdf的(如图)

我一直是手动下的,刚刚浅看了一下,格式很简单,就是
[Asm] 纯文本查看 复制代码
https://r2-ndr.ykt.cbern.com.cn/edu_product/esp/assets_document/【地址中的contentId】.pkg/pdf.pdf

发经验分享好了,国家中小学智慧教育平台教材下载方法(api) - 『福利经验』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|[url]www.52pojie.cn[/url]

免费评分

参与人数 3吾爱币 +5 热心值 +3 收起 理由
seeskycn + 1 + 1 这个方法好,教会了我们方法,可以自己找地址。我要下的初中教材,网址开头.
xlu66 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
wszjf + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

mallsden 发表于 2023-2-3 13:32
Senkita 发表于 2023-2-2 18:14
[md]就是段脚本而已,并非成品软件。

如果不会Python且有下载电子版教材需求的话,可以参照**背景**里 ...

感谢大佬们的分享,弄成品很麻烦吗
hofer 发表于 2023-2-2 15:20
这是什么脚本,如何使用呢
zgxhmj 发表于 2023-2-2 15:01
会写的还是比我们这些人强呀
laobenlang 发表于 2023-2-2 14:30
可以,可以,这个可以。
eskyboy 发表于 2023-2-2 14:32
羡慕会写脚本的
宝葫芦 发表于 2023-2-2 15:04
吾爱有你更精彩!!!!
mcumail 发表于 2023-2-2 15:19
太棒了,膜拜中。。。
千军破 发表于 2023-2-2 15:22
谢谢,学习了
bestmusic 发表于 2023-2-2 15:55
谢谢分享!!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-28 16:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表