python 爬取百度文库并下载(免费文章限定)


Posted in Python onDecember 04, 2020
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)[0]


def parse_type(content):
 return re.findall(r"docType.*?\:.*?\'(.*?)\'\,", content)[0]


def parse_title(content):
 return re.findall(r"title.*?\:.*?\'(.*?)\'\,", content)[0]


def parse_doc(content):
 result = ''
 url_list = re.findall('(https.*?0.json.*?)\\\\x22}', content)
 url_list = [addr.replace("\\\\\\/", "/") for addr in 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[1]:
    y = item[1]
    n = '\n'
   else:
    n = ''
   result += n
   result += item[0].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)[0]
 pn = re.findall('"totalPageNum":"(.*?)"', content)[0]
 rsign = re.findall('"rsign":"(.*?)"', content)[0]
 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 = [item.replace("\\", '') for item in 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)


# test_txt_url = 'https://wenku.baidu.com/view/cbb4af8b783e0912a3162a89.html?from=search'
# test_ppt_url = 'https://wenku.baidu.com/view/2b7046e3f78a6529657d5376.html?from=search'
# test_pdf_url = 'https://wenku.baidu.com/view/dd6e15c1227916888586d795.html?from=search'
# test_xls_url = 'https://wenku.baidu.com/view/eb4a5bb7312b3169a551a481.html?from=search'
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()

爬取结果

python 爬取百度文库并下载(免费文章限定)

以上就是python 爬取百度文库并以下载的详细内容,更多关于python 爬取百度文库的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现网页链接提取的方法分享
Feb 25 Python
python实现将汉字转换成汉语拼音的库
May 05 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
Python实现FM算法解析
Jun 18 Python
Django forms表单 select下拉框的传值实例
Jul 19 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
Python实现爬取网页中动态加载的数据
Aug 17 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 #Python
python3代码输出嵌套式对象实例详解
Dec 03 #Python
python3代码中实现加法重载的实例
Dec 03 #Python
python判断all函数输出结果是否为true的方法
Dec 03 #Python
django中cookiecutter的使用教程
Dec 03 #Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 #Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 #Python
You might like
自己做矿石收音机
2021/03/02 无线电
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
php读取csc文件并输出
2015/05/21 PHP
php简单生成随机数的方法
2015/07/30 PHP
php常用正则函数实例小结
2016/12/29 PHP
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
python中requests模块的使用方法
2015/04/08 Python
Python中pygame安装方法图文详解
2015/11/11 Python
python实现多线程的两种方式
2016/05/22 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
如何基于线程池提升request模块效率
2020/04/18 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
怎样声明一个匿名的内部类
2016/06/01 面试题
兼职学生的自我评价
2013/11/24 职场文书
读群众路线的心得体会
2014/09/03 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书