yjsx86 发表于 2019-3-15 22:35:52

看有人需要下百度文库的源码,来这有一份

[*]import requests
[*]import re
[*]import json
[*]import os
[*]
[*]session = requests.session()
[*]
[*]
[*]def fetch_url(url):
[*]    return session.get(url).content.decode('gbk')
[*]
[*]
[*]def get_doc_id(url):
[*]    return re.findall('view/(.*).html', url)
[*]
[*]
[*]def parse_type(content):
[*]    return re.findall(r"docType.*?:.*?\'(.*?)\',", content)
[*]
[*]
[*]def parse_title(content):
[*]    return re.findall(r"title.*?:.*?\'(.*?)\',", content)
[*]
[*]
[*]def parse_doc(content):
[*]    result = ''
[*]    url_list = re.findall('(https.*?0.json.*?)\\\\x22}', content)
[*]    url_list =
[*]    for url in url_list[:-5]:
[*]      content = fetch_url(url)
[*]      y = 0
[*]      txtlists = re.findall('"c":"(.*?)".*?"y":(.*?),', content)
[*]      for item in txtlists:
[*]            if not y == item:
[*]                y = item
[*]                n = '\n'
[*]            else:
[*]                n = ''
[*]            result += n
[*]            result += item.encode('utf-8').decode('unicode_escape', 'ignore')
[*]    return result
[*]
[*]
[*]def parse_txt(doc_id):
[*]    content_url = 'https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=' + doc_id
[*]    content = fetch_url(content_url)
[*]    md5 = re.findall('"md5sum":"(.*?)"', content)
[*]    pn = re.findall('"totalPageNum":"(.*?)"', content)
[*]    rsign = re.findall('"rsign":"(.*?)"', content)
[*]    content_url = 'https://wkretype.bdimg.com/retype/text/' + doc_id + '?rn=' + pn + '&type=txt' + md5 + '&rsign=' + rsign
[*]    content = json.loads(fetch_url(content_url))
[*]    result = ''
[*]    for item in content:
[*]      for i in item['parags']:
[*]            result += i['c'].replace('\\r', '\r').replace('\\n', '\n')
[*]    return result
[*]
[*]
[*]def parse_other(doc_id):
[*]    content_url = "https://wenku.baidu.com/browse/getbcsurl?doc_id=" + doc_id + "&pn=1&rn=99999&type=ppt"
[*]    content = fetch_url(content_url)
[*]    url_list = re.findall('{"zoom":"(.*?)","page"', content)
[*]    url_list =
[*]    if not os.path.exists(doc_id):
[*]      os.mkdir(doc_id)
[*]    for index, url in enumerate(url_list):
[*]      content = session.get(url).content
[*]      path = os.path.join(doc_id, str(index) + '.jpg')
[*]      with open(path, 'wb') as f:
[*]            f.write(content)
[*]    print("图片保存在" + doc_id + "文件夹")
[*]
[*]
[*]def save_file(filename, content):
[*]    with open(filename, 'w', encoding='utf8') as f:
[*]      f.write(content)
[*]      print('已保存为:' + filename)
[*]
[*]
[*]def main():
[*]    url = input('请输入要下载的文库URL地址_')
[*]    content = fetch_url(url)
[*]    doc_id = get_doc_id(url)
[*]    Type = parse_type(content)
[*]    title = parse_title(content)
[*]    if Type == 'doc':
[*]      result = parse_doc(content)
[*]      save_file(title + '.txt', result)
[*]    elif Type == 'txt':
[*]      result = parse_txt(doc_id)
[*]      save_file(title + '.txt', result)
[*]    else:
[*]      parse_other(doc_id)
[*]
[*]
[*]if __name__ == "__main__":
[*]    main()复制代码


imgchr.404.png

imgchr.404.png

imgchr.404.png

ApkB 发表于 2019-3-15 22:39:53

战略性标记

吃货 发表于 2019-3-15 22:40:38

mark

avHD 发表于 2019-3-15 22:44:56

战略mark

漂移弟 发表于 2019-3-15 22:45:22

战略性mark

nogcp 发表于 2019-3-15 22:45:53

本帖最后由 shares 于 2019-3-15 22:49 编辑

看见了
下载的是图片
如果能是源文档就完美了
还是谢谢了

shares 发表于 2019-3-15 22:46:05

不是可以直接下载原文档吗

seek0515 发表于 2019-3-15 22:47:35

楼主666啊,标记一下

bbsdamin 发表于 2019-3-15 22:48:03

来个教程啊标记
shy.gif

maiawpygH48 发表于 2019-3-15 22:49:15

学呀,今晚技术大牛多
页: [1] 2
查看完整版本: 看有人需要下百度文库的源码,来这有一份