首页 > 其他分享 >八爪方案——原创力文档

八爪方案——原创力文档

时间:2023-05-28 10:11:50浏览次数:12  
标签:方案 url 八爪 self re 文档 doc print path

可以图片保存,免费预览的文档,付费文档不能处理,请支持正版[狗头]。

import datetime
import os.path
import sys
import requests
from bs4 import BeautifulSoup
import re
import time
import json
from lxml import etree

class MaxDoc:
    def __init__(self, url):
        self.url = url

    def print_msg(self, msg):
        print(f"{str(datetime.datetime.now())[0:-7]}\t{msg}")

    def run(self):
        path = os.path.split(os.path.realpath(__file__))[0] + "\\img"
        if os.path.exists(path) and os.listdir(path + "\\") != []:
            self.print_msg("已存在文档,若想继续,请删除或者移动img目录")
            sys.exit()
        elif not os.path.exists(path):
            # print("检测到无img文件夹,创建文件")
            self.print_msg("检测到无img文件夹,创建文件")
            os.mkdir(path)
        doc_url = self.url  # 要爬的文档
        session = requests.session()
        session.headers.update({
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68"
        })
        html = session.get(doc_url).text
        soup = BeautifulSoup(html, "html.parser")
        t = re.search(re.compile("(?:senddate:)(.*),"), str(soup.select("script")[5].next)).groups()[0].replace("'", "").strip(" ")
        view_token = re.search(re.compile("(?:view_token:)(.*)//预览的token"), str(soup.select("script")[5].next)).groups()[0].replace("'", "").strip(" ")
        project_id = 1
        aid = re.findall(re.compile("(?:aid:)(.*),"), str(soup.select("script")[5].next))[-1].strip(" ")
        actual_page = re.search(re.compile("(?:actual_page:)(.*),"), str(soup.select("script")[5].next)).groups()[0].strip(" ")
        format = re.search(re.compile("(?:format:)(.*),"), str(soup.select("script")[5].next)).groups()[0].strip(" ").strip("'")
        if format == "ppt":
            # res = session.get("https:" + view_token)
            # etree.HTMLParser(encoding="utf-8")
            # # tree = etree.parse(local_file_path)
            # tree = etree.HTML(res._content.decode("utf-8"))
            # session.get("https://view-cache.book118.com" + json.loads(str(tree.xpath("/html/body/div[1]/input[2]")[0].attrib).replace("'", "\""))["value"])
            self.print_msg(f"格式为ppt,无法下载,请访问此链接查看\nhttps:{view_token}")
        else:
            doc_url_dict = {}
            for i in range(int(actual_page)):
                url_list = session.get("https://openapi.book118.com/getPreview.html", params={
                    "t": t,
                    "view_token": view_token,
                    "project_id": project_id,
                    "aid": aid,
                    "page": i + 1
                }).text
                time.sleep(1)
                if url_list[0] != "j":
                    self.print_msg(json.loads(url_list)["message"])
                    return
                now = json.loads(url_list.strip("jsonpReturn(").strip(")")[:-2])
                if now["status"] != 200:
                    # print("未知错误")
                    self.print_msg("未知错误")
                    os.rmdir(path)
                    return
                for j in now["data"]:
                    if now["data"][j] != "" and doc_url_dict.get(j) is None:
                        doc_url_dict[j] = now["data"][j]
                # print(json.loads(url_list.strip("jsonpReturn(").strip(")")[:-2])["data"])
            # re.search(re.compile("(?:senddate:)(.*)") ,str(soup.select("script")[5].next)).groups() view_token
            # print(doc_url_dict)
            for i in doc_url_dict:
                with open(f"{path}\\{i}.png", "wb") as f:
                    print(f"{str(datetime.datetime.now())[0:-7]}\t正在下载第{i}张图片...", end="")
                    f.write(session.get(f"https:{doc_url_dict[i]}").content)
                    print("下载完成")
            self.print_msg("爬取完成,存放于脚本img目录下")


if __name__ == "__main__":
    if len(sys.argv) == 1:
        print("用法:\npython3 get_doc.py url")
        sys.exit()
    get_doc = MaxDoc(sys.argv[1])  # 可以把url换成你要爬的文档url
    get_doc.run()

 

