# wangzhe-crawler
> wangzhe rongyao story
## 项目构建
``` bash
# install dependencies
$ npm install # Or yarn install*[see note below]
# serve with hot reload at localhost:3000
$ npm run dev
# build for production and launch server
$ npm run build
$ npm start
# generate static project
$ npm run generate
```
### 前言
一直想学习开发一款小程序,无奈拖延至今,恰逢王者荣耀周年庆,然后本人对王者英雄的人物、配音比较感兴趣,就有开发一款王者荣耀故事站的小程序的念头。想要了解故事背景就直接打开小程序就好了。
ps: 因为是业余时间做的,所以 pc 端的爬虫数据展示方面就有点粗糙。
### 技术栈
> 小程序 + nuxt + koa2 + vue2.0 + vuex + nginx + pm2
### 小程序效果图
![WechatIMG2252.jpeg][1]
#### 线上体验
![WechatIMG2252.jpeg][2]
### pc 爬虫效果图
![44][3]
![44][4]
![44][5]
![44][6]
#### 线上地址
[https://story.naice.me/][7]
### 首先说下爬虫数据
数据爬虫都是从王者荣耀故事站官网来爬取的,然后直接用 next/koa 作为后台,用`cheerio`模块和`request-promise`模块基本就可以爬到我们想要的数据了,有时候爬取出来的数据回事乱码(非 utf-8的)我们就借助`iconv`模块去转成我们想要的中文字符。这些模块说明文档在相应的 gihub中都说的很详细。就不一一介绍。
下面举例一下爬虫英雄列表首页的过程,都注释在代码里面
```
// 引入相应的模块
import rp from 'request-promise'
import cheerio from 'cheerio'
import { writeFileSync } from 'fs'
const Iconv = require('iconv').Iconv
const iconv = new Iconv('GBK', 'UTF-8')
// request 国外网站的时候使用本地的 VPN
// import Agent from 'socks5-http-client/lib/Agent'
// 爬取英雄列表
const getHeroStory = async() => {
// request-promise的配置
const options = {
uri: 'https://pvp.qq.com/act/a20160510story/herostory.htm',
// agentClass: Agent,
// agentOptions: {
// socksHost: 'localhost',
// socksPort: 1080 // 本地 VPN 的端口,这里用的 shadowsocks
// },
transform: body => cheerio.load(body) // 转成相应的爬虫
}
// 爬取导航复制给cheerio的$对象
const $ = await rp(options)
let navArr = []
let heroList = []
$('#campNav li').each(function () {
// 分析节点拿到数据
const type = $(this).attr('data-camptype')
const text = $(this).find('a').text()
// push 到navArr数组中
navArr.push({ type, text })
})
// 爬取英雄列表
const hreodata = await rp({
uri: 'https://pvp.qq.com/webplat/info/news_version3/15592/18024/23901/24397/24398/m17330/list_1.shtml'
})
// 数据处理
let str = hreodata.replace('createHeroList(', '')
str = str.substr(0, str.length - 1)
let r = JSON.parse(str)
heroList = r.data.filter(item => item)
let result = {
nav: navArr,
heroList
}
// 写入文件
writeFileSync('./server/crawerdb/heroList.json', JSON.stringify(result, null, 2), 'utf-8')
return result
}
// 跟去英雄 id,和 url 爬取英雄的详细介绍
const getHeroDatail = async(url, _id) => {
// 配置
const option = {
encoding: null,
url
}
// 爬取英雄详情
const $ = await rp(option).then(body => {
// 字符乱码处理
var result = iconv.convert(new Buffer(body, 'binary')).toString()
return cheerio.load(result)
})
// 这里拿到$之后就像 jq那样子,根据文档就可以进行爬虫的数据处理了
// 下面都是数据处理
let heroName = ''
let heroDetail = []
let ht = ''
let hc = ''
if ($('#heroStory').length) {
heroName = $('.hero_name pf').text()
$('#heroStory p').each(function () {
let text = $(this).text().trim()
heroDetail.push({
type: 'text',
text: text
})
})
} else if ($('.textboxs').length) {
$('.textboxs p').each(function () {
if ($(this).find('img').length) {
let src = $(this).find('img').attr('src')
heroDetail.push({
type: 'img',
text: 'https:' + src
})
} else {
let text = $(this).text().trim()
heroDetail.push({
type: 'text',
text: text
})
}
})
}
let hStr = ($('#history_content').text()).replace(/(^\s+)|(\s+$)/g, '');
if (hStr.length > 0) {
ht = $('.history_story h3').text()
hc = $('#history_content').text()
}
let result = {
heroName,
heroDetail,
historyTitle: ht,
historyContent: hc
}
// 写入文件
writeFileSync('./server/crawerdb/herodetail' + _id + '.json', JSON.stringify(result, null, 2), 'utf-8')
return result
}
export default {
getHeroStory,
getHeroDatail
}
```
然后在 koa里面配置好路由就可以一步步爬取数据了
### nuxt
>Nuxt.js 是一个基于 Vue.js 的通用应用框架。通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI渲染。我们的目标是创建一个灵活的应用框架,你可以基于它初始化新项目的基础结构代码,或者在已有 Node.js 项目中使用 Nuxt.js。Nuxt.js 预设了利用Vue.js开发服务端渲染的应用所需要的各种配置。
根据文档 page 下面的结构就是对应的 vue 的路由结构,然后配置好`nuxt.config.js`你所需要模块、插件、webpack 配置等等都有很好的[中文文档][8]说明。会 vue的同学,去看一下官网就可以大概有个很好的了解了。
下面是整个项目的目录结构
````
.nuxt/
build/ ---打包发布
components/ ---组件
layout/ ---布局
pages/ ---对应的路由
--| about.vue/
--| music.vue/
--| word.vue/
--| skin/
--| index.vue
--| ....
server/ --对应的koa 后台
static/ ---静态资源
store/ --vuex
````
### 小程序
这是我第一个小程序。所以一开始看文档,写起数据绑定的时候,会有种跟 vue 的异曲同工的感觉.
下面是官荒的小例子
demo.wxml
```
<view> Hello {{name}}! </view>
<view wx:for="{{array}}">
{{index}}: {{item.message}}
</view>
```
demo.js
```
Page({
data: {
name: '小程序',
array: [{
message: 'foo',
}, {
message: 'bar'
}]
}
})
```
是不是太熟悉了????当然里面实现的技术还是想差别很大的,想去详细的了解,我觉得《[一起脱去小程序的外套 - 微信小程序架构解析][9]》这篇文章,很是不错,我初学的时候,是先体验一番[小程序的demo][10],然后直接动手(光看不动瞎扯淡),再去深入了解原理、pages 的生命周期,逻辑处理、框架、组件、api 等等,理解了这些之后,后面就很容易啦!!
附一张小程序的运行生命周期图(来源于遇见大神的文章)
![44][11]
### github
小程序:[https://github.com/naihe138/heroStory][12]
小程序后台爬虫: [https://github.com/naihe138/hero-story-crawer][13]
如果大家觉得有用的话,求一个闪晶晶的 start 谢谢各位大佬
[1]: https://user-gold-cdn.xitu.io/2017/10/27/ae84c74eeba752a3337d9e3b685d6a56
[2]: https://user-gold-cdn.xitu.io/2017/10/27/64a10e01a2e69da5686ca06ad7437c0c
[3]: https://user-gold-cdn.xitu.io/2017/10/27/d2d9c1e0e2a432dfcacfad4643067123
[4]: https://user-gold-cdn.xitu.io/2017/10/27/f1a7815f16c7faaf18eea8a4bae41e25
[5]: https://user-gold-cdn.xitu.io/2017/10/27/1ae9f01dde00b271ba5245d965d257d8
[6]: https://user-gold-cdn.xitu.io/2017/10/27/7e6ab1cd8a66fc5e495e32820c4ed0e6
[7]: https://story.naice.me/
[8]: https://zh.nuxtjs.org/guide/configuration
[9]: https://zhuanlan.zhihu.com/p/25105936?utm_medium=social&utm_source=weibo
[10]: https://mp.weixin.qq.com/debug/wxadoc/dev/demo.html
[11]: https://user-gold-cdn.xitu.io/2017/10/27/3ca5cfd6120bbdce619bd9da1219f4e1
[12]: https://github.com/naihe138/heroStory
[13]: https://github.com/naihe138/hero-story-crawer
王者荣耀故事站小程序-含vue后台源码.zip
需积分: 0 45 浏览量
更新于2025-02-26
收藏 251KB ZIP 举报
王者荣耀,作为一款在中国乃至亚洲范围内拥有庞大玩家群体的多人在线战斗竞技场游戏,自推出以来一直广受关注。其背后的故事情节也颇具吸引力,为玩家提供了丰富的背景世界和角色设定。而随着技术的发展和市场需求的变化,将游戏故事以更便捷的方式呈现给用户变得尤为重要。因此,开发一款以“王者荣耀故事站”为主题的小程序,成为了游戏文化衍生品开发的热点项目。
本次分享的“王者荣耀故事站小程序-含vue后台源码.zip”,是一个包含前端展示和后端处理的完整源代码压缩包。前端部分采用了Vue.js框架,Vue.js作为一个渐进式JavaScript框架,它易于上手,拥有强大的灵活性和组件化开发能力,非常适合用来构建交互式的用户界面。它能够高效地组织和管理复杂的单页应用,使其在不同设备上拥有更好的性能表现和用户体验。
后端源码则为小程序提供了数据处理和存储的支持。虽然具体的后端技术栈未在描述中提及,但考虑到与Vue.js前端框架的兼容性,通常后端可能会使用Node.js运行环境,配合Express.js框架来实现API接口。Node.js的非阻塞I/O模型和事件驱动的特性,使其在处理大量并发连接时表现出色,特别适合需要处理大量数据交互的网络应用,如小程序。
压缩包内的文件名称“王者荣耀故事站小程序_含vue后台源码”直接揭示了该软件包的主要内容。用户可以下载该软件包,进而获取完整的项目结构,包括前端的Vue组件文件、样式文件、JavaScript脚本,以及后端的服务器代码、数据库配置和接口API等。此外,压缩包可能还包含了项目所需的依赖文件、构建工具配置文件(如Webpack或Vue CLI的配置文件),以及相关的开发文档和使用说明。
然而,根据文件的描述信息,该源码包是未经测试的版本,由淘宝购得,分享者没有提供测试环境,因此使用该源码包可能存在一定风险。用户在实际开发或部署时需要谨慎,可能需要进一步的测试和调试,以确保程序运行的稳定性和安全性。此外,由于是第三方获取的源码,用户还需要注意版权问题,确保在使用过程中不侵犯原作者的知识产权,尤其是对于像王者荣耀这样的知名游戏产品,更应关注相关法律法规。
“王者荣耀故事站小程序-含vue后台源码.zip”为开发者提供了一个不错的起点,可以在此基础上开发和完善自己的小程序,为王者荣耀的爱好者提供更为丰富的游戏故事体验。但同时,用户需要注意源码的测试、版权以及安全问题,确保项目的顺利进行和合法合规。

宇哥资料
- 粉丝: 2012
最新资源
- 猴车论文(PLC自动控制).doc
- (源码)基于Arduino的监控系统.zip
- radar-移动应用开发资源
- 关于改善地方政府网络安全管理技术的几点方法.docx
- spp-bluetooth-tool-单片机开发资源
- 《C++-Primer》第部分学习笔记汇总-面向对象编程与泛型编程.docx
- 安卓模拟器安装步骤.doc
- 软件可行性分析研究报告.docx
- 基于TPC-USB实验系统的串行通信协议研究.doc
- 第二章PLC工作原理和结构特点.ppt
- soybean-admin-Typescript资源
- (源码)基于C++和FreeRTOS的嵌入式音频合成器.zip
- GinSkeleton-Go资源
- 互联网+在中职学前教育专业教与学的探索.docx
- 电子商务网站建设的相关策划报告.doc
- 计算机信息技术在机关档案管理中的应用.docx