RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1557297
Accepted
DezZzy
DezZzy
Asked:2023-12-15 02:02:31 +0000 UTC2023-12-15 02:02:31 +0000 UTC 2023-12-15 02:02:31 +0000 UTC

如何修复无法使用 bash 从网站下载页面的错误

  • 772

我想使用脚本下载一本书,但脚本无法正常工作,它应该从网站下载所有页面,但最后它下载第一个封面并显示有关该页面的信息,还应该有其他页面,但它们没有被下载。

代码:

#!/bin/bash

token="<eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMDUyOTEyLCJncm91cF9pZCI6MjE4LCJib29rX2lkIjo5NTE3MTMsImJvb2tfYWNjZXNzIjoxLCJ1c2VyX2VtYWlsIjoiZGFuc21pcjc0N2VAZ21haWwuY29tIiwidXNlcl90eXBlIjo4LCJleHAiOjE3MDI1ODU1MjgsImlhdCI6MTcwMjU2Mzg5OH0.CsU54Qvq3b03vYY92h2qXNP2GeLAiDYyx2bditM9WWqjfto-JvdGUD5iqG7nz4H-ONrJ78UYDXOiREUhyUYOIw>"

echo "Извлекается информация о книге..."
curl 'https://reader.new.book.ru/api/reader/book' \
  -H 'authority: reader.new.book.ru' \
  -H 'accept: application/json, text/plain, */*' \
  -H 'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,zh-TW;q=0.5,zh;q=0.4,ko;q=0.3,tt;q=0.2' \
  -H 'authorization: Bearer '$token \
  -H 'cookie: _ym_uid=1673594313647687580; _ym_d=1673594313; _ym_isad=1' \
  -H 'referer: https://reader.new.book.ru/?t='$token'&v=0' \
  -H 'sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  -H 'sec-fetch-dest: empty' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: same-origin' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' \
  --compressed --output description.json 1> /dev/null

author=$(cat description.json | jq -r '.message .data .author')
name=$(cat description.json | jq -r '.message .data .name')
pages=$(cat description.json | jq '.message .data .pages')

echo "Скачивается книга \""$author" - "$name"\" ("$pages" страниц)"

for i in {1..$(expr $pages + 0)}; do 
curl 'https://reader.new.book.ru/api/books/page_view/'$i'/'$token \
  -H 'authority: reader.new.book.ru' \
  -H 'accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8' \
  -H 'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,zh-TW;q=0.5,zh;q=0.4,ko;q=0.3,tt;q=0.2' \
  -H 'cookie: _ym_uid=1673594313647687580; _ym_d=1673594313; _ym_isad=1' \
  -H 'referer: https://reader.new.book.ru/?t='$token'&v=0' \
  -H 'sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  -H 'sec-fetch-dest: image' \
  -H 'sec-fetch-mode: no-cors' \
  -H 'sec-fetch-site: same-origin' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' \
  --compressed -v --output `printf %04d $i`."png" 1> /dev/null
done

bookname=$author' - '$name'.pdf'
echo "Конвертируется книга в файл \"".$bookname"\""

convert *.png $bookname
bash
  • 1 1 个回答
  • 52 Views

