Skip to content
get and save your data marked in Douban / (又一个)豆瓣标记数据获取及备份插件
JavaScript Python
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode 封装为插件 Feb 7, 2020
douban-data-backup/hqweay update: setInterval 调用方式 Feb 10, 2020
other add: Python 脚本——备份豆瓣标记为读过的书籍 Feb 6, 2020
src
.gitignore update: 将获取页面、解析页面与项目解偶 Feb 6, 2020
README.md update: README.md Feb 9, 2020
examples.js
index.js update: creater 可选参数以枚举保存 Feb 9, 2020
package.json update: 1.0.0 -> 2.0.0 Feb 9, 2020
yarn.lock update: 将获取页面、解析页面与项目解偶 Feb 6, 2020

README.md

简要说明

提供一个工厂方法,创建用户在豆瓣标记为电影、书籍、音乐、游戏对应的看过、在看、想看等条目的 Getter 方法。

提供一个 Save 方法,将 Getter 获取的数据保存至本地。

我的目标是备份豆瓣用户在豆瓣上的标记数据,而不是爬取豆瓣数据。所以获取信息的页面,我选取的是 豆瓣标记信息列表 的页面 而不是条目详情页面

如该页面:下一餐有折耳根想看的电影

使用

  1. 引入包

    yarn add https://github.com/hqweay/markall-douban-backup.git
  2. 使用样例

    let { createDoubanDataGetter, saveDoubanData, DoubanTypeEnum } = require('markall-douban-backup');
    
    // 存储路径
    const STORE_PATH = "douban-data-backup";
    // 豆瓣帐号
    const userName = "hqweay";
    
    let getDoubanWatchedMovies = createDoubanDataGetter(DoubanTypeEnum.watchedMovies);
    
    // 获取用户在豆瓣标记为想看的电影条目
    getDoubanWatchedMovies(userName, pageStart = 1, pageEnd = 2, sleepTimer = 1500).then(function (data) {
      // 数据、路径、文件名
      saveDoubanData(data, STORE_PATH + "/hqweay/movie/", "watchedMovies");
    })

方法说明

createDoubanDataGetter

提供一个工厂方法,创建用户在豆瓣标记为电影、书籍、音乐、游戏对应的看过、在看、想看等条目的 Getter 方法。

可选参数

// let getDoubanWatchedMovies = createDoubanDataGetter(DoubanTypeEnum.watchedMovies);
const DoubanTypeEnum = {
  "watchedMovies": "watchedMovies",
  "wishMovies": "wishMovies",
  "watchingMovies": "watchingMovies",
  "readBooks": "readBooks",
  "wishBooks": "wishBooks",
  "readingBooks": "readingBooks",
  "listenedMusics": "listenedMusics",
  "wishMusics": "wishMusics",
  "listeningMusics": "listeningMusics",
  "playedGames": "playedGames",
  "wishGames": "wishGames",
  "playingGames": "playingGames",
}

参数对应

电影 书籍 音乐 游戏
看过 读过 听过 玩过
想看 想读 想听 想玩
在看 在读 在听 在玩

Getter

createDoubanDataGetter 的返回值是一个豆瓣标记数据的 Getter 函数,里面是一个 Promise,通过回调方法可以对 Getter 获取的数据进行相应处理。如:

getDoubanWishMovies(userName, pageStart = 1, pageEnd = 2, sleepTimer = 1500).then(function (data) {
  // 数据、路径、文件名
  saveDoubanData(data, STORE_PATH + "/hqweay/movie/", "wishMovies");
})

可选参数

getDoubanWatchedMovies(userName, pageStart = 1, pageEnd = 2, sleepTimer = 1500);
参数 说明
userName 豆瓣帐号
pageStart 数据获取开始页(注意:一页 15 条数据)
pageEnd 数据获取结束页
sleepTimer 爬取数据的时间间隔(不建议修改,过快会被限制访问...)默认为 1500(ms)

saveDoubanData

saveDoubanData() 是这个项目核心外的一个方法,用于将 Getter 获取的数据保存至本地。

saveDoubanData(data, STORE_PATH = "douban-data-backup", fileName = "my-info");

参数说明

参数 说明
data 数据
STORE_PATH 存储路径
fileName 保存文件名

项目说明

MarkAll 里的豆瓣爬虫抽取为插件...

结构

把获取豆瓣数据抽象为三步:获取页面、解析页面、数据存储。

核心是 markall-douban-data-getter-func-creater.js,用户可以通过该文件提供的方法创建一个 获取某项信息的函数。

如:

let getDoubanWatchedMovies = createDoubanDataGetter("watchedMovies");
let getDoubanWishMovies = createDoubanDataGetter("wishMovies");

markall-douban-data-getter-func-creater.js 依赖 get-douban-data-url.jsresolve-douban-data.jssave-douban-data-to-local.js

get-douban-data-url.js:通过参数获取豆瓣信息页面的 url

resolve-douban-data.js:解析对应豆瓣信息页面的标签获取数据。

save-douban-data-to.js:备份数据的存储

注意:现在文件夹下的 resolve 文件是 resolve-douban-data-to-json.js,表示获取信息后以 JSON 格式存储。 同理,save 文件是 save-douban-data-to-local.js,表示存储至本地。

豆瓣信息页面的 URL

可参考目录下的 src/config/douban-data-urls.md

备份数据样例

参考 /douban-data-backup 下的文件。

开发

您可以创建自己的 save-douban-data-to-cloud.js 等类似文件编写上传到存储服务的逻辑。

也可以创建自己的 resolve-douban-data-to-csv.js 解析数据为 csv 格式保存...

也许我后面会写...

其它

另外,话说保存数据格式为 JSON,其它格式可以使用在线转换工具嘛...

比如 JSON 转 CSV :https://www.bejson.com/json/json2excel/

一些问题

豆瓣读过的书籍页面直接访问 403,但是先访问用户主页,再访问读过的书籍页面就没问题。对比两个页面的请求头发现相差一个 Cookie 字段,但是——我又没登录。看样子只要有该字段就没问题,服务器没做其它啥验证。

关联

hexo-douban-getter :基于本项目写的展示豆瓣标记条目的 Hexo 插件。

You can’t perform that action at this time.