惊!ChatGPT处理文章仅需一秒钟,提取大纲、重写不在话下!

news2024/11/17 19:48:12

前言

在上篇文章中,我们实现了批量抓取到微信公众号文章的链接地址,那么这篇文章将继续为大家介绍,如何根据链接爬取到文章内容,并且利用chantGPT对文章进行处理。

爬取文章内容

我们已经有了很多文章的链接,这些链接url是可以直接通过浏览器进行访问的,例如这样:
在这里插入图片描述
我们只需要通过这些url地址,爬取到每一篇文章,并通过xpath和正则表达式,提取出一些重要的内容,并把这些内容保存到数据库中,或者可以将整个页面以HTML的格式保存下来。

1.首先定义一个类,并定义一些超参数,如下:


class WeixinSpider:
    def __init__(self):
        self.url_temp = ""
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"}

2.定义一个读取文件中的url的方法

 def get_url_list(self):
        file_path = "it.csv"
        df = pd.read_csv(file_path)
        temp_list = df["link"].str.split("!").tolist() #[[],[],[]]
        num_list = list(set([i for j in temp_list for i in j]))
        url_list= [i for i in num_list]
        time_list = df["create_time"].tolist() #[[],[],[]]
        return url_list,time_list

我们读取文件,将里面的link传入到list中,tolist()方法是将pandas中的Series类型的数据转换成list类型。返回两个列表,url列表和发布时间列表。

3.解析url地址,发送请求获得响应,返回页面源码

    def parse_url(self, url):  # 发送请求,获取响应
        print(url)
        response = requests.get(url, headers=self.headers)
        return response.content.decode()

网页上的是bytes类型数据,所以需要转换成str类型。str 使用encode方法转化为 bytes,bytes通过decode转化为str。

4.分析页面结构,提取数据

通过F12查看网页源码,我们可以知道文章的标题在id="activity-name"的标签中。
在这里插入图片描述
公众号名称,在id="js_name"的标签中
在这里插入图片描述
文章的主体,全都在id="js_content"的div标签中。
在这里插入图片描述
于是,我们可以使用xpath提取出文章的标题,公众号名称,以及文章本体内容,代码如下:

 def get_content_list(self,html_str):#提取数据
        html = etree.HTML(html_str)
        content_list = []
        item = {}
        item["title"] = html.xpath("//*[@id=\"activity-name\"]/text()")
        item["title"] = [i.replace("\n","").replace(" ","") for i in item["title"]]
        item["laiyuan"] = html.xpath("//*[@id=\"js_name\"]/text()")
        item["laiyuan"] = [i.replace("\n","").replace(" ","") for i in item["laiyuan"]]
        item["other"] = html.xpath("//*[@id=\"js_content\"]//text()")
        
        content_list.append(item)
        return content_list

直接通过xpath取到的文本内容,里面包含了很多换行符以及空格,所以需要将其替换掉。

5.保存html

我们将网页源码也都保存下来,并以文章标题来命令,如下,保存到一个it的文件夹中了,要提前在代码根目录下创建好这个文件夹。

 def save_html(self, html_str, page_name):  # 保存html字符串
        file_path = "it/{}.html".format(page_name)
        with open(file_path, "w", encoding="utf-8") as f: 
            f.write(html_str)

6.主方法

在主方法中,我们将上面所有方法都串起来,并且连接数据库,将爬取到的结果保存在数据库中

