基于ChatGPT等大模型快速爬虫提取网页内容

news/2024/7/19 8:41:33 标签: 人工智能, chatgpt, 爬虫, python

        本文将介绍一种基于ChatGPT等大模型快速爬虫提取网页内容的方法。传统的爬虫方法需要花费较大精力分析页面的html元素,而这种方法只需要两步就可以完成。下面将从使用步骤、方法扩展和示例程序三部分进行介绍。RdFast智能创作机器人小程序预计本周2023-11-30之前集成该功能,实现智能编辑功能。大家可以体验一下。

1 使用步骤

        第一步:提取网页中的全部文本内容

        为了获取网页中的全部文本内容,我们使用了requests、html2text和urllib.request这三个库。首先尝试使用requests库获取网页的文本内容,如果失败则使用urllib.request库。获取到文本内容后,我们再使用html2text库将其转换成纯文本格式。最后对文本进行简单处理,去除空格和换行符。

        第二步:使用ChatGPT等大模型进行文本提取

        我们使用了OpenAI的ChatGPT等大模型来进行文本提取。将提取出来的文本内容和自定义提取规则作为ChatGPT的prompt输入,然后获取提取结果。这种方法的好处是不需要像传统爬虫方法一样,花费较大精力分析页面的html元素。

        这种方法可以大大减少爬虫的时间和精力,提高了效率。对于需要频繁进行网页内容提取的场景,这种方法非常实用。

2 方法扩展

        这种基于ChatGPT等大模型的快速爬虫提取网页内容的方法可以进一步扩展,以支持处理更多的提取规则和丰富的内容类型。具体扩展包括但不限于以下几个方面:

        (1)提取标题和摘要:除了提取全部文本内容外,可以扩展ChatGPT模型,使其能够识别并提取网页的标题和摘要信息。通过对标题和摘要进行提取和分析,可以更直观地获取网页的核心信息,帮助用户快速了解页面内容。

        (2)处理HTML规则:在文本提取过程中,可以借助ChatGPT模型对HTML标签和元素进行识别和处理。例如,识别和提取特定HTML标签内的内容,或者处理包含特定类别或ID属性的HTML元素。这样可以更精确地提取出用户感兴趣的内容部分,而不是仅仅提取整个页面的文本。

        (3)自动正则表达式生成:可以考虑让ChatGPT模型学习如何生成适用于当前网页的正则表达式。通过对已提取文本内容的分析,模型可以学习生成适用于当前网页结构的正则表达式规则,从而实现自动化的正则表达式生成和应用。

        (4)多模态内容提取:除了文本内容外,现代网页通常还包含图片、视频等多媒体内容。可以扩展ChatGPT模型,使其能够处理多模态内容提取,例如识别网页中的主要图片或视频,并提取相关的描述性信息。

        (5)自定义提取规则学习:通过引入强化学习或迁移学习技术,可以让ChatGPT模型学习用户的自定义提取规则,并根据用户反馈不断优化提取效果。这样可以实现个性化的网页内容提取,满足用户特定需求。

        通过以上扩展,基于ChatGPT等大模型的快速爬虫提取网页内容的方法可以更加灵活和智能,能够处理更多类型的内容和提取规则,从而满足不同用户和应用场景的需求。

3 示例程序和效果

代码示例:

python"># 基于ChatGPT等大模型快速爬虫提取网页内容
# 主要分为两步:
# 第一步:提取网页中的全部文本内容
# 第二步:将提取结果与自定义提取规则作为ChatGPT的prompt,输入给ChatGPT,获取提取结果
# 这种方法的好处是不需要像传统爬虫方法一样,花费较大精力分析页面的html元素。


import openai
import requests
import html2text
import urllib.request

# ChatGPT等大模型结果反馈结果,可以自行补充
def gpt_reply(prompt):
  return response

# 根据链接网址获取网页文本内容
def get_linktext(url):
    flag = False
    html_content = ''
    try:
        response = requests.get(url)
        html_content = response.text
    except:pass
    if len(html_content) < 1:
        try:
            response = urllib.request.urlopen(url)
            html_content = response.read().decode('utf-8')
        except:pass
    try:
        if len(html_content) > 0:
            html_content = html2text.html2text(html_content)
    except:pass
    html_content = html_content.strip()
    if len(html_content) > 0:
        flag = True
    return flag, html_content

if __name__ == '__main__':
    url = 'https://mp.weixin.qq.com/s/5OUbElScuVQfvj_9Y4JfyA'
    flag, text = get_linktext(url)
    prompt = text + '\n\n' + '请提取文章标题。'
    response = gpt_reply(prompt)
    print('处理结果如下:')
    print(response)

        以上介绍的基于ChatGPT等大模型的快速爬虫提取网页内容的方法展现了一种新颖且高效的方式,可以大大减少传统爬虫方法中对html元素分析的繁琐工作,提高爬虫效率和灵活性。该方法还具有很强的扩展性,可以通过引入更多的提取规则和处理多媒体内容来满足不同的用户需求。

        希望本文能够为读者带来启发,并对未来的研究和实践有所帮助。


http://www.niftyadmin.cn/n/5222584.html

相关文章

前端web开发学习笔记

JavaWeb 前端Web开发HTMLCSSjavaScript1.JS引入2.JS基础语法3.JS函数4.JS对象 BOMDOM文档对象模型JS事件监听VueVue常用指令Vue的生命周期 AjaxAxios 前端工程化环境准备NodeJS安装和Vue-cli安装vue项目Vue组件库Element组件的使用 Vue路由Nginx打包部署 前端Web开发 HTML 负…

【Docker项目实战】使用Docker部署Plik临时文件上传系统

【Docker实战项目】使用Docker部署Plik 临时文件上传系统 一、Plik介绍1.1 Plik简介1.2 Plik特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Plik镜像五、部署Plik临时…

力扣23. 合并 K 个升序链表(java,最小堆解法)

Problem: 23. 合并 K 个升序链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 思路 1.对于合并k个有序链表&#xff0c;我们较为容易想…

八、Lua数组和迭代器

一、Lua数组 数组&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;可以是一维数组和多维数组。 在 Lua 中&#xff0c;数组不是一种特定的数据类型&#xff0c;而是一种用来存储一组值的数据结构。 实际上&#xff0c;Lua 中并没有专门的数组类型&#xf…

多个微号聚合管理,朋友圈批量定时,自动跟圈

多个微号聚合管理&#xff0c;朋友圈批量&#xff0c;定时&#xff0c;自动跟圈。能自动的为什么还要要手动&#xff0c;解放满桌子的手机&#xff0c;不会再手忙脚乱

Dubbo+SpringBoot单元测试mock静态方法

引入的maven依赖 <dependency><groupId>org.powermock</groupId><artifactId>powermock-api-mockito2</artifactId><version>2.0.9</version><scope>test</scope></dependency><dependency><groupId>…

java stream流map和flatmap的区别

map和flatmap都是用来转换操作。 map()操作后的流与原始流的元素个数一一对应&#xff0c;一对一地进行元素转换&#xff0c;适用于对每个元素进行简单的转换操作&#xff0c;例如将元素的属性提取出来或进行数值计算。 flatMap()操作是一对多的元素转换&#xff0c;对于每个输…

【CAN通信】CanTrcv和EcuM的关系及不同类型的Can收发器主要使用场景

目录 前言 正文 1.CanTrcv_SetOpMode被哪个模块调用,在什么场景下调用? 1.1 CanSM模块切换CanTrcv模块状态