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模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Jul 04 Python
Python实现多并发访问网站功能示例
Jun 19 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
解决win64 Python下安装PIL出错问题(图解)
Sep 03 Python
Python Subprocess模块原理及实例
Aug 26 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 Python
Python实现DBSCAN聚类算法并样例测试
Jun 22 Python
python实现剪贴板的操作
Jul 01 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 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
javascript innerText和innerHtml应用
2010/01/28 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
浅析Python 条件控制语句
2020/07/15 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
英国现代绅士品牌:Hackett
2017/12/17 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
护理专业毕业生自荐信范文
2014/01/05 职场文书
教导处工作制度
2014/01/18 职场文书
文科生自我鉴定
2014/02/15 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
联谊活动总结
2014/08/28 职场文书
合作经营协议书范本
2014/09/16 职场文书
幼儿园教师求职信
2015/03/20 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
ubuntu安装jupyter并设置远程访问的实现
2022/03/31 Python