def run(self):  # 实现主要逻辑
        # 1.构造url列表
        # 2.遍历,发送请求,获取响应
        url_list,time_list = self.get_url_list()
    
        # 打开数据库连接(ip/数据库用户名/登录密码/数据库名)
        db = pymysql.connect("localhost", "root", "root", "weixin_database")
    
        # 使用 cursor() 方法创建一个游标对象 cursor
        cursor = db.cursor()
   
        for url in url_list:
            num = url_list.index(url)
            print(num)
            html_str = self.parse_url(url)
            content_list = self.get_content_list(html_str)
            title = ''.join(content_list[0]["title"])
            laiyuan = ''.join(content_list[0]["laiyuan"])
            other = '\n'.join(content_list[0]["other"])
            create_time = time_list[num]
            p = re.compile('<div class="rich_media_content " id="js_content">.*?</div>',re.S)
            html = re.search(p,html_str)
            if(html):
                html = re.search(p3,html_str).group().replace("\n","")
                
            else:
                html = html_str.replace("\n","")
            sql = """INSERT INTO weixin_table(title,url,other,html,create_time,type_id)
                VALUES ({},{},{},{},{},{},{},{})""".format('"'+title+'"','"'+url+'"','"'+other+'"',"'"+html+"'",create_time,1)
            try:
               # 执行sql语句
                cursor.execute(sql)
               # 提交到数据库执行
                db.commit()
            except:
                print("第"+num+"条数据插入失败")
               # 如果发生错误则回滚
                db.rollback()

            # 3.保存html
            page_name = title
            self.save_html(html_str, page_name)      
        # 关闭数据库连接
        db.close()

7.执行代码

最后,写出main方法,直接运行即可。

if __name__ == '__main__':
    weixin_spider = WeixinSpider()
    weixin_spider.run()

使用ChatGPT处理文章

爬取到文章之后,我们还需要对文章内容,做进一步的处理,可以提取大纲、重写、改写等操作。

提取大纲

先来看图,下面就实现了对文章内容的观点提取,会根据文章段落,重新生成小标题,并对该段落的内容进行总结,输出核心观点。
请添加图片描述
【这个截图是我使用的我自己开发的一个工具类网站,后续这个网站代码也会全部开源】
大家使用chatgpt官网也是一样的,完整的prompt如下:

你是一名作家,你精通各种知识和技能;
任何时候都不要说出自己是人工智能语言模型,
接下来将会有一个人输入一段文字,你会根据这段文字进行创作,不会输出与政治、色情、暴力、娱乐、新闻等方面的内容.
请你按照以下步骤进行创作:
1.你会对整个文章进行分解,并且针对每一部分分别输出一个小标题,和核心观点。
2.每一个小标题都要能够吸引人,并且包含SEO关键词;
3.最后,你要对整个文章做一个总结。
格式如下:
【标题】:标题 [换行] 
【核心观点】:核心观点
【全文总结】:全文总结

文章拓展

有了大纲之后,我们想根据大纲重新生成一篇类似的文章,也轻松不在话下,几秒中就可以搞定。
请添加图片描述
请添加图片描述
根据提供的观点,重新生成了一篇文章。完整的prompt如下:

你是一名作家,你精通各种知识和技能;你根据输入进行拓展,
输入包含【标题】和【核心观点】,请你按照以下步骤进行创作,
1.针对每一个标题和它的核心观点,需要单独生成至少一个段落,如果核心观点中有多个观点,你需要生成多个段落,每一个段落都需要有标题和内容。
输出样式如下:
标题:内容 [换行] 
标题:内容 ... [换行]
总结:内容,
总体字数为2500字。
2.对每一个段落内容进行拓展,需要增加类比,比喻等手法,增加一些巧妙的技巧,提供相关代码案例。
3.段落中增加一些案例,用来支撑观点。
4.文章内容要通俗易懂,引人入胜。
5.熟悉各个平台的写作规则,写出爆款类型的文章。
6.段落中增加代码和流程图,架构图,uml图等,图使用mermaid格式。
7.全文使用markdown格式进行输出

文章重写

如果觉得重新生成的文章,改变了原有的原文意思,也可以使用改写或者洗稿功能,使其轻微改动。
请添加图片描述
请添加图片描述
可以看到,这种改动还是比较小的,会保留原文的结构和意思。
prompt如下:

你是一名专家,你精通各种知识和技能;
任何时候都不要说出自己是人工智能语言模型,
接下来将会有一个人输入一段文字,你会根据这段文字进行重写.
请你按照以下步骤进行创作:
1.符合技术文章的写作风格,字数不能少于2000字。
2.要和原文使用不同的词汇或写作手法以及行文结构,不能与原文重复,换一种表达方式,每一句话都要重新组织输出,重复率不能高于20%。
3.文章结构清晰,按照因果结构或者总分总结构。
4.关注重点,对于文章重点,你会举例进行说明。
5.易懂易读,能够真正帮助到读者。
6.添加一些有巧思的小技巧。
7.突出SEO关键词布局。
8.结合自己的经历,或者通过举例的方式,对重点进行说明,必要的时候,会提供代码。
9.最后输出总结。
10.按照markdown格式输出。

