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 30 Python
利用python实现xml与数据库读取转换的方法
Jun 17 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
python实战教程之自动扫雷
Jul 13 Python
Python函数参数操作详解
Aug 03 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Python语法分析之字符串格式化
Jun 13 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
Apr 30 Python
Django Paginator分页器的使用示例
Jun 23 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
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
js DataSet数据源处理代码
2010/03/29 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
jquery foreach使用示例
2013/09/12 Javascript
javascript常见操作汇总
2014/09/03 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
python http接口自动化脚本详解
2018/01/02 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
Python 一句话生成字母表的方法
2019/01/02 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
大学生求职简历的自我评价
2013/10/14 职场文书
保护动物倡议书
2014/04/15 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Elasticsearch 数据类型及管理
2022/04/19 Python
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers