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装饰器 免去调用父类构造函数的麻烦
May 18 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
python监控文件或目录变化
Jun 07 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
python paramiko模块学习分享
Aug 23 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
详解python中sort排序使用
Mar 23 Python
python下载库的步骤方法
Oct 12 Python
如何在Python 游戏中模拟引力
Mar 27 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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
PHP脚本中include文件出错解决方法
2008/11/20 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
列举Python中吸引人的一些特性
2015/04/09 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
高考自主招生自荐信
2013/10/20 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
2014年销售部工作总结
2014/12/01 职场文书
中小企业员工手册范本
2015/05/14 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
python通过函数名调用函数的几种方法总结
2021/06/07 Python
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技