1 个回答

  • Voted
  1. Best Answer
    Михаил Ребров
    2023-12-15T02:54:53Z2023-12-15T02:54:53Z

    他下载了第一个封面

    如果它只下载第一页,则循环可能有问题。

    让我们检查。
    让我们删除所有不必要的东西,只留下一个参数、一个带有条件的循环,以及至少一些表明循环正在工作的指示:

    #!/bin/bash
    
    # для примера я просто инициализировал переменную числом ибо токен битый
    pages=10
    for i in {1..$(expr $pages + 0)}; do 
        # для индикации просто вывожу строку со значением счетчика
        echo "line #"$i
    done
    

    我看到如下结果 在此输入图像描述

    字符串是 output line #{1..10},这意味着变量 $i (表达式的结果)等于{1..10},这可能不是您所期望的。

    在我看来,在这种情况下,比任何其他情况都更适合以下循环

    #!/bin/bash
    pages=10
    for (( i=1; i<=pages; i++))
    do 
       echo "line #"$i
    done
    

    在此输入图像描述

    循环的定义由三个表达式组成

    • 初始化
      报告从什么值开始循环?
      i=1
      从1开始计数

    • condition是
      一个表达式,观察到哪个,我们就可以继续循环,
      i<=pages
      循环计数器会增加,直到小于或等于书本的页数

    • 步骤
      循环计数器将随着哪一步而改变。
      i++
      这个表达式相当于 挤出i=i+1,即 增加一

    因此,需要替换脚本中的循环表达式

    #!/bin/bash
    
    token="eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMDUyOTEyLCJncm91cF9pZCI6MjE4LCJib29rX2lkIjo5NTE3MTMsImJvb2tfYWNjZXNzIjoxLCJ1c2VyX2VtYWlsIjoiZGFuc21pcjc0N2VAZ21haWwuY29tIiwidXNlcl90eXBlIjo4LCJleHAiOjE3MDI1ODU1MjgsImlhdCI6MTcwMjU2Mzg5OH0.CsU54Qvq3b03vYY92h2qXNP2GeLAiDYyx2bditM9WWqjfto-JvdGUD5iqG7nz4H-ONrJ78UYDXOiREUhyUYOIw"
    
    echo "Извлекается информация о книге..."
    curl 'https://reader.new.book.ru/api/reader/book' \
      -H 'authority: reader.new.book.ru' \
      -H 'accept: application/json, text/plain, */*' \
      -H 'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,zh-TW;q=0.5,zh;q=0.4,ko;q=0.3,tt;q=0.2' \
      -H 'authorization: Bearer '$token \
      -H 'cookie: _ym_uid=1673594313647687580; _ym_d=1673594313; _ym_isad=1' \
      -H 'referer: https://reader.new.book.ru/?t='$token'&v=0' \
      -H 'sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"' \
      -H 'sec-ch-ua-mobile: ?0' \
      -H 'sec-ch-ua-platform: "macOS"' \
      -H 'sec-fetch-dest: empty' \
      -H 'sec-fetch-mode: cors' \
      -H 'sec-fetch-site: same-origin' \
      -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' \
      --compressed --output description.json 1> /dev/null
    
    author=$(cat description.json | jq -r '.message .data .author')
    name=$(cat description.json | jq -r '.message .data .name')
    pages=$(cat description.json | jq '.message .data .pages')
    
    echo "Скачивается книга \""$author" - "$name"\" ("$pages" страниц)"
    
    for (( i=1; i<=pages; i++))
    do
    curl 'https://reader.new.book.ru/api/books/page_view/'$i'/'$token \
      -H 'authority: reader.new.book.ru' \
      -H 'accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8' \
      -H 'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,zh-TW;q=0.5,zh;q=0.4,ko;q=0.3,tt;q=0.2' \
      -H 'cookie: _ym_uid=1673594313647687580; _ym_d=1673594313; _ym_isad=1' \
      -H 'referer: https://reader.new.book.ru/?t='$token'&v=0' \
      -H 'sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"' \
      -H 'sec-ch-ua-mobile: ?0' \
      -H 'sec-ch-ua-platform: "macOS"' \
      -H 'sec-fetch-dest: image' \
      -H 'sec-fetch-mode: no-cors' \
      -H 'sec-fetch-site: same-origin' \
      -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' \
      --compressed -v --output `printf %04d $i`."png" 1> /dev/null
    done
    
    bookname=$author' - '$name'.pdf'
    echo "Конвертируется книга в файл \"".$bookname"\""
    
    convert *.png $bookname
    

    在此输入图像描述

    该视频超短,因为 gif 的大小有限制,但如果您给它时间,它会下载所有内容

    在此输入图像描述

    在此输入图像描述

    • 2

相关问题

  • Shell/Bash 中有常量吗?

  • 使用 grep、sed、awk 查找单词

  • 删除 docker 镜像后的消息

  • 打印到不包含的 shell 行

  • 计算规则中的值

  • sudo 命令在 Windows 上的 Git Bash 中不起作用 [关闭]

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5