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初学者的一些编程技巧
Apr 03 Python
python数据结构之链表详解
Sep 12 Python
Python闭包思想与用法浅析
Dec 27 Python
Python3.5集合及其常见运算实例详解
May 01 Python
Python版中国省市经纬度
Feb 11 Python
python3注册全局热键的实现
Mar 22 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
Python urlopen()参数代码示例解析
Dec 10 Python
详解Django中 render() 函数的使用方法
Apr 22 Python
Python Matplotlib绘制条形图的全过程
Oct 24 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 has encountered an Access Violation
2007/01/15 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
python win32 简单操作方法
2017/05/25 Python
python数据结构之链表的实例讲解
2017/07/25 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
工作迟到检讨书
2014/02/21 职场文书
小学英语课后反思
2014/04/26 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
《观察物体》教学反思
2016/02/17 职场文书
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android