【3.0版本】用ChatGPT开发一个书籍推荐微信小程序(三)

news2024/11/27 11:26:32

文章目录

    • 1 前言
      • 1.1 实现原理
      • 1.2 在小程序如何衔接
      • 1.3 技术架构
    • 2 爬取数据
      • 2.1 根据书名爬取信息
      • 2.2 根据作者爬取信息
      • 2.3 根据类型爬取信息
    • 3 讨论

1 前言

1.1 实现原理

万变不离其宗,还是相当于与ChatGPT交互问答,然后映射到小程序中,以下是三大要素:

  • 数据库建模

首先,需要建立一个数据库来存储图书信息和用户信息。每本书的信息可能包括书名、作者、出版社、ISBN号、出版日期、价格等。用户信息可能包括用户名、密码、邮箱、收货地址等。

  • 数据采集和处理

为了让推荐系统更准确,我们需要收集用户的阅读历史、购买记录甚至是搜索记录等。同时也需要对新的书籍进行分类标签的归纳和整理。然后根据用户的历史行为和兴趣爱好,使用推荐算法来生成个性化的书籍推荐列表。常见的推荐算法包括基于内容的推荐、协同过滤推荐、深度学习推荐等。

  • 界面优化

将书籍推荐列表呈现给用户,用户可以通过界面进行书籍的查看、购买等操作。后台根据用户的操作,更新相关数据并优化推荐算法,提高推荐质量和准确度。

1.2 在小程序如何衔接

  1. 确定需求:明确项目目标,包括要推荐的书籍类型、用户画像以及推荐算法等。

  2. UI设计:根据项目需求和用户习惯,设计小程序的界面布局、配色方案、交互方式等。

  3. 数据库建模:根据需求设计好数据库,并在后台进行开发。需要将图书信息、用户信息、历史数据等存入数据库,在后续计算过程中进行查询和分析。

  4. 用户授权:在小程序启动时,获取用户信息和授权信息,以保证后续的个性化推荐。

  5. 推荐算法:根据用户画像和历史行为,使用不同的推荐算法生成推荐结果。

  6. 页面布局与渲染:根据UI设计的风格和要求,在前端实现页面布局和渲染,并将后端返回的数据展示出来。

  7. 优化改进:根据用户反馈,不断优化算法和交互体验,提高推荐准确性和用户满意度。

  8. 发布上线:进行测试、联调等环节,确保小程序的稳定性和安全性,然后发布上线并进行运营推广。

1.3 技术架构

以下是需要用到的技术栈,包括其语言和框架,以及一些重点:

技术栈语言/框架技术要点
小程序开发框架微信官方提供的小程序框架快速搭建前端界面,实现小程序的交互和显示效果
前端语言WXML、WXSS、JavaScript,VUE 2.0+Uni-app实现小程序前端交互逻辑和样式设计
后端开发Node.js、Express.js,Python + Flask WEB提供API接口,处理前端发送过来的请求,并与数据库进行交互
数据库MySQL、MongoDB存储书籍信息、用户信息和推荐数据等
用户认证与授权微信开放接口实现用户登录、授权和个人信息获取等功能
推荐算法基于内容的推荐、协同过滤、深度学习推荐等,Python + Request通过算法计算出用户喜欢的书籍,根据爬虫爬取为用户推荐合适的书籍
第三方API集成豆瓣读书API、图书馆API等获取其他网站或服务提供的书籍数据

2 爬取数据

2.1 根据书名爬取信息

使用requests库向豆瓣网发送HTTP GET请求,获取包含搜索结果的页面,然后使用BeautifulSoup库解析HTML页面,提取书籍信息。具体实现过程如下:

  1. 构造搜索链接:将输入的书名作为参数,构造搜索链接。链接中的cat参数指定搜索结果为图书类型,1001表示文学类图书。使用requests库向链接发送HTTP GET请求,获取包含搜索结果的页面。

  2. 解析搜索结果页面:使用BeautifulSoup库解析搜索结果页面,提取第一个搜索结果的链接。将链接发送HTTP GET请求,获取包含书籍详情的页面。

  3. 解析书籍详情页面:使用BeautifulSoup库解析书籍详情页面,提取书籍名称、作者、类型、出版社和出版时间等信息。

  4. 返回书籍信息:将提取到的信息保存到字典中,作为函数的返回值。