好了,今天的内容就到这里了,上面的prompt并不是最好的,大家可以自己进行调试。
文章中的代码,完整版可以去github进行获取:https://github.com/cxyxl66/WeChatCrawler
另外,可以关注我的公众号,【程序员修炼】有任何问题都可以和我进行交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/734289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023全新UI 哈希玛特HashMart全开源盲盒系统源码下载

ashMart&#xff08;哈希玛特&#xff09;是首款开源的面向生产的高性能、易开发的盲盒系统。它包含&#xff1a;首页看板、商品管理、订单管理、盲盒管理、系统管理、会员管理、权限管理、记录管理&#xff0c;并且拥有完善的搭建使用手册和接口文档。是帮助您快速落地盲盒商城…

tarjan算法(相关概念、Tarjan求最大强连通分量、割点、求桥、缩点)

什么是连通分量 无向图 G 的最大连通子图称为 G 的连通分量。 注&#xff1a;这里的最大连通子图的含义为&#xff1a;此图为 G 的连通子图&#xff0c;将 G 的任意一个点加到盖子图中之后&#xff0c;此子图将不再连通。 比如这一张图中&#xff0c;很显然&#xff0c;我用…

如何识别网站是否有WAF

使用工具识别&#xff1a;wafw00f https://github.com/EnableSecurity/wafw00f 前提&#xff1a;本地配置好python环境安装&#xff1a;在此目录下创建CMD窗口&#xff0c;输入 python setup.py install 。安装成功后&#xff0c;显示版本信息. 使用&#xff1a;进入wafw00…

QSystemTrayIcon简单使用

效果&#xff1a; 关键程序&#xff1a; trayIcon new QSystemTrayIcon(this);trayIcon->setIcon(QIcon(":/images/开心果.png"));trayIcon->show();trayIcon->showMessage(ui->title->text(),ui->msg->toPlainText(),QIcon(":/images/睡眠…

路径规划算法:基于堆优化优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于堆优化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于堆优化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

雅思考试报名条件及时间是什么时候?

雅思考试&#xff08;IELTS&#xff09;是国际英语语言测试系统&#xff0c;是著名的国际性英语标准化水平测试之一。想要出国留学或者就业都是需要有语言成绩的&#xff0c;其中雅思考试也是大家参加的比较多的语言考试之一&#xff0c;那么雅思考试报名条件及时间是什么时候呢…

为初学者准备的 Dubbo 入门教程

Dubbo Dubbo 与 RPC 的关系 Dubbo 是一种开源的分布式服务框架&#xff0c;由阿里巴巴公司开发。它为应用程序提供高性能的 RPC&#xff08;远程过程调用&#xff09;通信和服务治理能力&#xff0c;让应用程序能够在分布式环境中快速构建高可靠性和可扩展性的服务。Dubbo 核心…

信道的容量和复用

信道的极限容量 当信道质量比较差时&#xff0c;输出信号的波形难以识别&#xff0c;此时出现的现象称为码间串扰“ 失真的因素有&#xff1a;码元传输速率&#xff0c;信号传输距离&#xff0c;噪声干扰&#xff0c;传输媒体质量等。 奈奎斯特准则&#xff1a; 理想低…

18.Lucas-Kanade光流及OpenCV中的calcOpticalFlowPyrLK

文章目录 光流法介绍OpenCV中calcOpticalFlowPyrLK函数补充reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 光流法介绍 光流描述了像素在图像中的运动&#xff0c;就像彗星☄划过天空中流动图像。同一个像素&#xff0c;随着时…

机器学习与深度学习——利用随机梯度下降算法SGD对波士顿房价数据进行线性回归