标签:方案,url,八爪,self,re,文档,doc,print,path
From: https://www.cnblogs.com/wayne-tao/p/17437844.html

相关文章

  • Chatbase:用文档或网站创建机器人
    面对铺天盖地的OpenAIChatGPT,有人走马观花,有人却利用它赚了不少。有这样一个大学生,前脚还在Meta和Tesla等大厂实习,半年后,其创办的聊天机器人公司就已经稳定月收6.4万美元(约合45万人民币),而且自首次上线以来,业务流量从未下滑缩水。为了满足巨大需求,他还雇用了两......
  • 个人/企业博客网站运营搭建方案,借助 HelpLook可快速搭建,附详细步骤
    提到免费搭建个人网站,80后的朋友们会想到开个新浪博客,90后的小伙伴则会知道搞个wordpress站,搞开发的程序猿们则在github上建立个人页面,多收获点fork和star,而其他互联网从业者会觉得弄个公号是最重要的,收获一些粉丝,有广告收入美滋滋…… 博客网站运营搭建有自己独立的网站平台,比如:......
  • JAVA的springboot私人健身与教练预约管理系统、健身房管理系统,附源码+数据库+lw文档+P
    1、项目介绍任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于java技术、springboot框架、B/S机构、Mysql数据库设计并实现了私人健身与教练预约管理系统。系统主要包括首页,个人中心,用户管理,教练管理,健身项目......
  • 部分dll文件缺失解决方案
    1."vcruntime140_1.dll"缺失错误下载安装VisualC++RedistributableforVisualStudio2019即可!下载链接(点击即下载安装exe文件,勿随便点击)2.win10出现丢失“MSVCR100.dll”怎么解决下载安装VisualC++RedistributableforVisualStudio2010即可!下载链接(点击即下载安装ex......
  • drf——全局处理异常、接口文档、jwt介绍、based64编码与解码
    全局异常处理原理#对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理{code:999,msg:'系统异常,请联系系统管理员'}#只要三大认证,视图类的方法出了异常,都会执行一个函数: rest_framework.viewsimportexception_handler#drf只要出了异常就会执行这是drf的配置文件......
  • 物业收费管理解决方案
    物业收费管理解决方案极致收费管理模块对物业服务公司向客户收取各种费用的活动进行管理,所有收费项目、收费标准、损耗分摊、违约金计算等都可采用用户自定义的方式,满足物业服务公司灵活多变的收费管理。应收费用的类型包括常规费用、抄表费用、临时费用;缴费方式包括现金缴款、......
  • git上传对象文件错误解决方案
    git上传对象文件错误解决方案​ 时隔一个星期,当我再次完成开发之后,准备将代码上传,却出现了一个上传代码的错误,记录一下错误和解决方案解决方案:运行gitfsck--full(base)ifeng@ubuntu:~/Desktop/luffycity$gitfsck--fullerror:对象文件.git/objects/c9/e59......
  • 存算一体方案解析
    存算分离是将计算和存储功能分开部署在不同的节点或设备上的概念。在存算分离架构中,计算任务通常在独立的计算单元(如CPU或GPU)中执行,而数据存储在独立的存储设备中。这种架构可以提供更大的灵活性和可伸缩性,但可能需要进行大量的数据传输和通信。【冯诺依曼架构的特点为存算分离】......
  • 道路摊铺机远程监控物联网解决方案
    道路摊铺机是一种主要用于高速公路上各种材料摊铺作业的施工设备。摊铺作业中,上下料与路面压实等工作无法实时监测,影响到道路使用寿命与行车安全,大量的建设资金可能被白白浪费掉。而在数字化智能化技术支持下,摊铺设备可以实现数字化实时监控,能够帮助用户快速进行管理控制,保证摊铺工......
  • 基于可穿戴的GPS定位存储模块方案特色解析
    前记 GPS作为一个位置定位手段,在日常生活中扮演着非常重要的角色。在研发动物可穿戴产品的同时。团队一直在做产品和模块标准化的事情,尽量把研发出来的东西标准化。按照任老板的说法,在追求理想主义的路上,不断孵化现实主义的产品与解决方案,攀登珠峰的征途中沿途下蛋。笔者非常赞......