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 条件判断的缩写方法
Sep 06 Python
python网络编程示例(客户端与服务端)
Apr 24 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
SQLite3中文编码 Python的实现
Jan 11 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
Python简单生成8位随机密码的方法
May 24 Python
深入理解Django的中间件middleware
Mar 14 Python
如何实现删除numpy.array中的行或列
May 08 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
Python模块的制作方法实例分析
Dec 21 Python
python实现学生信息管理系统(面向对象)
Jun 05 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
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
jcrop基本参数一览
2013/07/16 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
Python画图学习入门教程
2016/07/01 Python
python入门教程 python入门神图一张
2018/03/05 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
通过Python实现一个简单的html页面
2020/05/16 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
大学生自我评价怎样写好
2013/10/23 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
数字化校园建设方案
2014/05/03 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
先进工作者事迹材料
2014/12/23 职场文书
生日答谢词
2015/01/05 职场文书
茶花女读书笔记
2015/06/29 职场文书
讲座新闻稿
2015/07/18 职场文书
母亲节主题班会
2015/08/14 职场文书
护理工作心得体会
2016/01/22 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
python - asyncio异步编程
2021/04/06 Python
用CSS3画一个爱心
2021/04/27 HTML / CSS
Python循环之while无限迭代
2022/04/30 Python