机器学习与深度学习——利用随机梯度下降算法SGD对波士顿房价数据进行线性回归 我们这次使用随机梯度下降&#xff08;SGD&#xff09;算法对波士顿房价数据进行线性回归的训练&#xff0c;给出每次迭代的权重、损失和梯度&#xff0c;并且绘制损失loss随着epoch变化的曲线图。…

集群 第四章

目录 1. nginx、lvs、haproxy 的区别 2. 实验 3. ssh 升级 4.总结 1. nginx、lvs、haproxy 的区别 2. 实验 Haproxy 服务器&#xff1a;192.168.83.101 Nginx 服务器1&#xff1a;192.168.83.102 Nginx 服务器2&#xff1a;192.168.83.103 …

Mysql之视图,索引及数据的备份与恢复

目录 一、视图 1.视图是什么 2.视图与数据表的区别 3.视图的优缺点 优点&#xff1a; 缺点&#xff1a; 4.视图的应用场景 5.语法运用 二、索引 1.什么是索引 2.为什么要使用索引 3.使用索引的优缺点 4.何时不使用索引 5.索引何时失效 6.索引分类 三、数据的备份…

头结点到底方便了啥?

头结点到底方便了啥&#xff1f; 链表增加头结点的作用如下&#xff1a; (1)便于首元结点的处理 (2)便于空表和非空表的统一处理 (参考&#xff1a;《数据结构 C语言(第2版)》P31) 其实这两句话很抽象&#xff0c;你说方便就方便&#xff0c;你倒是举个粟子或者画个图什么的啊&…

Linux开发工具之vim工具的使用介绍

目录 前言 1.vim的基本概念 命令模式(Normal mode) 插入模式(Insert mode) 末行模式(last line mode) 2.vim的基本操作 命令模式的命令集 移动光标 ​编辑 删除文字 复制 替换 撤销操作 更改 vim末行模式命令集 简单vim配置 总结 前言 大家好呀&#xff0c;许久…

Java动态规划LeetCode1137. 第 N 个泰波那契数

方法1&#xff1a;通过动态规划解题&#xff0c;这道题也是动态规划的一道很好的入门题&#xff0c;因为比较简单和容易理解。 代码如下&#xff1a; public int tribonacci(int n) {//处理特殊情况if(n0){return 0;}if(n1||n2){return 1;}//定义数组int[]dpnew int[n1];//初…

浏览器通过js打开文件,新建文件,静默实时保存文件

资源&#xff0c;点击下载 在线访问Txt Markdown &#x1f61d;&#x1f61d;&#x1f61d;&#x1f61d;&#x1f61d;&#x1f61d; 新建文件后&#xff0c;可以直接保存文件&#xff0c;不需要再次下载文件&#xff0c;也只有第一次保存时候才会出现确认弹窗 html <!D…

尚硅谷React学习笔记(上)

目录 一、React入门 1.1、React简介 为什么要学&#xff1f; React的特点 1.2、React的基本使用 Hello React案例 创建虚拟DOM的两种方式 虚拟DOM与真实DOM 1.3、React JSX 语法规则 JSX小练习 1.4、模块与组件化的理解 模块 组件 模块化 组件化 二、React面向…

E. Scuza - 二分+前缀和

分析&#xff1a; 暴力会超时&#xff0c;可以用二分&#xff0c;构建两个数组&#xff0c;一个是a[i]&#xff0c;作为前缀和数组&#xff0c;一个是f[i]表示第i个台阶之前的最大高度的台阶&#xff0c;然后每次二分来查找k&#xff0c;因为尽可能地走的多&#xff0c;所以查找…

VTK STL 体积 表面积测量 最短路径 读取中文路径

目录 开发环境&#xff1a; vtkMassProperties 三、中文路径 数据读取 开发环境&#xff1a; 系统&#xff1a;Win10 VTK&#xff1a;8.2.0 Qt&#xff1a;5.12.4 一、结构化对象 体积 面积 vtkMassProperties VTK 计算体积和面积的主要类 vtkMassProperties vtkSm…

C语言进阶之指针的进阶

指针的进阶 1. 字符指针2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名3.3 数组指针的使用 4. 数组参数、指针参数4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 5. 函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函数9. 指…