如何用代码控制浏览器下载知乎大v的粉丝数据?
这个是答应了群友好久的一篇教程。 在之前也有几篇文章是解答公众号订阅用户的相关问题而写的,例如:
欢迎用户在后台留言需解答的问题, mixlab 将会不定期的从中选择提供解决方案。同时 mixlab 微信群已经汇集了机器学习、自然语言处理、前端、后端、产品经理、UI设计师、建筑设计师、高校教师、CEO~相关问题,也会有热心群友解答。
回到本文,群友问:如何在浏览器简便地爬取数据,并下载成 json 格式的文件到本地电脑。本文以下载知乎大v的粉丝数据为例,介绍4个知识点,爬虫相关的 html 获取与解析,模拟鼠标点击,缓存数据至本地,自动下载文件至本地。接下来我们一步步来:
1
选定目标页面
爬取知乎大 v 的粉丝数据,比如拿李开复老师的知乎开刀:
https://www.zhihu.com/people/kaifulee/followers
2
编写爬取函数
浏览器打开后,在 console 面板注入以下代码:
function getFollows(){
var lis=document.querySelectorAll(‘.List-item’);
var res=JSON.parse(localStorage.getItem(‘followers_zhihu’))||[];
for(var i=0;i<lis.length;i++){
var li=lis[i];
var a=li.querySelector(‘.UserLink-link’);
var url=a.getAttribute(‘href’);
var name=a.querySelector(‘img’).alt;
var qmd=li.querySelector(‘.RichText’)?li.querySelector(‘.RichText’).innerText:’’;
var status=li.querySelector(‘.ContentItem-status’)?li.querySelector(‘.ContentItem-status’).innerText:’’;
res.push({url,name,qmd,status})
};
console.log(res);
localStorage.setItem(‘followers_zhihu’,JSON.stringify(res));
document.querySelector(‘.PaginationButton-next’).click();
};
3
开始自动获取数据
开启一个定时任务,再输入:
window._t=setInterval(getFollows,1600);
4
保存数据至本地文件
等待爬取完成后,再输入:
window.clearInterval(window._t);
停止定时任务,或者直接刷新下浏览器暴力停止下哈。然后输入:
var ssss=localStorage.getItem(‘followers_zhihu’);
function export_raw(name, data) {
var urlObject = window.URL || window.webkitURL || window;
var export_blob = new Blob([data]);
var save_link = document.createElementNS(“http://www.w3.org/1999/xhtml“, “a”);
save_link.href = urlObject.createObjectURL(export_blob);
save_link.download = name;
save_link.click();
};
执行下:
export_raw(‘zhihufollows.json’,ssss)
这样李开复老师的粉丝数据就都获取到了,接下来想怎么分析就怎么分析吧~例如,我们可以找出粉丝中的斜杆青年:
"WEB前端工程师/Ui设计师。",
"前端开发/设计爱好者",
"Web 前端 / 像素字体设计师",
"设计师,人工智能编程",
"设计师加前端工程师",
"懂设计的前端小白",
"前端开发&ui设计尸",
"设计师 前端 代码 UI 网页 广告",
"设计师/WEB前端工程师/自媒体人",
"不会前端的设计师不是好产品经理",
"前端攻城狮,略懂一点设计,饮四季茶,写八九行代码,十全大补书中达",
"产品经理/前端开发/交互设计/游戏原画",
"不想编程的伪码农不是好设计师",
"会编程的交互设计师",
"望着设计,想着编程,做着文员",
"交互设计/产品设计/数据可视化/网络开发/前端设计",
"景观设计/平面设计爱好者/前端自学中/猫/伪乐观的悲观主义者",
"不想当设计师的产品经理不是好前端",
"业余家装设计/插画/编程/篮球/电子商务",
"懵懂编程,专注设计",
"前端控/设计控"
ps:本文仅供学习研究技术之用。
关于各种技术问题,在 mixlab 的微信群或知识星球都有定期的探讨。本文同时在知乎专栏:《人工智能+设计修炼指南》发表。本公众号定期更新人工智能&设计&科技内容。谈点设计,敲点代码,偶尔创作点人工智能实验产品。