python爬虫实现AI续写

python爬虫实现AI续写

前言:审核大大要是有侵权,能不能划出哪些字眼侵权啊!!!内容真的是原创啊!!

1.动机和效果展示
最近b站上有很多的AI续写工具:
在这里插入图片描述
感觉挺有趣的,但是自己python写这样的ai不太现实,仔细看了看它们的特点,发现其实是用不同的ai续写工具完成的。碰巧的是,其中一款叫“****尝鲜版”(## 这回不侵权了吧)的工具,不仅免费,效果好,而且是网页版本。于是萌生出了一个用python爬虫进行续写的工具。
效果如图:
在这里插入图片描述
只有红框部分是我自己上写的过来的,其他都是续写出来的。
在这里插入图片描述
在学校电脑晚自习的时候后台运行差不多一个4个小时可以破万字。
2.原理及实现
(1).进入网页进行分析:
在这里插入图片描述
这么多的网页信息请求等,我发现最重要的其实是novel_ai请求
为何?
在这里插入图片描述
这里我遮挡些不必要的东西,可以发现content就是我们要拿去续写的文本,
而branchid,lastnode,mid,nid,uid里面重要的就是lastnode,这个记录了之前续写节点的_id
看一下返回的response

{
	"status": 0,
	"msg": "ok",
	"data": {
		"nodes": [{
			"_id": "61e37690a487af67fba10e8e",
			"created_at": 1642296976,
			"updated_text": "just now",
			"nid": "61e3768c1c5f5018d2e731e3",
			"values": [{
				"from": "model",
				"value": ",我叫李天宇,我是一个学生。\n这里是我的家庭住址。\n我的家庭是一个农村人,父亲是一个普通工薪阶层,母亲是一个中医师,而我自己则是一个医科学生。\n我在国内的家族是华夏最有权势、最神秘的几个之一"
			}],
			"children": [],
			"nodeid": "61e37690a487af67fba10e8e",
			"parentid": "61e3768c1c5f5018d2e731e4",
			"content": ",我叫李天宇,我是一个学生。\n这里是我的家庭住址。\n我的家庭是一个农村人,父亲是一个普通工薪阶层,母亲是一个中医师,而我自己则是一个医科学生。\n我在国内的家族是华夏最有权势、最神秘的几个之一",
			"isedit": false,
			"hidden": false,
			"brother": ["61e37690a487af67fba10e8e", "61e37690a487af67fba10e8c", "61e37690a487af67fba10e8a"]
		}, {
			"_id": "61e37690a487af67fba10e8c",
			"created_at": 1642296976,
			"updated_text": "just now",
			"nid": "61e3768c1c5f5018d2e731e3",
			"values": [{
				"from": "model",
				"value": "!我叫王文。\n\"你好。\"\n\"嗯?我叫王文。\"\n\"嗯,你好,我叫王文,你呢?\"\n\"我叫李文轩。\"\n\"哦,原来你是王文轩啊,真的没有想到。\"\n\"你也没有想到啊。\"\n\"是啊。\"\n\"对了。\"\n\"怎么了?\"\n\""
			}],
			"children": [],
			"nodeid": "61e37690a487af67fba10e8c",
			"parentid": "61e3768c1c5f5018d2e731e4",
			"content": "!我叫王文。\n\"你好。\"\n\"嗯?我叫王文。\"\n\"嗯,你好,我叫王文,你呢?\"\n\"我叫李文轩。\"\n\"哦,原来你是王文轩啊,真的没有想到。\"\n\"你也没有想到啊。\"\n\"是啊。\"\n\"对了。\"\n\"怎么了?\"\n\"",
			"isedit": false,
			"hidden": false,
			"brother": ["61e37690a487af67fba10e8e", "61e37690a487af67fba10e8c", "61e37690a487af67fba10e8a"]
		}, {
			"_id": "61e37690a487af67fba10e8a",
			"created_at": 1642296976,
			"updated_text": "just now",
			"nid": "61e3768c1c5f5018d2e731e3",
			"values": [{
				"from": "model",
				"value": "!我叫赵飞羽,是一名高中生,现任职于某县的公务员。我是一名勤劳踏实,有责任心的人,请大家放心。\n我会继续努力,不辜负大家的期望。\n这是我的手机号码,希望我们以后可以联系。\n感谢大家!\n新书《"
			}],
			"children": [],
			"nodeid": "61e37690a487af67fba10e8a",
			"parentid": "61e3768c1c5f5018d2e731e4",
			"content": "!我叫赵飞羽,是一名高中生,现任职于某县的公务员。我是一名勤劳踏实,有责任心的人,请大家放心。\n我会继续努力,不辜负大家的期望。\n这是我的手机号码,希望我们以后可以联系。\n感谢大家!\n新书《",
			"isedit": false,
			"hidden": false,
			"brother": ["61e37690a487af67fba10e8e", "61e37690a487af67fba10e8c", "61e37690a487af67fba10e8a"]
		}],
		"count": 0,
		"cur_nodeid": "61e3768c1c5f5018d2e731e4"
	}
}

返回一个列表,记录了续写的返回值,如果我们每次都选择第一个,无线循环访问,就可以实现一直续写了。
思路是:
先novel_ai把自己要续写的内容传过去,收到回复后在把回复的内容第一个加到源文本中,继续传过去,循环往复即可。
而novel_ai:
在这里插入图片描述
这里我隐藏的原因是这是我的访问地址,你要进去访问要先手机号验证,我总不能把我的给你去玩吧。。。。
提示:这个网页访问不需要填写headers,管的很宽的,毕竟每次续写都要15——20s…
上代码:

import requests
import json


url = "http://if.caiyunai.com/v2/novel/?????????/novel_ai"

payloaddata = {
    "branchid":"61dab2c7c14c1171b19578a9",
    "content": "我不是神,我只是一介凡人!", #默认值,挺中二的。。。
    "lang": "zh",
    "lastnode": "61dab2c7c14c1171b19578a8",
    "mid": "60094a2a9661080dc490f75a",
    "nid": "61dab2c7c14c1171b19578a7",
    "ostype": "",
    "status": "http",
    "storyline": "true",
    "title": "",
    "uid": "????????" 
}
#这里我加入了文本输入,这样方便一点
f_path = input("输入自己的内容文件:")
f = open(f_path,mode="a+",encoding="utf-8")
f.seek(0,0)
str=""
for each_line in f:
    str=str + each_line + "\n"
payloaddata["content"] = str
f.close()
temp="2"
while temp != "1" :
	#为什么每次我都重新打开呢,因为是无限循环,所以中途退出的可能没有保存
	#所以每次都打开关闭,确保保存了
    f = open(f_path,mode="a+",encoding="utf-8")
    f.seek(0,0)
    str=""
    for each_line in f:
        str=str + each_line + "\n"
    payloaddata["content"] = str    
    rep = requests.post(url,data=json.dumps(payloaddata))
    dit = rep.json()
    rep.close()
    dit = dit["data"]["nodes"][0]
    print("为你返回续写的内容为:"+"--------------------------------------------------------------------\n"+dit["content"])
    payloaddata["content"] = payloaddata["content"] + dit["content"]
    payloaddata["lastnode"] = dit["_id"]
    f.write(dit["content"])
    f.close()
#print(dit["data"]["nodes"]["_id"])


大功告成!

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值