使用python爬取文库文档

下载doc文档

百度文库直接查看源代码并不能显示出页面上的文本内容,F12 network 也没有比较明显的接口,于是百度发现一篇文章
地址 https://www.cnblogs.com/huangguifeng/p/11829323.html
老哥牛掰,找到了文档的接口还提供了代码,记录一下,以免忘记

import requests
import re
import json
from docx import Document


def get_document(url):
	'''
	url 文库地址
	'''
    

    sess = requests.Session()

    html = sess.get(url).content.decode("gbk")

    # 抓取到文档标题

    title = re.search('id="doc-tittle-0">(.*?)</span>', html).group(1)

    # 使用正则提取 文档内容的url

    res = re.search("WkInfo.htmlUrls = '(.*)'", html).group(1)

    # \\x22是linux中的引号,替换成Python中的引号

    res = res.replace("\\x22", "\"")

    # 转成字典

    data = json.loads(res)
    
    document = Document()

    string = ""

    for i in data["json"]:

        url = i["pageLoadUrl"]  # 获取到url

        url = url.replace("\\", "")  # url中有转义符\去掉

        # 请求文档内容

        data = requests.get(url).content.decode("utf-8")

        # 提取文本数据

        res = re.search("wenku_\d*\((.*)\)", data, re.S).group(1)

        # 将json对象数据转成Python对象

        data = json.loads(res)

        for i in data['body']:

            # 判断数据是什么类型

            if i["t"] == "word":

                # 获取到文本

                string += str(i["c"])

                # ps中不为空并且_enter==1的时候是换行也就是一段内容

                if i["ps"] and i["ps"].get("_enter") == 1:

                    document.add_paragraph(string)  # 将一段内容写入到word

                    string = ""  # 重新复制 "" 表示新的一段文本

    # 保存word

    document.save(title + ".docx")


if __name__ == '__main__':
	get_document("https://wenku.baidu.com/view/5abffd98a200a6c30c22590102020740bf1ecd0d.html?from=search")

方法直接调用就可以,传入参数为文库地址,纯文本文档比较好用,如果文档有表格等其它特殊样式,可能会出现乱码,但是不影响文本内容。

代码中用到的module:

  • requests 用于发送请求获取请求结果
  • json 解析请求结果,转化为json数据,便于数据整理
  • re 正则模块,从请求结果中取出我们所需要的内容
  • docx 文档操作,将读出来的内容,重新写入新建文档中
  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值