Giter Site home page Giter Site logo

louxiaxiaohei / baiduwenku-go Goto Github PK

View Code? Open in Web Editor NEW

This project forked from wmet/baiduwenku-go

0.0 1.0 0.0 8.08 MB

百度文库文档免券下载 支持源格式下载 基于爬虫和共享vip账号两种方式 已上云 如何打造自己的文库下载站点

Go 65.06% CSS 6.48% HTML 26.75% Dockerfile 0.79% TSQL 0.76% Shell 0.16%

baiduwenku-go's Introduction

百度文档免积分下载

介绍

已上云,demo:http://175.24.33.33:9999/baiduspider

支持两种下载方式:①基于爬虫的非源文件下载方式 ②基于vip账号共享的源文件下载方式。

第一种下载方式存在公式无法提取、word中图片无法提取、少部分文档排版丑陋、ppt只能转码为多张图片打包的zip格式等问题,经过我多番的调整,大部分word文档的格式已经能够得到百分之八九十的还原,但依旧推荐使用第二种方式下载。

第二种下载方式下载文件为源文件,与百度文库保存的文件一致。原理较简单,就是我服务器利用我自费的vip账号帮你下载,然后再传给你。

为了防止接口被人滥用,遂采用了需要注册登录才能使用的方式。目前对所有人开放注册,但仅利用智慧华中大邮箱注册的用户可以不限次数下载,其他邮箱注册用户每天仅有3次下载机会且无专享vip文档下载特权。百度文库的文档有两种类型:普通vip型,专属vip型。对于智慧华中大邮箱注册的用户来说,普通vip文档能够实现完美不限量下载,专属vip型文档每个vip账号每月有下载数量限制(百度原因,并非本人限制),demo中的vip账号剩余下载数目已经在网页中给出,所有人共用完只能等下月。

如何运行

①原生应用安装方式

配置config.json,以下参数均需自行设置:

"DB_NAME": "",			//mysql数据库
"DB_CONN":"", 			//数据库连接形如"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
"DOMAIN": "",			//自己服务器的域名或公网IP或回环地址127,非广播地址0.0.0.0
"LISTEN_ADDRESS":"", 		//server服务器监听地址
"LISTEN_PORT": "", 		//server服务器监听端口
"IMAP_PORT": ,		 	//IMAP服务端口,如465
"IMAP_SERVER": "", 		//IMAP服务的服务器地址,如smtp.qq.com
"IMAP_EMAIL": "", 		//提供IMAP服务的具体邮箱
"IMAP_PASSWORD": "", 		//提供IMAP服务邮箱的IMAP授权码
"BDUSS": "",			// 一个vip账号的cookie
"REGEXP":"" 			//正则匹配规则,符合该规则的邮箱有下载专享文档的权限,如.*@hust.edu.cn只许智慧华中大邮箱,.*为允许所有邮箱。

本地跑项目把DOMINLISTEN_ADDRESS都设为127.0.0.1即可。

关于IMAP的配置,可参考IMAP

关于BDUSScookie获取:

在浏览器中登录百度文库(必须是会员账号),利用浏览器的开发者工具获取cookie。

chrome:F12->Application->cookies

GLQT__@EB9N67Z`_L@JJ_CE.png

firefox:F12->Storage->cookies

LT553244YT9E___WJZ3RUZN.png

安装一种mysql,并建表。

create table hustusers(	
id int primary key auto_increment,
emailadd  varchar(40) not  null unique,
password varchar(20) not null,
permissioncode tinyint default 1,
remain tinyint default 3
);

create table hustsessions(
emailadd varchar(40) not null primary key,
sessionid varchar(100)  not null 
);

安装第三方go依赖,编译并运行程序

go mod tidy
go build main.go
./main

②docker安装方式

请自行下载安装docker以及docker-compose。克隆整个项目,进行初始配置:

config.json,标为无需配置的地方不应修改 :

"DB_NAME": "mysql",			//无需配置
"DB_CONN":"root:123456@tcp(mysql:3306)/wenkudb", //无需配置
"DOMAIN": "",				//自己服务器的域名或公网IP或回环地址127,非广播地址0.0.0.0
"LISTEN_ADDRESS":"0.0.0.0", 		//服务地址,调试可以改成127.0.0.1
"LISTEN_PORT": "9898", 			//无需配置
"IMAP_PORT": , 				//IMAP服务端口,如465
"IMAP_SERVER": "", 			//IMAP服务的服务器地址,如smtp.qq.com
"IMAP_EMAIL": "", 			//提供IMAP服务的具体邮箱
"IMAP_PASSWORD": "", 			//提供IMAP服务邮箱的IMAP授权码
"BDUSS": "" 				// 一个vip账号的cookie,不进行设置则只能利用爬虫解析方式下载
"REGEXP":""				//同上

服务默认监听端口为80,如需修改监听端口则对docker-compose.yml进行修改:

TIM图片20200714053915.png

服务启动:

chmod 755 start.sh
./start.sh

服务停止:

docker stop wenku

删除所有用户数据:

#容器中mysql的数据是挂载在项目目录下的mysql文件夹中
rm -rf ./mysql

若更改了配置,为使配置生效都应该执行./start.sh

手动管理容器中mysql方法:

docker exec -it mysql bash
#进入容器bash后即可操纵mysql
#mysql用户名root,密码为123456,数据库名为wenkudb,两张表hustsessions以及hustusers
#exit退出容器

待完善

①花三天赶工的项目,前端页面比较丑陋,待优化。

②数据传输的加密以及数据库中用户信息的加密。

③爬虫的并发性上还可以下些功夫。

④api层可以单独分离出,偷懒都写在了main函数中。

⑤利用Bucket算法对用户访问量进行限制。

感言

做这个之前,相关的go教程确实没有多少,也沉不下心来看别人python项目的源码,完全靠自己在爬虫上的经验来一步一步码完这个项目。碰到问题很多,最头疼的还是编码格式转换的问题,百度利用GBK1312编码格式,GBKUTF-8有第三方的库,但Unicode编码转汉字,尤其是一串Unicode编码的字符串中参杂数字或英文符号这种,网上没找到一个能满足需求的go库,总有些细小的问题,无奈之下只好自己造了个轮子,写了一个满足自己强迫症的库。

确实不太擅长前端的编写,时间也很紧,三天赶工东拼西凑最后还是拼出了能看的东西,希望有前端厉害的朋友帮忙重构,感激不尽。

baiduwenku-go's People

Contributors

gufeijun avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.