import json
import re
import requests
def get_document():
# 文库url
sess = requests.Session()
url = input("请输入百度文档url:")
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Referer": "https://wenku.baidu.com/",
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Mobile Safari/537.36 Edg/88.0.705.63",
}
sess.get("https://wk.baidu.com")
html = sess.get(url, headers=headers).text
# 抓取到文档标题
title = re.findall("<title>(.*?) - 百度文库</title>", html)[0]
#
# 使用正则提取 文档内容的url
res = re.findall('"htmlUrls":(.*),"free_page"', html)[0]
# 转成字典
data = json.loads(res)
# 新建一个文档
with open(title + ".doc", "w", encoding="gb2312") as f:
string = ""
num = 0
for i in data["json"]:
url = i["pageLoadUrl"] # 获取到url
# 请求文档内容
data = requests.get(url).text
# 提取文本数据
res = re.search("wenku_\d*\((.*)\)", data, re.S).group(1) # re.S整体进行匹配
# 将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:
f.write(string)
f.write("\n ")
string = "" # 重新复制 "" 表示新的一段文本
if __name__ == '__main__':
get_document()
基于转载文章进行的更新再加工