Skip to content

Instantly share code, notes, and snippets.

@zaaack
Last active December 8, 2021 20:19
Show Gist options
  • Save zaaack/ec4b5168e8dddfb882b13f49a70c797d to your computer and use it in GitHub Desktop.
Save zaaack/ec4b5168e8dddfb882b13f49a70c797d to your computer and use it in GitHub Desktop.
知乎想法/答案备份, copy 到 console 执行即可
//知乎答案爬取
var $ = document.querySelector.bind(document)
var $$ = document.querySelectorAll.bind(document)
var zh={
Download:function (content, filename) {
// 创建隐藏的可下载链接
var eleLink = document.createElement('a');
eleLink.download = filename;
eleLink.style.display = 'none';
// 字符内容转变成blob地址
var blob = new Blob([content]);
eleLink.href = URL.createObjectURL(blob);
// 触发点击
document.body.appendChild(eleLink);
eleLink.click();
// 然后移除
document.body.removeChild(eleLink);
},
get_page(){
var page=$(".PaginationButton-next") && Number($(".PaginationButton-next").previousElementSibling.innerText);
return page || 1;
},
now_page(){
return $(".PaginationButton--current") && Number($(".PaginationButton--current").innerText) || 1
},
get_item(){
var re=[];
$$('.List-item>.AnswerItem').forEach(function(el){
var item={
title: el.querySelector('.ContentItem-title').innerText,
text:el.querySelector('.RichContent-inner').innerText,
time:el.querySelector(".ContentItem-time").innerText,
}
item.time = item.time.replace(/发布于\s+/, '')
re.push(item);
})
return re;
},
href(page){
var url=this.get_url()+"?page="+page;
location.href=url;
},
get_url(){
var url=location.pathname;
return "https://www.zhihu.com"+url;
},
local(k,v){
if(!v){
var item=localStorage.getItem(k);
if(item&&item!="undefined"){
// console.log("item",item);
return JSON.parse(item);
}else{
return false;
}
}
localStorage.setItem(k,JSON.stringify(v));
}
}
function sleep(ms) {
return new Promise(res=> setTimeout(res, ms))
}
zh.local("answer",[]);
var main=async ()=>{
if(!location.href.match("answers")){
alert("请打开知乎答案页面");
return;
}
var total=zh.get_page();
var now=zh.now_page();
var data=(now>1&&zh.local("answer"))?zh.local("answer"):[];
$$('.Button.ContentItem-more').forEach(el=> {
el.click()
})
await sleep(2000)
function save() {
let html = data.map(item => `<div>
<h3>${item.title}</h3>
<p>${item.text}</p>
<info>发布于${item.time}</info>
</div>`).join('')
zh.Download(html,"answer.html");
alert("完成");
}
if(data.length==0&&now>1){
save()
return;
}
var tmp=zh.get_item();
if(tmp){
tmp.forEach(v=>{
data.push(v);
})
}
zh.local("answer",data);
console.log('now', now, 'total', total)
if(now>=total){
save()
return;
}
now++;
$('.PaginationButton-next').click()
await sleep(3000)
await main()
}
main();
//想法备份
var $ = document.querySelector.bind(document)
var $$ = document.querySelectorAll.bind(document)
var zh={
Download:function (content, filename) {
// 创建隐藏的可下载链接
var eleLink = document.createElement('a');
eleLink.download = filename;
eleLink.style.display = 'none';
// 字符内容转变成blob地址
var blob = new Blob([content]);
eleLink.href = URL.createObjectURL(blob);
// 触发点击
document.body.appendChild(eleLink);
eleLink.click();
// 然后移除
document.body.removeChild(eleLink);
},
get_page(){
var page=$(".PaginationButton-next") && Number($(".PaginationButton-next").previousElementSibling.innerText);
return page || 1;
},
now_page(){
return $(".PaginationButton--current") && Number($(".PaginationButton--current").innerText) || 1
},
get_item(){
var re=[];
$$('.PinItem>.RichContent>.RichContent-inner').forEach(function(el){
var item={
text:el.innerText,
time:el.nextElementSibling.querySelector(".ContentItem-time span").getAttribute('data-tooltip'),
}
item.time = item.time.replace(/发布于\s+/, '')
if (!/^\d{4}-/.test(item.time)) {
item.time = '2020-' + item.time
}
re.push(item);
})
return re;
},
href(page){
var url=this.get_url()+"?page="+page;
location.href=url;
},
get_url(){
var url=location.pathname;
return "https://www.zhihu.com"+url;
},
local(k,v){
if(!v){
var item=localStorage.getItem(k);
if(item&&item!="undefined"){
// console.log("item",item);
return JSON.parse(item);
}else{
return false;
}
}
localStorage.setItem(k,JSON.stringify(v));
}
}
zh.local("xiangfa",[]);
var main=()=>{
if(!location.href.match("pin")){
alert("请打开知乎想法页面");
return;
}
var total=zh.get_page();
var now=zh.now_page();
var data=(now>1&&zh.local("xiangfa"))?zh.local("xiangfa"):[];
function save() {
let html = data.map(item => `<div>
<h3>${item.time}</h3>
<p>${item.text}</p>
</div>`).join('')
zh.Download(html,"xiangfa.html");
alert("完成");
}
if(data.length==0&&now>1){
save()
return;
}
var tmp=zh.get_item();
if(tmp){
tmp.forEach(v=>{
data.push(v);
})
}
zh.local("xiangfa",data);
console.log('now', now, 'total', total)
if(now>=total){
save()
return;
}
now++;
$('.PaginationButton-next').click()
setTimeout(main, 3000)
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment