IvenLuck 发表于 2020-12-12 15:24

百度文库文档下载地址解析python版【摸索不易,还请支持】

本帖最后由 IvenLuck 于 2020-12-12 15:36 编辑

1、浏览器打开百度首页,登录百度账号
2、按F12打开开发者工具,切换到网络选项卡,刷新页面
3、点开首页请求记录
4、复制bduss粘贴到程序中,软件即可正常运行,至于具体干什么就看你自己了
百度文库文档解析核心代码到此全部呈上,对接哪里?对接什么就靠你自己发挥了{:1_918:}

import requests
from bs4 import BeautifulSoup


class BaiDuWenKu(object):
    def __init__(self):
      # 初始化操作
      headers = {
            "User-Agent":
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0"
      }
      self.session = requests.Session()
      self.session.headers.update(headers)

    def setBduss(self, bduss):
      '''
      设置cookie,将作为解析下载时的身份验证
      '''
      cookies = {"BDUSS": bduss}
      self.session.cookies.update(cookies)

    def parserFileInfo(self, file_url):
      '''
      根据文档url解析文档信息
      '''
      res = self.session.get(file_url)
      soup = BeautifulSoup(res.text, "html.parser")
      file_info_options = [
            "ct", "doc_id", "retType", "sns_type", "storage", "useTicket",
            "target_uticket_num", "downloadToken", "sz", "v_code", "v_input"
      ]
      data = {}
      try:
            for option in file_info_options:
                value = soup.find(
                  "input", attrs={
                        "name": option
                  }).get("value") or ""
                data = value
      except BaseException as e:
            raise Exception("文档信息解析失败!")
      data["req_vip_free_doc"] = "1"
      return data

    def download(self, data):
      '''
      根据解析的数据下载文档
      '''
      url = "https://wenku.baidu.com/user/interface/getvipfreedoc"
      params = {"doc_id": data["doc_id"]}
      jRes = self.session.get(url, params=params).json()
      if not jRes["data"]["is_vip_free_doc"]:
            raise Exception("只能下载vip免费文档哦")
      url = "https://wenku.baidu.com/user/submit/download"
      res = self.session.post(url, data=data, allow_redirects=False)
      if res.status_code == 302:
            return res.headers.get("Location")
      else:
            raise Exception("下载失败,请稍后再试!")


def main():
    '''
    负责逻辑调度
    '''
    bduss = "Vx*************81djg2WDgtUU5pMkE5UnhmRV*********AAAAAAEAAABlTk4wbnZwZW5neW91amlnZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBo9V6AaPVeWG"
    bdwk = BaiDuWenKu()
    bdwk.setBduss(bduss)
    # url=input("请输入要下载的文档url:")
    url = "https://wenku.baidu.com/view/96fec4f4f321dd36a32d7375a417866fb94ac074.html?fr=search-income2"
    file_info = bdwk.parserFileInfo(url)
    download_url = bdwk.download(file_info)
    input("文档下载地址为:{}\n请及时下载".format(download_url))


if __name__ == "__main__":
    try:
      main()
    except BaseException as e:
      input(e)
喜欢的话记得给个赞,点个关注哦{:1_893:}
附运行图一张:

IvenLuck 发表于 2020-12-12 21:18

perrychan 发表于 2020-12-12 16:27
https://wenku.baidu.com/view/89014cd977c66137ee06eff9aef8941ea66e4b99.html
解析失败,是我的问题吗?

我也解析失败。。。。
文档结构有变吧,没测试那么多类型的文档

IvenLuck 发表于 2020-12-12 21:58

17601243856 发表于 2020-12-12 21:57
额,一直提示文档解析失败,是失效了吗

确实有些文档解析不了。测试不多

旖旎若鸿 发表于 2020-12-12 15:25

啊?是不是还没编辑完...

lxwen 发表于 2020-12-12 15:26

下载的是原版文档吗

雪莱鸟 发表于 2020-12-12 15:28

这没写完就发出来啦?
{:301_995:}

IvenLuck 发表于 2020-12-12 15:29

旖旎若鸿 发表于 2020-12-12 15:25
啊?是不是还没编辑完...

编辑一半点错了。。。。

IvenLuck 发表于 2020-12-12 15:31

雪莱鸟 发表于 2020-12-12 15:28
这没写完就发出来啦?

点错了。。。。

huixiaochuna 发表于 2020-12-12 15:32

快点吧,我双12都不去买东西,就在这等你了{:301_990:}

IvenLuck 发表于 2020-12-12 15:38

huixiaochuna 发表于 2020-12-12 15:32
快点吧,我双12都不去买东西,就在这等你了

已补充完整!

LSZ51 发表于 2020-12-12 15:39

能直接赐给个简易软件吗,歇菜菜鸟看不懂代码{:1_909:}

IvenLuck 发表于 2020-12-12 15:40

lxwen 发表于 2020-12-12 15:26
下载的是原版文档吗

是原版文档
页: [1] 2 3 4 5
查看完整版本: 百度文库文档下载地址解析python版【摸索不易,还请支持】