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 18 Python
Python中的异常处理简明介绍
Apr 13 Python
Python functools模块学习总结
May 09 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
简单讲解Python编程中namedtuple类的用法
Jun 21 Python
pandas去除重复列的实现方法
Jan 29 Python
解决Django连接db遇到的问题
Aug 29 Python
python getpass模块用法及实例详解
Oct 07 Python
如何基于python生成list的所有的子集
Nov 11 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
python实现从ftp上下载文件的实例方法
Jul 19 Python
Python基础之hashlib模块详解
May 06 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
php木马webshell扫描器代码
2012/01/25 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
python字符串编码识别模块chardet简单应用
2015/06/15 Python
自学python的建议和周期预算
2019/01/30 Python
解决Django连接db遇到的问题
2019/08/29 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
python实现在一个画布上画多个子图
2020/01/19 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
python实时监控logstash日志代码
2020/04/27 Python
浅析python函数式编程
2020/09/26 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
2015年新教师个人工作总结
2015/10/14 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
python3.9之你应该知道的新特性详解
2021/04/29 Python
手残删除python之后的补救方法
2021/06/26 Python