import requests
from bs4 import BeautifulSoup

def get_book_info(book_name):
    # 构造亚马逊搜索页面的URL
    url = f"https://www.amazon.com/s?k={book_name}"

    # 发送HTTP请求获取搜索页面内容
    response = requests.get(url)

    # 使用BeautifulSoup解析页面内容
    soup = BeautifulSoup(response.content, 'html.parser')

    # 从页面中获取第一个搜索结果的链接
    result_link = soup.find('a', {'class': 'a-link-normal s-no-outline'})

    # 发送HTTP请求获取搜索结果页面内容
    response = requests.get(result_link['href'])

    # 使用BeautifulSoup解析页面内容
    soup = BeautifulSoup(response.content, 'html.parser')

    # 解析页面中的书籍信息
    book_title = soup.find('span', {'id': 'productTitle'}).text.strip()
    book_author = soup.find('span', {'class': 'author'}).find('a').text.strip()
    book_genre = soup.find('a', {'class': 'a-link-normal a-color-tertiary'}).text.strip()
    book_publisher = soup.find('span', {'class': 'publisher'}).find('a').text.strip()
    book_publication_date = soup.find('span', {'class': 'a-text-normal'}).text.strip()

    # 返回书籍信息
    return {
        'title': book_title,
        'author': book_author,
        'genre': book_genre,
        'publisher': book_publisher,
        'publication_date': book_publication_date
    }

试着运行一下

book_name = "Python编程:从入门到实践"
book_info = get_book_info(book_name)

print("书名:", book_info['title'])
print("作者:", book_info['author'])
print("类型:", book_info['genre'])
print("出版社:", book_info['publisher'])
print("出版时间:", book_info['publication_date'])

2.2 根据作者爬取信息

import requests
from bs4 import BeautifulSoup

def get_author_books_info(author):
    # 构造亚马逊图书搜索链接
    url = f"https://www.amazon.cn/s?k={author}&i=stripbooks"
    
    # 发送GET请求获取网页内容
    response = requests.get(url)
    response.encoding = "utf-8"
    
    # 使用BeautifulSoup解析网页内容
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 获取作者的个人信息
    author_info = soup.find("div", {"class": "a-section a-text-left s-align-children-center"})
    
    # 获取搜索结果中的所有书籍信息
    book_items = soup.find_all("div", {"class": "s-result-item s-asin sg-col-0-of-12 sg-col-16-of-20 sg-col sg-col-12-of-16"})
    
    # 遍历每个书籍信息,解析出经典小说列表
    classic_books = []
    for item in book_items:
        book_title = item.find("span", {"class": "a-size-medium a-color-base a-text-normal"})
        if book_title:
            book_title = book_title.text.strip()
            if "经典" in book_title:
                classic_books.append(book_title)
    
    # 将结果以字典形式返回
    result = {"author_info": author_info.text.strip(), "classic_books": classic_books}
    return result

运行一下:

author = "村上春树"
result = get_author_books_info(author)
print("作者信息:", result["author_info"])
print("经典小说列表:", result["classic_books"])

2.3 根据类型爬取信息

import requests
from bs4 import BeautifulSoup

def get_book_info(book_type):
    """
    获取亚马逊中指定作品类型的经典小说和相关作者信息

    :param book_type: str, 作品类型
    :return: tuple, 经典小说和相关作者列表
    """
    # 构造查询链接
    url = f"https://www.amazon.cn/s?k={book_type}&i=stripbooks&rh=n%3A658390051&page=1&qid=1620160259&ref=sr_pg_1"

    # 发送GET请求获取网页内容
    response = requests.get(url)
    html = response.content

    # 解析网页内容,获取经典小说和相关作者信息
    soup = BeautifulSoup(html, 'html.parser')
    books = soup.select(".s-result-item")
    classic_books = []
    related_authors = []
    for book in books:
        book_title = book.select(".a-link-normal")[0].get_text().strip()
        book_author = book.select(".a-size-base.a-link-normal")[0].get_text().strip()
        if "经典" in book.select(".a-size-base.a-color-secondary")[0].get_text():
            classic_books.append(book_title)
        related_authors.append(book_author)

    # 返回经典小说和相关作者信息
    return (classic_books, related_authors)

运行一下:

# 获取科幻小说类别的经典小说和相关作者信息
book_type = "科幻"
classic_books, related_authors = get_book_info(book_type)

# 输出结果
print("经典小说:")
for book in classic_books:
    print(book)
print("\n相关作者:")
for author in related_authors:
    print(author)

3 讨论

这部分主要的点就是写爬虫根据特定内容爬取信息并进行返回,根据自己的网络条件可以换成豆瓣等网站。

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

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

相关文章

Linux -- 进程信号

文章目录 1. 信号量1.1 进程互斥概念1.2 认识信号量 2. 信号入门2.1 信号概念2.2 见一见2.3 signal()系统调用2.4 宏定义信号 3. 信号产生方式3.1 键盘产生信号3.2 系统调用产生信号3.3 软件条件产生信号3.4 硬件异常产生信号3.5 Core dump 4. 阻塞信号4.1 相关概念4.2 信号在内…

Raspberry Pi OS 2023-05-03 版本发布

导读树莓派 Raspberry Pi Foundation 今天发布了用于 Raspberry Pi 计算机的官方 Raspberry Pi OS 发行版新版本,带来了更新的组件、错误 Bug 修复和各种性能改进。 Raspberry Pi OS 2023-05-03 版本最大变化是内核从长期支持的 Linux 5.15 LTS 到长期支持的 Linux …

【为什么可以相信一个HTTPS网站】

解决信用,仅仅有加密和解密是不够的。加密解密解决的只是传输链路的安全问题,相当于两个人说话不被窃听。可以类比成你现在生活 的世界——货币的信用,是由政府在背后支撑的;购房贷款的信用,是由银行在背后支撑的&…

### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义

### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义 报错信息: ### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义 ; 列[URI]长度超出定义; nested exception is dm.jdbc.driver.DMException: 列[URI]长度超出定义at org.springframework.jdb…

计算机毕业论文内容参考|基于Python的互联网金融产品交易平台的设计与实现

文章目录 导文摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍技术分析需求分析技术分析技术设计系统架构技术实现产品管理模块订单管理模块支付管理模块总结与展望导文 基于Python的互联网金融产品交易平台的设计与实现 摘要 本文提出并实现了一种基于Pytho…

《计算机网络—自顶向下方法》 Wireshark实验(六):IP 协议分析

IP 协议(Internet Protocol),又译为网际协议或互联网协议,是用在 TCP/IP 协议簇中的网络层协议。主要功能是无连接数据报传送、数据报路由选择和差错控制。IP 协议是 TCP/IP 协议族的核心协议,其主要包含两个方面&…

Vue入门学习笔记:TodoList(三):实例中的数据、事件和方法

目录: Vue入门学习笔记:TodoList(一):HelloWorld Vue入门学习笔记:TodoList(二):挂载点、模板、实例 Vue入门学习笔记:TodoList(三)&a…

有关浪涌保护器的基础知识

浪涌和瞬态电压浪涌是电路上电压和电流的临时上升。它们的电压范围大于 2000 伏,电流范围大于 100 安培。典型的上升时间在1到10微秒范围内。瞬态或浪涌是最常见的电源问题,其瞬时破坏性会造成重大损坏,例如电气或电子设备故障、频繁停机、数…

MySQL正则表达式与存储过程

一、正则表达式(REGEXP) 1、正则表达式匹配符 字符解释举列^匹配文本的开始字符’ ^aa ’ 匹配以 aa 开头的字符串$匹配文本的结束字符’ aa$ ’ 匹配以aa结尾的字符串.匹配任何单个字符’ a.b 匹配任何a和b之间有一个字符的字符串*匹配零个或多个在它…

Webpack4 核心概念

文章目录 Webpack4 核心概念概述安装webpack简单使用配置webpack.config.js配置package.json打包 核心概念modeentry 和 outputentry配置说明output配置说明配置单入口配置多入口 loader安装babel、babel-loader、core-js配置.babelrc配置webpack.config.js配置package.json编写…

107.(cesium篇)cesium椎体上下跳动

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <

等保2.0常见问题汇总

等保2.0发布后&#xff0c;整个网络安全行业积极学习并按照新规范进行网络系统的部署。然而许多人仍然对等保制度的来历、发展、演变以及贯彻重点存在疑问。等保2.0依然在整个实施流程上由五个标准环节构成&#xff1a;定级、备案、建设整改、等级测评、监督检查五个方面。本文…

Science文章复现(Python):图1 - Aircraft obs(机载的观测 CO2)

之前有写过science文章后处理的复现Science文章复现&#xff08;Python&#xff09;&#xff1a;在机载观测中明显的强烈南大洋碳吸收 在这里是针对图细节的理解&#xff1a; 首先需要下载这个项目 https://github.com/NCAR/so-co2-airborne-obs 这里的环境配置会比较麻烦 con…

Java设计模式 13-命令模式

命令模式 一、智能生活项目需求 看一个具体的需求 1)我们买了一套智能家电&#xff0c;有照明灯、风扇、冰箱、洗衣机&#xff0c;我们只要在手机上安装 app 就可以控制对这些家电工作。 2)这些智能家电来自不同的厂家&#xff0c;我们不想针对每一种家电都安装一个 App&…

怎样实现RPC框架

随着微服务架构的盛行&#xff0c;远程调用成了开发微服务必不可少的能力&#xff0c;RPC 框架作为微服务体系的底层支撑&#xff0c;也成了日常开发的必备工具。当下&#xff0c;RPC 框架已经不仅是进行远程调用的基础工具&#xff0c;还需要提供路由、服务发现、负载均衡、容…

两种QGraphicsItem方式实现橡皮擦功能(矩形选中框)

方法一&#xff1a;继承QGraphicsItem实现橡皮擦功能。&#xff08;gif中红色矩形框&#xff09; 方法二&#xff1a;继承QGraphicsRectItem实现的橡皮擦功能。&#xff08;gif中蓝色矩形框&#xff09; 通过以上GIF可以看出两款橡皮擦都具有位置拖动和大小拖动的功能&#xff…

Nacos必知必会:这些知识点你一定要掌握!

前言 Nacos 是一个开源的服务发现、配置管理和服务治理平台&#xff0c;是阿里巴巴开源的一款产品。 Nacos 可以帮助开发者更好地管理微服务架构中的服务注册、配置和发现等问题&#xff0c;提高系统的可靠性和可维护性。 本文将介绍 Nacos 的必知必会知识点&#xff0c;包括…

Zookeeper基础和简单使用

安装与配置 概念 基于观察者模式设计的分布式服务管理框架&#xff0c;负责存储和管理大家都关心数据&#xff0c;然后接受观察者的注册&#xff0c;一单这些数据的这状态发生了变化&#xff0c;Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应 特点…

当JS遇到加密:解密你的JS代码!

作为一名程序员&#xff0c;我们经常会遇到各种加密算法&#xff0c;比如常见的AES、RSA、MD5等等&#xff0c;但是今天我想和大家聊一聊一个日常生活中比较常见的加密方式——JavaScript加密。 在我们日常浏览网页时&#xff0c;经常会看到一些网站的JavaScript代码经过加密&…

【Redis】布隆过滤器原理与应用

文章目录 原理应用实战总结 布隆过滤器&#xff08;Bloom Filter&#xff09;是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都比一般的算法要好的多&#xff…