文章目录
- 1 前言
- 1.1 实现原理
- 1.2 在小程序如何衔接
- 1.3 技术架构
- 2 爬取数据
- 2.1 根据书名爬取信息
- 2.2 根据作者爬取信息
- 2.3 根据类型爬取信息
- 3 讨论
1 前言
1.1 实现原理
万变不离其宗,还是相当于与ChatGPT交互问答,然后映射到小程序中,以下是三大要素:
- 数据库建模
首先,需要建立一个数据库来存储图书信息和用户信息。每本书的信息可能包括书名、作者、出版社、ISBN号、出版日期、价格等。用户信息可能包括用户名、密码、邮箱、收货地址等。
- 数据采集和处理
为了让推荐系统更准确,我们需要收集用户的阅读历史、购买记录甚至是搜索记录等。同时也需要对新的书籍进行分类标签的归纳和整理。然后根据用户的历史行为和兴趣爱好,使用推荐算法来生成个性化的书籍推荐列表。常见的推荐算法包括基于内容的推荐、协同过滤推荐、深度学习推荐等。
- 界面优化
将书籍推荐列表呈现给用户,用户可以通过界面进行书籍的查看、购买等操作。后台根据用户的操作,更新相关数据并优化推荐算法,提高推荐质量和准确度。
1.2 在小程序如何衔接
-
确定需求:明确项目目标,包括要推荐的书籍类型、用户画像以及推荐算法等。
-
UI设计:根据项目需求和用户习惯,设计小程序的界面布局、配色方案、交互方式等。
-
数据库建模:根据需求设计好数据库,并在后台进行开发。需要将图书信息、用户信息、历史数据等存入数据库,在后续计算过程中进行查询和分析。
-
用户授权:在小程序启动时,获取用户信息和授权信息,以保证后续的个性化推荐。
-
推荐算法:根据用户画像和历史行为,使用不同的推荐算法生成推荐结果。
-
页面布局与渲染:根据UI设计的风格和要求,在前端实现页面布局和渲染,并将后端返回的数据展示出来。
-
优化改进:根据用户反馈,不断优化算法和交互体验,提高推荐准确性和用户满意度。
-
发布上线:进行测试、联调等环节,确保小程序的稳定性和安全性,然后发布上线并进行运营推广。
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
页面,提取书籍信息。具体实现过程如下:
-
构造搜索链接:将输入的书名作为参数,构造搜索链接。链接中的cat参数指定搜索结果为图书类型,1001表示文学类图书。使用requests库向链接发送HTTP GET请求,获取包含搜索结果的页面。
-
解析搜索结果页面:使用BeautifulSoup库解析搜索结果页面,提取第一个搜索结果的链接。将链接发送HTTP GET请求,获取包含书籍详情的页面。
-
解析书籍详情页面:使用BeautifulSoup库解析书籍详情页面,提取书籍名称、作者、类型、出版社和出版时间等信息。
-
返回书籍信息:将提取到的信息保存到字典中,作为函数的返回值。
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 讨论
这部分主要的点就是写爬虫根据特定内容爬取信息并进行返回,根据自己的网络条件可以换成豆瓣等网站。