初衷
由于老婆是一個追求極致高效(看她工作辛苦??)工作的新媒體運營,于是請求我看能不能幫她簡化流程。作為一名愛老婆的前端攻城獅,這怎么能難得到我。三下五除二(還是查了不少網(wǎng)上的代碼,畢竟外號:代碼搬運工嘛)就擼出了下面的代碼。
代碼解釋
原本打算用后端node爬取的,但研究了一番后發(fā)現(xiàn),不能滿足夫人翻頁的需求,于是采用前端爬取的方案,雖然多了一些體力活,但相比原先的純手工打造還是進化了不知多少個世紀(嘿嘿??)呢!
代碼中運用到了jquery,ES6的寫法。
Talk is cheap,show me the code!
// 1 step
const script = document.createElement("script");
script.src = "https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js";
const s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(script, s);
// 2 step
let arr = [],
page = 2,
sequence = 1;
const currentCrawl = () => {
$('.figures_list li').each(function (index, item) {
let title = $(this).find('strong a').text(),
reading = $(this).find('.figure_info .info_inner').text(),
time = $(this).find('.figure_info .figure_info_time').text();
if (reading.includes('萬')) {
reading = reading.replace('萬', '') * 10000;
}
arr.push({'id': sequence, 'title': title, 'reading': reading, 'time': time});
sequence++;
});
console.log(`爬取第${page - 1}頁成功,正在跳轉(zhuǎn)第${page}頁`);
$('.page_next')[0].click();
page++
};
const tableToExcel = () => {
console.log(`正在導出數(shù)據(jù)`);
//列標題,逗號隔開,每一個逗號就是隔開一個單元格
let str = `序號,標題,瀏覽量,時間\n`;
//增加\t為了不讓表格顯示科學計數(shù)法或者其他格式
for (let i = 0; i < arr.length; i++) {
for (let item in arr[i]) {
str += `${arr[i][item]},`;
}
str += '\n';
}
//encodeURIComponent解決中文亂碼
let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
//通過創(chuàng)建a標簽實現(xiàn)
let link = document.createElement("a");
link.href = uri;
//對下載的文件命名
link.download = "數(shù)據(jù)表.csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
//爬取當前頁
currentCrawl();
//導出數(shù)據(jù)
tableToExcel();