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进阶教程之函数对象(函数也是对象)
Aug 30 Python
Python中用altzone()方法处理时区的教程
May 22 Python
Python实战之制作天气查询软件
May 14 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
查看keras的默认backend实现方式
Jun 19 Python
Python 实现微信自动回复的方法
Sep 11 Python
Python的scikit-image模块实例讲解
Dec 30 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
Apr 13 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自定义大小验证码的方法详解
2013/06/07 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
Python本地与全局命名空间用法实例
2015/06/16 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
仓库管理计划书
2014/05/04 职场文书
企业标语口号
2014/06/10 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python