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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
详解在Python和IPython中使用Docker
Apr 28 Python
python简单实现基数排序算法
May 16 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
Python对列表的操作知识点详解
Aug 20 Python
python区分不同数据类型的方法
Oct 14 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
Python 读取位于包中的数据文件
Aug 07 Python
如何用python开发Zeroc Ice应用
Jan 29 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP5+UTF8多文件上传类
2008/10/17 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
PDO::exec讲解
2019/01/28 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
js验证密码强度解析
2020/03/18 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
python for 循环获取index索引的方法
2019/02/01 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
军校本科大学生自我评价
2014/01/14 职场文书
财务总经理岗位职责
2014/02/16 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
新员工入职欢迎词
2015/01/23 职场文书
2015年社区工作总结
2015/04/08 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript