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脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
举例详解Python中yield生成器的用法
Aug 05 Python
用Python设计一个经典小游戏
May 15 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
Python异常的检测和处理方法
Oct 26 Python
python http基本验证方法
Dec 26 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
使用Keras画神经网络准确性图教程
Jun 15 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
提取HTML标签
2006/10/09 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
详细介绍Python的鸭子类型
2016/09/12 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
毕业生自我鉴定
2013/12/04 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
HttpClient实现表单提交上传文件
2022/08/14 Java/Android